OnMouseMove beim ziehen eines Buttons soll das darunterliegende Panel (parent) ziehen
-
Danke, aber:
Ich weiß nicht den aktuellen Namen des Panel, da ich mehrere Panels mit Buttons besitze, die alle die gleichen Funktionen ausführen sollen bei OnMouseMove u.s.w.
Da wäre es einfach, so etwas benutzen zu können in der Art wie "Sender->Parent".
-
Hallo,
Das Panel sollte ja der Parent deines Buttons sein. Benutze den einfach.
-
Button1MouseMove wird ja z.B. bei mir auch aufgerufen, wenn ich auf z.B. einen Button20 klicke. Dann soll aber das Panel20 verschoben werden.
Was müsste ich also anstattPanel1->Left += X - DragX;
schreiben?
Sender->Parent->Left += X - DragX;
geht nicht.
-
"geht nicht" ist keine ausreichende Fehlerbeschreibung...
folgendes funktioniert, allerdings habe ich jedwede Kontrolle der Casts weggelassen, aber das kannst ja allein machen
void __fastcall TForm1::Button1MouseMove(TObject *Sender, TShiftState Shift, int X, int Y) { if ( Dragging ) { TButton *btn = dynamic_cast<TButton*>(Sender); TPanel *pnl = dynamic_cast<TPanel*>(btn->Parent); pnl->Left += X - DragX; pnl->Top += Y - DragY; } }
-
Funktioniert, danke!!
Aber was meinst du mit "Kontrolle der Casts"?
-
was passiert denn z.B. wenn Sender mal kein Button ist? oder Parent kein Panel?
dann werden die beiden Zeiger nicht richtig gesetzt und du bekommst Fehlermeldungen
die einfachste Variante ist dann die erfolgreiche bzw. nicht erfolgreiche Zuweisung abzufragen:void __fastcall TForm1::Button1MouseMove(TObject *Sender, TShiftState Shift, int X, int Y) { if ( Dragging ) { TButton *btn = dynamic_cast<TButton*>(Sender); if (!btn) return; TPanel *pnl = dynamic_cast<TPanel*>(btn->Parent); if (!pnl) return; pnl->Left += X - DragX; pnl->Top += Y - DragY; } }
-
achso, danke, aber ich denke, diese Fälle können i.d.R. bei mir nicht auftreten.
-
Wenn diese Fälle nicht auftreten können nimm static_cast statt dynamic_cast.
-
Habe mein Programm umgestellt auf static_cast
Ergebnis: Das Programm funktioniert überhaupt nicht mehr, wenn es als User mit beschränkten Rechten ausgeführt wird!
Daher habe ich wieder alles in dynamic_cast geändert, und schon funzt wieder alles!
-
Korrelation impliziert nicht notwendigerweise einen Kausalzusammenhang. Ich frage mich trotzdem, wie du das hinbekommen hast
-
Das würde mich auch interessieren, deshalb habe ich das mal hier geposted.
-
teacherwilli schrieb:
Das würde mich auch interessieren
Dann finde es doch heraus.
-
Hauptsache es funzt. Da gibt es noch ganz andere Baustellen zu bearbeiten!