wieder OnMouseMove
-
Hi,
jetzt habe ich ein anderes Problem mit der Ereignisbehandlung.
Für eine von Panel abgeleitete Komponente auf der weitere Elemente angezeigt werden, soll ein MouseMove behandelt werden. Für alle auf dem Panel befindlichen Objekte soll natürlich derselbe Handler, nämlich der vom Panel genutzt werden. Allerdings weiss ich nicht ob und wie ich die Messages der Elemente zu dem Panel Handler bekomme. Hier mal die wichtigsten Methoden...//erzeugen der von Panel abgeleiteten Klasse im Form void __fastcall TForm1::Button1Click(TObject *Sender) { TMyPanel* lpmyPActive = new TMyPanel(this); lpmyPActive->Parent = Form1; lpmyPActive->OnMouseMove = MyOnMouseMove; } //Ereignishandler für OnMouseMove void __fastcall TForm1::MyOnMouseMove(TObject *Sender, TShiftState Shift, int X, int Y) { if (Shift.Contains(ssLeft)) { TPoint P = Mouse->CursorPos; P = Form1->ScreenToClient(P); TControl* lpCntPositioned = (TControl*)Sender; lpCntPositioned->Top = P.y; lpCntPositioned->Left = P.x; } } __fastcall TMyPanel::TMyPanel(TComponent* Owner) : TPanel(Owner) { Bezeichner = new TLabel(this); Bezeichner->Parent = this; OldLabelWindowProc = Bezeichner->WindowProc; Bezeichner->WindowProc = NewLabelWindowProc; }
jetzt hab ich versucht in TMyPanel die Message am Label abzufangen und an den Ereignishandler von TMyPanel im Form zu senden. Das endet aber in einer Endlosschleife. Irgendwie scheint WM_MOUSEMOVE wieder zum Label zurück zu kommen.
void __fastcall TMyPanel::NewLabelWindowProc(TMessage &Msg) { if (Msg.Msg == WM_MOUSEMOVE) { PostMessage(Handle,Msg.Msg,Msg.WParam,Msg.LParam); } OldLabelWindowProc(Msg); }
Gibt es einen einfachen Weg und ich mach mirs nur viel zu kompliziert oder wie kann ich das Problem lösen
-
Vielleicht wenn Du wndProc vom Panel ueberschreibst. Bei MouseMove wird standard- Routine NICHT gerufen.
???
-
na klar, ich lass mir die elemente einzeln zurückgeben und überschreibe deren OnMouseMove
Danke