Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi eine Aktion solange ausführen, wie Maustaste gedrückt ist (https://www.delphipraxis.net/119225-eine-aktion-solange-ausfuehren-wie-maustaste-gedrueckt-ist.html)

BAMatze 22. Aug 2008 16:23


eine Aktion solange ausführen, wie Maustaste gedrückt ist
 
Hallo an alle,

Ich habe ein Problem. Ich will eine bestimmte Aktion solange ausführen, wie die linke Maustaste gedrückt ist. Habe mich hier schon durch einige ähnliche Beiträge geklickt und folgenden Quellcode geschrieben, der anscheinend bei den anderen funktioniert hat.

Code:
procedure TForm1.Button1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin

  if shift = [ssleft] then Lb_Pos.Caption := 'Maustaste gedrückt'
  else Lb_Pos.Caption := 'Position: '+ inttostr(MMC_getPos);

end;
Meine Frage jetzt ist, warum mir in dem Label Lb_Pos nicht die Schrift "Maustaste gedrückt" angezeigt wird. Die Funktion MMC_getPos kann ignoriert werden, da diese durch eine externe DLL eingeführt wird und auch einen int-Wert zurückgibt.

Es wird durch Delphi kein Fehler angegeben.

LuCSteR 22. Aug 2008 16:27

Re: eine Aktion solange ausführen, wie Maustaste gedrückt is
 
Bei mir gibts nen Ereignis OnKeyPressed:
Delphi-Quellcode:
procedure Button1KeyPress(Sender: TObject; var Key: char);
Damit müsste es doch funktionieren oder?
Den virtuellen Key für die linke Maustaste findest sicher bei google.de

Grüße

DeddyH 22. Aug 2008 16:32

Re: eine Aktion solange ausführen, wie Maustaste gedrückt is
 
Wäre OnMouseDown nicht angebrachter?

Neutral General 22. Aug 2008 16:36

Re: eine Aktion solange ausführen, wie Maustaste gedrückt is
 
Zitat:

Zitat von DeddyH
Wäre OnMouseDown nicht angebrachter?

Um DeddyHs Vorschlag mal weiterzuführen:

Delphi-Quellcode:
procedure TForm1.Button1MouseDown(Sender: TObject);
begin
  Aktion.Starten;
end;

procedure TForm1.Button1MouseUp(Sender: TObject);
begin
  Aktion.Beenden;
end;
Allerdings kann der Benutzer die Maustaste auch außerhalb des Buttons loslassen, so das Button1.OnMouseUp nicht ausgeführt wird.

BAMatze 22. Aug 2008 16:42

Re: eine Aktion solange ausführen, wie Maustaste gedrückt is
 
DAs mit ONMouseDown funktioniert, allerdings nur 1 mal und wenn ich eine While-Schleife mache, produziere ich eine Unendlich-Schleife und muss es abbrechen.

DeddyH 22. Aug 2008 16:45

Re: eine Aktion solange ausführen, wie Maustaste gedrückt is
 
Zitat:

Zitat von Neutral General
Allerdings kann der Benutzer die Maustaste auch außerhalb des Buttons loslassen, so das Button1.OnMouseUp nicht ausgeführt wird.

Komisch, bei mir wird das auch außerhalb des Buttons ausgeführt.

@BAMatze: Hast Du ein Application.ProcessMessages in Deiner Schleife?

kaiser1401 22. Aug 2008 16:46

Re: eine Aktion solange ausführen, wie Maustaste gedrückt is
 
Dann solltest du bei OnMouseDown einen timer starten der in einem gewissen Interwall die gewünscht Aktion ausführt. Im OnMouseUp hälst du ihn dann wieder an. Enabled:=false;

BAMatze 22. Aug 2008 16:49

Re: eine Aktion solange ausführen, wie Maustaste gedrückt is
 
Zitat:

Zitat von DeddyH
Zitat:

Zitat von Neutral General
Allerdings kann der Benutzer die Maustaste auch außerhalb des Buttons loslassen, so das Button1.OnMouseUp nicht ausgeführt wird.

Komisch, bei mir wird das auch außerhalb des Buttons ausgeführt.

@BAMatze: Hast Du ein Application.ProcessMessages in Deiner Schleife?

Hab das ebend getestet, bei mir wird das nur ausgeführt, wenn ich wirklich den Button klicke, allerdings leider immer nocht mit If-Anweisung nur 1 mal und bei while-Schleife unendlich mal. :(

DeddyH 22. Aug 2008 16:50

Re: eine Aktion solange ausführen, wie Maustaste gedrückt is
 
Zeig mal Deinen Code.

BAMatze 22. Aug 2008 16:50

Re: eine Aktion solange ausführen, wie Maustaste gedrückt is
 
Zitat:

Zitat von kaiser1401
Dann solltest du bei OnMouseDown einen timer starten der in einem gewissen Interwall die gewünscht Aktion ausführt. Im OnMouseUp hälst du ihn dann wieder an. Enabled:=false;

Ah danke das ist eine gute Idee. Werde ich mal probieren.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:38 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz