Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Controls zur Laufzeit beweglich machen (https://www.delphipraxis.net/194157-controls-zur-laufzeit-beweglich-machen.html)

sko1 23. Okt 2017 15:03

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:
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;
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!

Der Versuch von

Delphi-Quellcode:
Pan := TmyPanel.Create(Form1);
Pan.Parent := Form1;
Pan.MouseDown := PanelMouseDown;
führt zu der Fehlermeldung: "auf protected-Symbol TControl.OnMouseDown kann nicht zugegriffen werden"

Kann mir bitte jemand auf die Sprünge helfen?

Ciao
Stefan

Neutral General 23. Okt 2017 15:05

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;

himitsu 23. Okt 2017 15:10

AW: Controls zur Laufzeit beweglich machen
 
Zitat:

Delphi-Quellcode:
Pan.MouseDown := PanelOnMouseDown;

Oder das fehlende On für OnMouseDown?

sko1 23. Okt 2017 15:13

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:

Oder das fehlende On für OnMouseDown?
Nein, das war Copy/Paste fehler von mir hier im Beitrag...

Neutral General 23. Okt 2017 15:18

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.

sko1 23. Okt 2017 15:21

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

stahli 23. Okt 2017 15:41

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).

sko1 24. Okt 2017 05:31

AW: Controls zur Laufzeit beweglich machen
 
nur dumm, dass weder das TImage noch das TShape bei VCL ein HitTest kennen...

Ciao
Stefan

Codehunter 24. Okt 2017 10:48

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?

sko1 25. Okt 2017 05:40

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 02:23 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz