![]() |
ButtonKlick ermitteln und wiedergeben
Hi,
Ich versuche verzweifelt eine Funktion zu erstellen die herausfindet ob ein button geklickt wurde. Dabei kann ich aber wie sonst keine procedure nehmen weil ich mehrere Buttons habe. Hier mal meine Funktion an der ich werkelte:
Delphi-Quellcode:
Hier jetzt bei der Funktion sieht man das die Funktion durch eine DLL aufgerufen wird.
function ButtonClick(Obj: TButton): Integer; stdcall;
var i: Integer; begin for i := Low(ButtonArray) to High(ButtonArray) do begin if Obj = ButtonArray[i].BHandel then begin if ButtonArray[i].BHandel.OnClick then result := 1 else result := 0; end; end; end; ButtonArray ist außerdem ein Dynamisches array wo die Handels gespeichert werden. Doch zu meinem Problem. In der zeile "if ButtonArray[i].BHandel.OnClick then" sagt er mir das Parameter fehlen. Ich schetze mal das dass Fensterhandel fehlt. Doch ich habe bis jetzt keine möglichkeit gefunden wie ich das Fensterhandel übergeben soll. Mfg |
Re: ButtonKlick ermitteln und wiedergeben
Hi,
Hat niemand ne Idee? :freak: Mfg |
Re: ButtonKlick ermitteln und wiedergeben
Zitat:
irgendwer muss das onClick-Event ja senden... ausserdem hat ein TButton die Eigenschaft "Down", vielleicht kannst du diese anstelle von OnClick verwenden. |
Re: ButtonKlick ermitteln und wiedergeben
Hi,
Ahh. Okay. Danke. Aber eine Frage hätte ich da noch. Wie mache ich denn überhaupt einen "Sender"? Mfg |
Re: ButtonKlick ermitteln und wiedergeben
Zitat:
|
Re: ButtonKlick ermitteln und wiedergeben
Hallo,
Sorry aber ich weiß immer noch nciht wie ich das anstellen soll. :? Die variable Obj ist ja nur zum überprüfen da. :gruebel: Mfg |
Re: ButtonKlick ermitteln und wiedergeben
Hi,
Indem du OnClick aufrufst, überprüfst du nicht, ob der Button geklickt wurde. Stattdessen rufst du den Eventhandler für das Klickereignis des Buttons auf. Auf deutsch: OnClick checkt nicht, ob der Button geklickt wurde, sondern befiehlt ihm, sich so zu benehmen als sei das der Fall. Dem Ereignis OnClick gehört per Deklaration
Delphi-Quellcode:
der Parameter Sender an. Da steht dann drin, wer das Ereignis ausgelöst hat.
type TNotifyEvent = procedure(Sender: TObject) of object;
Eine Möglichkeit für dich wäre vielleicht, die Klick-Botschaft des Windows-Kernels abzufangen. Das ist aber (glaub ich) viel Aufwand und wohl auch ein bisschen Overkill. :pale: Vielleicht jemand noch ne bessere Idee? |
Re: ButtonKlick ermitteln und wiedergeben
Wie definierst du überhaupt "wurde geklickt"? Ist die linke Mautaste genau zu dieser Zeit gedrückt oder soll es einfach der zuletzt gedrückte Button o.Ä. sein?
|
Re: ButtonKlick ermitteln und wiedergeben
Also du kannst entweder die WndProc deines Progs überschreiben, das geht dann so:
Delphi-Quellcode:
Oder du fängst nur die Message WM_COMMAND ab:
type
TForm1 = Class(TForm) Button1: TButton; Private { Private-Deklarationen } Public { Public-Deklarationen } Procedure WndProc(Var Msg: TMessage); Override; end; [...] implementation [...] Procedure TForm1.WndProc(Var Msg: TMessage); Begin If Msg.Msg = WM_COMMAND Then Begin If Msg.WParamHi = BN_CLICKED Then Begin If Msg.LParam = Button1.Handle Then Begin ShowMessage('Button1 wurde gedrückt.'); End; End; End; Inherited; End;
Delphi-Quellcode:
mfg matze
type
TForm1 = Class(TForm) Button1: TButton; Private { Private-Deklarationen } Public { Public-Deklarationen } Procedure OnCommand(Var Msg: TMessage);Message WM_COMMAND; end; [...] implementation [...] Procedure TForm1.OnCommand(Var Msg: TMessage); Begin If Msg.WParamHi = BN_CLICKED Then Begin If Msg.LParam = Button1.Handle Then Begin ShowMessage('Button1 wurde gedrückt.'); End; End; End; //Edit: Oder du machst es mit nem OnClick :( |
Re: ButtonKlick ermitteln und wiedergeben
VT-DA will aber den Status des Buttons abfragen. Und da frage ich mich eben, wie der Status des "Geklicktseins" definiert ist :gruebel: .
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:50 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-2025 by Thomas Breitkreuz