Delphi-PRAXiS

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/)
-   -   Delphi Canvas in DragOver fehlerhaft (https://www.delphipraxis.net/151576-canvas-dragover-fehlerhaft.html)

Anonymos 23. Mai 2010 19:53


Canvas in DragOver fehlerhaft
 
Hallo

Ich schreibe grad für ein Programm so eine Art Explorer.
Um die Icons anzuzeigen benutze ich ein TListView.

Jetzt habe ich darin das Drag and Drop aktiviert um diese Icon an andere Plätze verschieben zu können.
(DragMode auf dmAutomatic)
Dabei zeichne ich im DragOver-Event mit Canvas Schwarze Striche zwischen die Icons, die anzeigen sollen wo das Icon platiert wird.

Ich hab das auprobiert, und die Striche werden auch gezeichnet, aber FAST immer unvollständig.
Das heißt: Manchmal fehlt die Mitte, manchmal fehlt der obere Teil, manchmal fehlt der rechte Teil, manchmal wird er auch richtig gezeichnet.

Diese Fehler sind (scheinbar) zufällig.

Wenn jemand ne Idee hat woran das liegen könnte, oder sogar weiß wie man das Problem beheben / umgehen / (austricksen) kann bin ich für jede Antwort dankbar.

Tryer 24. Mai 2010 04:52

Re: Canvas in DragOver fehlerhaft
 
Normalerweise zeichnet man in Paint oder OnDrawItem. Das Problem ist vermutlich das der Clipping-Bereich nicht richtig gesetzt ist, also der Bereich des Fensters der zum Neuzeichen freigegeben ist.
Per SelectClipRgn(Canvas.Handle, 0) sollte sich die Einschränkung vor dem Zeichnen aufheben lassen.

Sauberer wäre es OnDrawItem zu verwenden und in DragOver nur die Position der Linie zu bestimmen und das Neuzeichnen per Invalidate o.ä. anzustossen.

Grüsse, Dirk

Anonymos 24. Mai 2010 11:35

Re: Canvas in DragOver fehlerhaft
 
Ne, des mit dem SelectClipRgn hat leider nicht funktioniert.

Und mit dem OnDrawEreignis, hat leider das Problem, dass nur aufgerufen wird, wenn ein Icon neu gezeichnet wird. Wenn ich mich aber innerhalb eines Icons bewege, dass tut sich da garnichts.

Ich hab des jetz mal komlett manuell gemacht. Was heißt: im OnMouseDown, eigene Variable DragDrop auf true, bei MouseMove Zeichnen, bei MouseUp eignes EndDrag.

Funktioniert auch so weit, aber is iwie nich wirklich ne schöne Variante find ich.

mfg


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