![]() |
Controls zur Laufzeit beweglich machen
Hallo,
ich baue gerade an einen Designer und möchte zur Laufzeit eigene Controls erzeugen und mit der Maus verschiebbar machen. Hierfür habe ich folgenden Schnipsel gefunden:
Delphi-Quellcode:
Das funktioniert mit einem zur Entwurfszeit auf die Form gepappten Panel prima, aber irgendwie fehlt mir der Weg das für ein oder mehrere zur Laufzeit erzeugte eigene "myPanel" (von TPanel abgeleitet) umzusetzen!
procedure TForm1.PanelMouseDown(Sender: TObject; Shift: TShiftState; X,
Y: Integer); begin if ssLeft in Shift then begin ReleaseCapture; Panel.Perform(WM_SYSCOMMAND,$F012,0); end; end; Der Versuch von
Delphi-Quellcode:
führt zu der Fehlermeldung: "auf protected-Symbol TControl.OnMouseDown kann nicht zugegriffen werden"
Pan := TmyPanel.Create(Form1);
Pan.Parent := Form1; Pan.MouseDown := PanelMouseDown; Kann mir bitte jemand auf die Sprünge helfen? Ciao Stefan |
AW: Controls zur Laufzeit beweglich machen
Probiers das mal:
Delphi-Quellcode:
TMyPanel = class(TCustomPanel) // Ich schätze davon leitest du ab?
published property OnMouseDown; end; |
AW: Controls zur Laufzeit beweglich machen
Zitat:
|
AW: Controls zur Laufzeit beweglich machen
Danke für den schnellen Tip!
Der Compilerfehler ist weg, aber der OnMouseDown wird nicht gefeuert! Grund wird ein TImage sein, welches auf dem Label liegt und den MouseDown wegfängt! Hast Du dafür auch noch eine Idee? Ciao Stefan P.S. Zitat:
|
AW: Controls zur Laufzeit beweglich machen
Liegt das Image fest auf dem Panel? Also ist es ein fester Bestandteil von TMyPanel?
Falls ja, dann müsste es möglich sein innerhalb der Komponente das MouseDown des Images abzufangen und an das Panel weiterzuleiten. |
AW: Controls zur Laufzeit beweglich machen
Ja das TImage liegt immer fest auf dem Panel mit Align := alClient...
Wie könnte man das Mousedown weiterleiten (und damit das myPanel verschiebbar machen)? Ich hatte auch schon überlegt das in der Komponente gleich beim Create zu machen, aber da kennt Delphi nicht mal mehr ReleaseCapture... Ciao Stefan |
AW: Controls zur Laufzeit beweglich machen
Wenn Du eine Komponente ableiten kannst, dann schau Dir mal HitTest für Maus-Transparenz an (es gab da zwei unterschiedliche Möglichkeiten).
|
AW: Controls zur Laufzeit beweglich machen
nur dumm, dass weder das TImage noch das TShape bei VCL ein HitTest kennen...
Ciao Stefan |
AW: Controls zur Laufzeit beweglich machen
Warum überschreibst du nicht einfach TCustomPanel.Paint und pinselst dir auf diesem Wege dein Bitmap auf das Panel? Anstatt solche Klimmzüge zu machen und Mausereignisse weiterzuleiten?
|
AW: Controls zur Laufzeit beweglich machen
Wäre auch eine Idee!
Da muss ich mal nachdenken ob das machbar ist oder neue Probleme macht (z.B. ist das Image Stretch = true)... Ciao Stefan |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:46 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