![]() |
TImage.Parent.Perform sendet Message unterschiedlich
(Delphi Version XE3)
Hallo Delphigemeinde, mir ist ein komisches Verhalten der TImage-komponente aufgefallen. Und zwar wollte ich in den Events OnClick, OnMouseDown und OnMouseUp eine Message an das übergeordnete Formular senden via TImage(Sender).Perform. Doch leider wird nur im OnClick die Message an das übergeordnete Formular gesendet. In den anderen beiden Prozeduren zu den Ereignissen wird lediglich eine Message an das Objekt von TImage selbst gesendet. Hier mein Beispielquellcode:
Delphi-Quellcode:
procedure TFormTest.OnClick_Handle(Sender: TObject);
begin if Sender is TForm then begin if Sender = self then Beep; end; if Sender is TImage then begin if Sender = Image then begin // Bei den folgenden beiden Aufrufen wird die Message vom Formular entgegengenommen, wie ich es wollte. // Es werden das OnMouseDown, OnClick, und OnMouseUp-Ereignis des Formulares aufgerufen. TImage(Sender).Parent.Perform(WM_LBUTTONDOWN,MK_LBUTTON,0); TImage(Sender).Parent.Perform(WM_LBUTTONUP,MK_LBUTTON,0); end; end; end; procedure TFormTest.OnMouseDown_Handle(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Sender is TForm then begin if Sender = self then Beep; end; if Sender is TImage then begin if Sender = Image then begin // Bei dem folgenden Aufruf wird die Message vom Image entgegengenommen. // Es entsteht eine Endlosschleife. Image.Parent.Perform(WM_LBUTTONDOWN,MK_LBUTTON,0); end; end; end; procedure TFormTest.OnMouseUp_Handle(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Sender is TForm then begin if Sender = self then Beep; end; if Sender is TImage then begin if Sender = Image then begin // Bei dem folgenden Aufruf wird die Message vom Image entgegengenommen. // Es entsteht eine Endlosschleife. Image.Parent.Perform(WM_LBUTTONUP,MK_LBUTTON,0); end; end; end; Ich habe einmal das TImage gegen einen Button ausgetausch. Dieser funktioniert einwandfrei. Wisst ihr, wieso dieses Verhalten auftritt? MfG, KiDn |
AW: TImage.Parent.Perform sendet Message unterschiedlich
|
AW: TImage.Parent.Perform sendet Message unterschiedlich
Nur Steuerelemente die von TWinControl abgeleitet sind, besitzen ein eigenes Fenster(Handle) und können direkt Nachrichten empfangen.
Fenster leiten deshalb Mausnachrichten an ihre Steuerelemente weiter (CM-Botschaften). In diesem Fall an das Image... |
AW: TImage.Parent.Perform sendet Message unterschiedlich
Die Frage die dann trotzdem noch im Raum steht ist dann aber: Warum liefern die identischen Aufrufe unterschiedliche Ergebnisse?
Die Aufrufe in der OnClick_Handle-Methode senden die Message schließlich an das Fenster. Die Aufrufe in den anderen beiden Methoden senden die Message an das Image. |
AW: TImage.Parent.Perform sendet Message unterschiedlich
Ich vermute die Unterschiede entstehen dadurch das vor dem DoMouseDown noch bestimmte Werte gesetzt werden.
Der Unterschied warum es mit einem Button funktioniert ist, das der Button ein eigenes Handle hat. Beim Image ist es jedoch so das es sich auf die Oberfläche der Form zeichnet und somit Klicks die auf dem Formular an der Stelle des TImages ausgeführt werden, auf Grund ihrer Position an das TImage weiter geleitet werden. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:54 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