![]() |
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 |
Re: Im "OnClick" eines Buttons erkennen, ob es per
Prüf doch einfach im onClick mit getasynckeystate() ob Leer- oder Entertaste gedrückt sind
|
Re: Im "OnClick" eines Buttons erkennen, ob es per
Was willst du erreichen, wenn man mal fragen darf?
|
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.
|
Re: Im "OnClick" eines Buttons erkennen, ob es per
Hallo,
einfach über OnMouseDown/OnMouseUp ein Variable setzen:
Delphi-Quellcode:
Gruß Bernd
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; |
Re: Im "OnClick" eines Buttons erkennen, ob es per
Und warum keine
![]() Beispiel aus einem Programm:
Delphi-Quellcode:
SendMessage(hDlg, WM_COMMAND, MakeWParam(ID_MNU_CHOOSE_COMP, 0), 0);
|
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 ;>
|
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:
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 |
Re: Im "OnClick" eines Buttons erkennen, ob es per
Zitat:
|
Re: Im "OnClick" eines Buttons erkennen, ob es per
@Apollonius, @AndreasH:
Mit
Delphi-Quellcode:
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.
(GetAsyncKeyState(VK_LBUTTON) = VK_LBUTTON)
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 19:52 Uhr. |
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