Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Refresh / Repaint oder was? (https://www.delphipraxis.net/195074-refresh-repaint-oder.html)

sko1 31. Jan 2018 07:02

Refresh / Repaint oder was?
 
Hallo,

ich entwickle gerade einen kleinen Designer, bei welchem mit der Maus Panels auf einem TImage erzeugt und vergrößert/verkleinert/verschoben werden.
Das funktioniert, allerdings habe ich die Unschönheit dass z.B. die Hilfslinien an den Kanten des zu bewegenden Panels mehrfach gezeichnet werden und damit ein immer größerer grauer Bereich entsteht, der erst wieder aktualisiert wird wenn man mit dem Bewegen aufhört.
Ein Image.Repaint und Application.ProcessMessages während der Bewegung bringt rein gar nichts, IncrementalDisplay bringt auch keine Verbesserung :-(

Hat jemand einen Vorschlag wie man da vorgehen kann / muss?

Ciao
Stefan

Sherlock 31. Jan 2018 08:06

AW: Refresh / Repaint oder was?
 
Clearst Du denn auch immer wieder den Canvas, bevor Du Deine Hilfslinien einzeichnest?

Sherlock

Fritzew 31. Jan 2018 08:10

AW: Refresh / Repaint oder was?
 
Ein bisschen mehr Information wäre schon nicht schlecht. Da Du von Hilfslinien schreibst,
geht es um den Designer in der IDE? Wenn ja wo liegt das TImage?

jaenicke 31. Jan 2018 08:50

AW: Refresh / Repaint oder was?
 
Es hört sich so an als wäre TImage nicht die richtige Komponente. Das hört sich eher an als ob eine TPaintBox sinnvoller wäre.

Ein Beispiel findest du hier, auch wenn es da nicht um das Verschieben von Elementen ging:
http://www.delphipraxis.net/132375-p...-beta-6-a.html

sko1 31. Jan 2018 12:24

AW: Refresh / Repaint oder was?
 
Ich versuche es besser zu beschreiben:

Als Untergrund dient ein TImage (was auch das Hintergrundbild beinhaltet.
Jetzt wird mit der Maus per Click und Ziehen ein Bereich gezeichnet, beim Loslassen der Maus wird dann in diesen Bereich ein Panel erzeugt, mit dem Image als Parent. An allen 4 Seiten des Panels werden 4 TShapes erzeugt die die Hilfslinien zur Positionierung sind.

Nun kann man mit der Maus das Panel bewegen, dabei müssen dann auch die Hilfslinien (Shapes) umpositioniert werden.

Das aber sorgt dafür dass die alte Hilfslinie scheinbar bestehen bleibt und die neue daneben gezeichnet wird, obwohl ich nach jeder winzigen Bewegung Image.Refresh aufrufe.

Erst beim Loslassen der Maus verschwinden die alten Hilfslinien.

Ciao
Stefan

Fritzew 31. Jan 2018 12:59

AW: Refresh / Repaint oder was?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ganz dumme Frage...
Wie schaffst Du es Das Image als Parent deiner Panels zuzuweisen?
Image ist kein WinControl

Anbei einfach mal ein Testprojekt, das genau das macht was Du beschreibst, da bleibt nix stehen

sko1 31. Jan 2018 13:51

AW: Refresh / Repaint oder was?
 
Hatte ich doch Mist geschrieben, der Parent ist ein Panel, auf dem auch das TImage liegt!

Dein Testprojekt funktioniert hier einwandfrei, interessanterweise habe ich mal mit ^C ^V Dein Panel kopiert, das ist undurchsichtig wie das Originale von Dir, packe ich ein TPanel aus meiner Komponentenliste drauf, ist das transparent!

Ciao
Stefan

Fritzew 31. Jan 2018 13:56

AW: Refresh / Repaint oder was?
 
Property ParentBackground auf false setzen.

sko1 31. Jan 2018 14:00

AW: Refresh / Repaint oder was?
 
Danke!

sko1 31. Jan 2018 15:29

AW: Refresh / Repaint oder was?
 
So, ich habe in meinem Projekt ein Panel einzeln eingefügt und exakt den gleichen Code verwendet wie im Beispiel, ich kann langsam bewegen, werde ich schneller gibt es graue Schatten da wo das Panel schon mal war.
Dabei wird sogar das Bild des TImage übermalt!

So langsam weiß ich nicht weiter!

Ciao
Stefan


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:49 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