AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Komponenten während der Laufzeit verschieben
Thema durchsuchen
Ansicht
Themen-Optionen

Komponenten während der Laufzeit verschieben

Ein Thema von tofse · begonnen am 10. Jan 2012 · letzter Beitrag vom 12. Jan 2012
Antwort Antwort
tofse

Registriert seit: 6. Jun 2011
Ort: Saarlouis
131 Beiträge
 
Delphi XE Professional
 
#1

Komponenten während der Laufzeit verschieben

  Alt 10. Jan 2012, 14:43
Hallo zusammen,
ich verwende dieses schöne Skript, um TPanel Komponenten innerhalb einer ScrollBox zu verschieben:
Komponenten während der Laufzeit verschieben

Es gibt bei mir nur einen Schönheitsfehler: wenn man den Mauszeiger bei gedrückter Maustaste sehr schnell bewegt, kann es sein, dass (wie soll ich sagen..) das TPanel nicht mehr "nach kommt". Es bleibt stehen, aber
Code:
TMoveCracker(Sender).MouseCapture
aus dem Skript ist noch immer true. Bewege ich dann den Mauszeiger wieder über das TPanel, kann ich dieses weiter bewegen (auch wenn ich die Maustaste vorher sogar loslasse).

Hat jemand einen Tipp, wie ich das TPanel dazubekomme, auch die schnellen Mausbewegungen mitzumachen ?

Danke
Christof
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.656 Beiträge
 
Delphi 12 Athens
 
#2

AW: Komponenten während der Laufzeit verschieben

  Alt 10. Jan 2012, 15:11
Geht es um alle Panels auf dem Formular?

[edit] Falls ja, versuch es mal hiermit:
Delphi-Quellcode:
type
  TPanel = class(ExtCtrls.TPanel)
  protected
    procedure MouseMove(Shift: TShiftState; X, Y: Integer); override;
  end;
 
  TDeinForm = class(TForm)
    ...
  end;

...

procedure TPanel.MouseMove(Shift: TShiftState; X, Y: Integer);
begin
  inherited;
  if ssLeft in Shift then
    begin
      ReleaseCapture;
      Perform(WM_SYSCOMMAND, $F012, 0);
    end;
end;
Das geht auch mit anderen Komponenten, solange sie von TWinControl abstammen. [/edit]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen

Geändert von DeddyH (10. Jan 2012 um 15:26 Uhr)
  Mit Zitat antworten Zitat
tofse

Registriert seit: 6. Jun 2011
Ort: Saarlouis
131 Beiträge
 
Delphi XE Professional
 
#3

AW: Komponenten während der Laufzeit verschieben

  Alt 11. Jan 2012, 08:05
Danke, das funktioniert super
Nur...wie kann ich jetzt feststellen, wann das Ziehen der Komponente beendet ist?
Vermutlich wegen dem ReleaseCapture wird die Procedure MouseUp nicht mehr aufgerufen.

Edit: Noch eine 2. Frage: wie kann ich während dem Ziehen des TPanel's auf irgendwas reagieren? Z.B. will ich prüfen, ob das TPanel über einen Punkt bewegt wird. In dem anderen Beispiel hatte ich das alles in der Procedure mousemove. Der Code nach dem Perform wird erst ausgeführt, wenn ich das Element nicht mehr bewege....was irgendwie meine erste Frage beantwortet

Grüße
Christof

Geändert von tofse (11. Jan 2012 um 08:30 Uhr) Grund: 2. Frage
  Mit Zitat antworten Zitat
Progman

Registriert seit: 31. Aug 2007
Ort: 99974 MHL
695 Beiträge
 
Delphi 10.1 Berlin Starter
 
#4

AW: Komponenten während der Laufzeit verschieben

  Alt 11. Jan 2012, 09:03
Edit: Noch eine 2. Frage: wie kann ich während dem Ziehen des TPanel's auf irgendwas reagieren? Z.B. will ich prüfen, ob das TPanel über einen Punkt bewegt wird. In dem anderen Beispiel hatte ich das alles in der Procedure mousemove. Der Code nach dem Perform wird erst ausgeführt, wenn ich das Element nicht mehr bewege....was irgendwie meine erste Frage beantwortet

Grüße
Christof
In ControlMouseMove sollte man solche Prüfungen durchführen.
Karl-Heinz
Populanten von Domizilen mit fragiler, transparenter Aussenstruktur sollten sich von der Translation von gegen Deformierung resistenter Materie distanzieren!
(Wer im Glashaus sitzt sollte nicht mit Steinen werfen)
  Mit Zitat antworten Zitat
tofse

Registriert seit: 6. Jun 2011
Ort: Saarlouis
131 Beiträge
 
Delphi XE Professional
 
#5

AW: Komponenten während der Laufzeit verschieben

  Alt 11. Jan 2012, 09:15
Hallo,
also ich habe folgenden gekürzten Code:

In einer Unit:
Code:
....
type
  TTermin = Class(TPanel)
....
Dann im Formular:
Code:
...
T:=TTermin.Create(Form1);
T.OnMouseMove:=Form1.ControlMouseMove;
...
Und diese Prozedur:
Code:
procedure TForm1.ControlMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
  if ssLeft in Shift then
  begin
    (Sender as TTermin).Dragging:=true;
    ReleaseCapture;
    (Sender as TControl).Perform(WM_SYSCOMMAND, $F012, 0);
    (Sender as TTermin).color:=clGreen;
  end;
end;
Die letzte Zeile mit der Farbzuweisung ist nur zum Testen und soll mein Verständnisproblem zeigen. Erst wenn ich mit dem Ziehen des Elements fertig bin, wird die Farbe grün zugewiesen. Ich verstehe das so, als ob der Code nach Perform auch erst nach dem Ziehen ausgeführt wird.

Du hast geschrieben:
Zitat:
In ControlMouseMove sollte man solche Prüfungen durchführen.
Ich verstehe nicht, wie ich das machen soll, wenn wie hier im Beispiel grün auch erst nach dem Verschieben zugewiesen wird, und nicht während dem Ziehen.

Danke und Grüße
Christof
  Mit Zitat antworten Zitat
Progman

Registriert seit: 31. Aug 2007
Ort: 99974 MHL
695 Beiträge
 
Delphi 10.1 Berlin Starter
 
#6

AW: Komponenten während der Laufzeit verschieben

  Alt 11. Jan 2012, 09:56
Meine Anmerkung bezog sich auf den Original-Code aus dem Link:
Delphi-Quellcode:
procedure TForm1.ControlMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
  if FDragging then
    with Sender as TControl do
    begin
      Left := X - FDownX + Left;
      Top := Y - FDownY + Top;
      //in etwa: if (Left=20 and Top>20) then.....
    end;
end;
Karl-Heinz
Populanten von Domizilen mit fragiler, transparenter Aussenstruktur sollten sich von der Translation von gegen Deformierung resistenter Materie distanzieren!
(Wer im Glashaus sitzt sollte nicht mit Steinen werfen)
  Mit Zitat antworten Zitat
Antwort Antwort


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 14:43 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