![]() |
Mit Message bestimmte Aktionen bei Komponenten ausführen
Hallo zusammen,
ich würde gerne über Messages dementsprechend bei Buttons reagieren. Ich habe schon ein paar Beiträge zu Messages gelesen und schonmal soweit dieses Beispiel erstellt.
Delphi-Quellcode:
Funktioniert auch alles soweit. Jetzt möchte ich aber zum Beispiel bei bestimmten Buttons das gleiche ausführen. Dazu ändere ich die Procedure MyMessages so ab :
type
TForm3 = class(TForm) Memo1: TMemo; SpeedButton1: TSpeedButton; procedure FormCreate(Sender: TObject); private { Private-Deklarationen } public procedure MyMessages(var Msg: TMsg; var Handled: Boolean); end; var Form3: TForm3; implementation {$R *.dfm} procedure TForm3.FormCreate(Sender: TObject); begin Application.OnMessage := MyMessages; end; procedure TForm3.MyMessages(var Msg: tagMSG; var Handled: Boolean); var I: Integer; begin case Msg.message of WM_LBUTTONDOWN: begin Memo1.Lines.Add('TestButton'); end; end; end;
Delphi-Quellcode:
Dann kommt immer undefinierter Bezeichner 'Sender'. Hier stellt sich mir die Frage wieso ?
procedure TForm3.MyMessages(var Msg: tagMSG; var Handled: Boolean);
var I: Integer; begin case Msg.message of WM_LBUTTONDOWN: begin if TSpeedButton(Sender).Name = 'SpeedButton1' then Memo1.Lines.Add('TestButton'); end; end; end; Für eine Erklärung, einen Hinweis oder Links zu passenden Tutorials wäre ich dankbar. Edit: Titel geändert |
Re: Mit Message bestimmte Aktionen bei Komponenten ausführen
Zitat:
Bei Windows Messages gibt es nur Handles. |
Re: Mit Message bestimmte Aktionen bei Komponenten ausführen
Zitat:
Zitat:
|
Re: Mit Message bestimmte Aktionen bei Komponenten ausführen
Zitat:
Nachtrag: Anstelle von TSpeedButton(Sender).Name kannst Du auch TSpeedButton(Sender).Tag verwenden. |
Re: Mit Message bestimmte Aktionen bei Komponenten ausführen
Zitat:
Zitat:
|
Re: Mit Message bestimmte Aktionen bei Komponenten ausführen
Du kannst ja allen Buttons das gleiche OnMouseDown Ereignis zuweisen.
|
Re: Mit Message bestimmte Aktionen bei Komponenten ausführen
ich denke er stellt sich das so vor:
Zitat:
Delphi-Quellcode:
damit kann man auf die messages verzichten...
Procedure onmousedown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); begin if (sender is Tspeedbutton) then begin case (sender as Tspeedbutton).Tag of 0: {dosomething}; 1: {dosomething}; 2: {dosomething}; else end; end; end; aber nicht vergessen... jeder speedbutton braucht einen anderen tag-wert... |
Re: Mit Message bestimmte Aktionen bei Komponenten ausführen
Ja, so ungefähr stelle ich es mir vor. Nur möchte ich das ganze über die Messages machen, da ich auch eigene Messages verarbeiten will. Wenn mich nicht alles täuscht, hat doch die Komponente TButton ein Handle oder irre ich mich da ?
|
Re: Mit Message bestimmte Aktionen bei Komponenten ausführen
Zitat:
|
Re: Mit Message bestimmte Aktionen bei Komponenten ausführen
Ok, dass mit den Handle's habe ich jetzt hinbekommen. Da sage ich schonmal danke. Jetzt ist nur noch die Frage, ob ich genau in der Procedure MyMessages eine Message abfangen kann und nicht an die Komponente weiterleite. Wenn ja, wie mache ich das ? Ausgangspunkt sind TButtons.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:21 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