Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - MouseClick abfragen


ferra - So 23.01.11 16:04
Titel: MouseClick abfragen
Guten Abend,

ich bin ganz neu in Delphi und stehe bereits auf meinem ersten Problem.

Ich möchte innerhalb einer gestarteten Prozedur abfragen, ob die linke Maustate gedrückt ist.

Ich stellte mir das ganze etwas einfach vor und hab es anfangs mit 'if TMouseButton(mbleft) = true then' probiert. Leider sagte er mir inkompatible Typen.
Danach folgten eine ganze Reihe anderer Versuche.

Kann mir jemand von euch weiterhelfen?

Ich arbeite übrigens in Delphi 6.

MfG


Moderiert von user profile iconNarses: Topic aus Windows API verschoben am So 23.01.2011 um 15:06


Narses - So 23.01.11 16:09

Moin und :welcome: im Forum!

user profile iconferra hat folgendes geschrieben Zum zitierten Posting springen:
Ich möchte innerhalb einer gestarteten Prozedur abfragen, ob die linke Maustate gedrückt ist.
Geht es um einen Ereignishandler, der zu einer Komponente gehört? Normalerweise wird dir (bei den Ereignissen, wo das Sinn macht) hier der Status als Parameter mitgeliefert. :idea: Oder ist das eine Methode (bzw. Prozedur), die du unabhängig vom Formular-Kontext verwendest?

cu
Narses


ferra - So 23.01.11 16:31

Also das ganze soll später ein kleines Spielchen nach Zelda-Art werden.

Dabei habe ich bis jetzt alles fertig, außer die Steuerung über die Maus.

Probeweise habe ich sämtliche benötigten Prozeduren und Funktionen auf einen Button gelegt, sodass das Spiel startet, wenn ich da draufklicke.

Daher sieht die Prozedur so aus:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure TForm1.Button1Click(Sender: TObject);
var blabla:integer;
begin
  KarteLaden('source\karten\karte1.txt');
  GrafikenLaden();
  blabla:=0;
  while blabla<33 do
    begin
    KarteInBufferSchreiben(blabla+10,blabla+10,1);
    KarteAnzeigen(10,10);
    blabla:=blabla+1;
    if TMouseButton(mbleft) = true then  showmessage(inttostr(mouse.CursorPos.x));   //Hier scheiter ich...
    end;

end;


Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt


Narses - So 23.01.11 16:44

Moin!

Ich fürchte, du hast da einen Konzeptfehler drin, und sei es auch nur in deinem "Test". Hier ist ein FAQ-Beitrag [http://www.delphi-library.de/topic_auf+Ereignisse+in+FormAnwendungen+warten+AppState+T1_67969.html], der dein Problem behandelt, auch wenn es auf den ersten Blick nicht danach aussieht. ;) Du arbeitest nämlich mit einer while-Schleife, die deinen Spielfluss kapselt, das wird aber mit einer Windows-Formular-Anwendung nicht klappen, da so etwas ereignisorientiert gemacht werden muss. :idea: Am Ende des Artikels ist ein Link zu einem Memory-Spiel-Tutorial, in dem das Konzept "Ereignisorientiertes Spiel" vielleicht etwas deutlicher (auch mit Code) zu sehen ist.

cu
Narses


ferra - So 23.01.11 16:56

Guten Abend,

danke schön. Ich hab das ganze nun geändert und es scheint auch logischer. Es funktioniert nun auch.

Danke nochmals. :)

MfG ferra