AGB  ·  Datenschutz  ·  Impressum  







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

Drag and Drop von Komponenten und Doublebuffered

Ein Thema von skoschke · begonnen am 15. Jun 2019 · letzter Beitrag vom 17. Jun 2019
Antwort Antwort
skoschke

Registriert seit: 6. Jan 2009
523 Beiträge
 
Delphi 10.4 Sydney
 
#1

Drag and Drop von Komponenten und Doublebuffered

  Alt 15. Jun 2019, 08:18
Hallo,

ich erstelle gerade eine Art Designer, bei dem Controls (Shapes, Panels,...) auf einem TPanel liegen und die können mit der Maus verschoben / Vergrößert / Verkleinert werden...

Nun übermalen Linien beim Verschieben andere Controls und wenn man diese Bewegungen mehrfach wiederholt sind die anderen Controls "wegradiert".

Doublebuffered auf true führt dazu, daß die Panels z.B. beim Drag/Drop komplett schwarz werden!

Ein auch als Hintergrund vorhandenes TImage wird nicht übermalt, so daß ich nun die Idee hatte, zu Beginn des Drag/Drop eine Art Screenshot zu machen, diesen in das Image und nach Beenden des Drag-Vorgangs wieder zu entfernen.

Nur wie bekomme ich diesen "Screenshot des Panels"?

Oder ist dieser Ansatz völlig falsch und es geht ganz anders?

Ciao
Stefan
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
704 Beiträge
 
Delphi 12 Athens
 
#2

AW: Drag and Drop von Komponenten und Doublebuffered

  Alt 15. Jun 2019, 11:16
Hallo,

ich erstelle gerade eine Art Designer, bei dem Controls (Shapes, Panels,...) auf einem TPanel liegen und die können mit der Maus verschoben / Vergrößert / Verkleinert werden...

Nun übermalen Linien beim Verschieben andere Controls und wenn man diese Bewegungen mehrfach wiederholt sind die anderen Controls "wegradiert".

Doublebuffered auf true führt dazu, daß die Panels z.B. beim Drag/Drop komplett schwarz werden!

Ein auch als Hintergrund vorhandenes TImage wird nicht übermalt, so daß ich nun die Idee hatte, zu Beginn des Drag/Drop eine Art Screenshot zu machen, diesen in das Image und nach Beenden des Drag-Vorgangs wieder zu entfernen.

Nur wie bekomme ich diesen "Screenshot des Panels"?

Oder ist dieser Ansatz völlig falsch und es geht ganz anders?

Ciao
Stefan
Wie schaffst Du das? Deine Methodik blockiert offenbar das Neuzeichnen der Controls, und das passiert definitiv nicht wenn Du z. B. Left und Top der gezogenen Komponente veränderst.
Peter Below
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Drag and Drop von Komponenten und Doublebuffered

  Alt 15. Jun 2019, 14:05
Es gibt auch fertige Designer wie diese, wobei letzteres weniger kostet:
http://www.econtrol.ru/formdsn.html
https://www.lmdinnovative.com/produc...lmddesignpack/
Um diese Funktionalität auch nur annähernd hinzubekommen braucht man schon sehr sehr lange...

Auch die JEDIs haben so etwas als Open Source drin (auf der Seite Jv Runtime Design), aber das kann auch deutlich weniger als die beiden kommerziellen Lösungen.

Um zu schauen woran es bei dir scheitert wäre etwas Quelltext hilfreich.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
skoschke

Registriert seit: 6. Jan 2009
523 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Drag and Drop von Komponenten und Doublebuffered

  Alt 17. Jun 2019, 13:17
Ich habe scheinbar so viele Zeichenroutinen die dam System nicht mehr Zeit lassen, neuzuzeichnen

Ich bin nun auf folgendes gestoßen:
Delphi-Quellcode:
  procedure TForm1.ControlMouseMove(Sender: TObject; Shift: TShiftState;
    X, Y: Integer);
  begin
    screen.Cursor := crSizeAll;
    if ssLeft in Shift then
    begin
      ReleaseCapture;
      (Sender as TPanel).Perform(WM_SYSCOMMAND, $F012, 0);
  end;
damit funktioniert das Schieben eines Panels problemlos ohne jegliche Flackerei, der Haken dabei: ich bekomme es nicht hin, mehrere Panels (die als selektiert markiert sind) gleich zusammen zu verschieben.

Gibt es dafür einen Trick?

Ciao
Stefan
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
704 Beiträge
 
Delphi 12 Athens
 
#5

AW: Drag and Drop von Komponenten und Doublebuffered

  Alt 17. Jun 2019, 16:41
Ich habe scheinbar so viele Zeichenroutinen die dam System nicht mehr Zeit lassen, neuzuzeichnen

Ich bin nun auf folgendes gestoßen:
Delphi-Quellcode:
  procedure TForm1.ControlMouseMove(Sender: TObject; Shift: TShiftState;
    X, Y: Integer);
  begin
    screen.Cursor := crSizeAll;
    if ssLeft in Shift then
    begin
      ReleaseCapture;
      (Sender as TPanel).Perform(WM_SYSCOMMAND, $F012, 0);
  end;
damit funktioniert das Schieben eines Panels problemlos ohne jegliche Flackerei, der Haken dabei: ich bekomme es nicht hin, mehrere Panels (die als selektiert markiert sind) gleich zusammen zu verschieben.

Gibt es dafür einen Trick?

Ciao
Stefan
Nein, nicht mit dieser Methode, die funktioniert nur für ein einziges Control zur Zeit, da sie die eingebaute Windows-Funktion zum Verschieben eines Fenster per Drag auf die Titelzeile mißbraucht.
Peter Below
  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 04:00 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