AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Controls zur Laufzeit beweglich machen

Ein Thema von sko1 · begonnen am 23. Okt 2017 · letzter Beitrag vom 25. Okt 2017
Antwort Antwort
Seite 1 von 2  1 2      
sko1

Registriert seit: 27. Jan 2017
601 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#1

Controls zur Laufzeit beweglich machen

  Alt 23. Okt 2017, 16:03
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

Geändert von sko1 (23. Okt 2017 um 16:15 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: Controls zur Laufzeit beweglich machen

  Alt 23. Okt 2017, 16:05
Probiers das mal:

Delphi-Quellcode:
TMyPanel = class(TCustomPanel) // Ich schätze davon leitest du ab?
published
  property OnMouseDown;
end;
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#3

AW: Controls zur Laufzeit beweglich machen

  Alt 23. Okt 2017, 16:10
Zitat:
Pan.MouseDown := PanelOnMouseDown;
Oder das fehlende On für OnMouseDown?
$2B or not $2B
  Mit Zitat antworten Zitat
sko1

Registriert seit: 27. Jan 2017
601 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#4

AW: Controls zur Laufzeit beweglich machen

  Alt 23. Okt 2017, 16:13
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...
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

AW: Controls zur Laufzeit beweglich machen

  Alt 23. Okt 2017, 16:18
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.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
sko1

Registriert seit: 27. Jan 2017
601 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#6

AW: Controls zur Laufzeit beweglich machen

  Alt 23. Okt 2017, 16:21
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

Geändert von sko1 (23. Okt 2017 um 16:25 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Controls zur Laufzeit beweglich machen

  Alt 23. Okt 2017, 16:41
Wenn Du eine Komponente ableiten kannst, dann schau Dir mal HitTest für Maus-Transparenz an (es gab da zwei unterschiedliche Möglichkeiten).
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
sko1

Registriert seit: 27. Jan 2017
601 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#8

AW: Controls zur Laufzeit beweglich machen

  Alt 24. Okt 2017, 06:31
nur dumm, dass weder das TImage noch das TShape bei VCL ein HitTest kennen...

Ciao
Stefan
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: Controls zur Laufzeit beweglich machen

  Alt 24. Okt 2017, 11:48
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?
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
sko1

Registriert seit: 27. Jan 2017
601 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#10

AW: Controls zur Laufzeit beweglich machen

  Alt 25. Okt 2017, 06:40
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:52 Uhr.
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