Hi!
Wenn du per NotXor zeichnest..ist das klar..
du musst die linie auf solid stellen
folgende variablen brauchst du global in der unit:
Delphi-Quelltext
1: 2: 3: 4:
| var MouseBegin: TPoint; backsave : TBitmap; backrect : TRect; |
beim mousedown merkst du dir X/Y des Mousedown
beim MouseMove folgendes:
merk dir den "hintergrund" (nur den bereich in dem sich die linie befindet) und zeichne DAVOR einen schon möglicherweise gesicherten hintergrund (damit ist vor jedem zeichnen einer neuen linie der Hintergrund wieder
so wie beim mousedown) und erst dann eine linie zeichnen
merk dir das rect vom MouseDown-Punkt zum MouseMove-Punkt.. und diesen bereich merk dir in einem
TBitmap.. width&Height vom bitmap zuvor der Rect-Grösse anpassen und per canvas.copyrect merken
beachte, dass left<right und top<bottom sein muss.. da du ja mit der maus umherfahren kannst
und wenn du den mousedown-punkt als ausgangspunkt nimmst (wenn du dich zb nach links oben bewegst),
auch falsche rect werte bekommen kanns, also das vorher wieder begradigen
(mit vergleichen und zb top/bottom vertauschen)
klingt vielleicht kompliziert, funktioniert aber gut (auch bei Rects,roundrects,ellipse,... und und) .. und so viel zeit zum erklären hab ich grad nicht
grüsse
Moderiert von
raziel: Code- durch Delphi-Tags ersetzt