Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Im "OnClick" eines Buttons erkennen, ob es per Maus erfolgte (https://www.delphipraxis.net/90963-im-onclick-eines-buttons-erkennen-ob-es-per-maus-erfolgte.html)

daddy 26. Apr 2007 16:30


Im "OnClick" eines Buttons erkennen, ob es per Mau
 
Weiß jemand, ob ich im OnClick-Ereignis eines Buttons herausfinden kann, ob es per Tastatur oder per Maus ausgelöst wurde?

Im ControlState ist der Zustand "csLButtonDown" zu diesem Zeitpunkt schon nicht mehr eingetragen. Und ich würde gerne vermeiden mir im MouseDown-Ereignis selber zu merken, ob per Maus geklickt wurde, da diese Abfrage bei vielen Knöpfen in vielen verschiedenen Formularen erfolgen soll. Außerdem kann man auf einen Button ja auch klicken, den Mauszeiger vom Button weg bewegen und die Maustaste wieder loslassen. In diesem Fall wird das OnClick-Ereignis ja gar nicht ausgelöst. Evtl. kann ich einen eigenen Knopf als Komponente erzeugen aber vielleicht gibt es ja auch eine einfache Abfragemöglichkeit, die ich nur nicht finde.

Danke für alle Hinweise

Gruß

Daddy

Apollonius 26. Apr 2007 16:47

Re: Im "OnClick" eines Buttons erkennen, ob es per
 
Prüf doch einfach im onClick mit getasynckeystate() ob Leer- oder Entertaste gedrückt sind

Nuclear-Ping 27. Apr 2007 01:40

Re: Im "OnClick" eines Buttons erkennen, ob es per
 
Was willst du erreichen, wenn man mal fragen darf?

daddy 27. Apr 2007 08:35

Re: Im "OnClick" eines Buttons erkennen, ob es per
 
Beim Druck eines Knopfes öffnet sich ein Fenster. Innerhalb des Fensters gibt es verschiedene Komponenten und auf eine davon möchte ich anschließend automatisch den Mauszeiger positionieren. Das klappt soweit auch. Aber es soll eben nur dann geschehen, wenn der ursprüngliche Knopf per Maus angeklickt wurde und nicht wenn er per Tastatur (also Leertaste, Enter oder Hotkey) ausgelöst wurde.

BerndS 27. Apr 2007 10:59

Re: Im "OnClick" eines Buttons erkennen, ob es per
 
Hallo,
einfach über OnMouseDown/OnMouseUp ein Variable setzen:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var S:String;
begin
  if fMouseDown then
    S:='Mouse'
  else
    S:='Tastatur';
  ShowMessage(S);

end;

procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  fMouseDown:=True;
end;

procedure TForm1.Button1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  fMouseDown:=False;
end;
Gruß Bernd

Luckie 27. Apr 2007 11:04

Re: Im "OnClick" eines Buttons erkennen, ob es per
 
Und warum keine MSDN-Library durchsuchenWM_COMMAND an das Fenster schicken mit der ID der Schaltfläche? Mit der Maus klicken zu wollen ist mehr als eine Krücke.
Beispiel aus einem Programm:
Delphi-Quellcode:
SendMessage(hDlg, WM_COMMAND, MakeWParam(ID_MNU_CHOOSE_COMP, 0), 0);

SubData 27. Apr 2007 11:48

Re: Im "OnClick" eines Buttons erkennen, ob es per
 
Er will nicht mit der Maus klicken, sondern die Maus positionieren, wenn man damit geklickt hat ;>

daddy 27. Apr 2007 12:14

Re: Im "OnClick" eines Buttons erkennen, ob es per
 
"SubData" hat recht :) , ich möchte die Maus nur positionieren und nicht klicken.

BerndS schrieb:
Zitat:

einfach über OnMouseDown/OnMouseUp ein Variable setzen:
Das wird meines Erachtens nicht funktionieren, da das "OnClick" erst NACH dem Mouseup ausgeführt wird. Sonst hätte ich ja auch mit csLButtonDown im "OnClick" Erfolg gehabt siehe #1.

Mir ist klar, dass ich selber in meinen Komponenten oder in der Anwendung etwas vorsehen kann, um mir den Mausklick zu merken und dies dann abzufragen. Ich frage mich nur, ob in Delphi selber dafür noch nichts vorgesehen ist.

Gruß, Daddy

andreash 27. Apr 2007 12:30

Re: Im "OnClick" eines Buttons erkennen, ob es per
 
Zitat:

Zitat von Apollonius
Prüf doch einfach im onClick mit getasynckeystate() ob Leer- oder Entertaste gedrückt sind

Darüber lassen sich auch die Maustasten abfragen.

daddy 27. Apr 2007 13:00

Re: Im "OnClick" eines Buttons erkennen, ob es per
 
@Apollonius, @AndreasH:

Mit
Delphi-Quellcode:
(GetAsyncKeyState(VK_LBUTTON) = VK_LBUTTON)
kann ich tatsächlich erkennen, dass die linke Maustaste gedrückt wurde. Allerdings erkenne ich nicht, wann dies geschah. Das heißt, wenn ich irgendwo mit der Maus hinklicke und anschließend meinen Button per Tastatur betätige, liefert mir diese Abfrage "true" zurück, obwohl ich den Button gar nicht per Maus betätigt habe. Das liegt daran, das "GetAsyncKeyState" als Ergebnis liefert, ob eine bestimmte Taste gedrückt wurde, NACHDEM "GetAsyncKeyState" das letzte mal aufgerufen wurde. Ich komme also auch hier nicht drum herum etwas zu programmieren, wodurch "GetAsyncKeyState" immer wieder initialisiert wird.

Trotzdem danke für den Hinweis. Es scheint ja wohl so zu sein, dass Delphi für diese einfache Abfrage nichts vorsieht. Also muss ich evtl. die entscheidende Stelle in der VCL suchen und sehen, ob ich dort selber etwas einfügen kann.

Gruß, Daddy

PS: Falls doch noch jemand eine andere Idee hat ... :-D


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:33 Uhr.
Seite 1 von 2  1 2      

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