Hallo, Nero.
Ich glaube, früher stand soetwas sogar mal in der Delphi-Hilfe. Am einfachsten ist es, du benutzt den Pen-Mode pmNotXor. Dabei wird vereinfacht gesagt der Hintergrund der Linie invertiert. Das praktische daran ist, dass du den Vorgang einfach durch zweimaliges Zeichnen rückgängig machen kannst. Du überzeichnest also im OnMouseMove erst das alte Auswahlrechteck, dann zeichnest du das neue und merkst dir die Koordinaten in einer Variable, damit du es hinterher wieder überzeichnen kannst.
Pseudocode:
Delphi-Quellcode:
procedure OnMouseDown;
begin
oldRect := Rect(x,y,0,0); // Startrechteck an Maus-Position mit Breite, Höhe = 0
startpoint := point(x,y); // Startpunkt merken
end;
procedure onMouseMove;
var
myRect: trect;
begin
if not mousepressed then exit;
canvas.pen.mode := pmnotxor; // "Invertierungs"-Modus
canvas.brush.style := bsclear; // Rechteck nicht füllen
canvas.rectangle(oldRect); // Altes Rechteck überzeichnen
myRect := Rect(startpoint.x,startpoint.y,x,y); // Startrechteck von Startposition aus zur Mausposition
canvas.rectangle(myRect); // In älteren Delphiversionen musst du hier ggf. die Koordinaten einzeln angeben
oldRect := myRect; // oldRect ist eine globale Variable, oder noch besser, ein privates Feld
end;
procedure onMouseUp;
begin
canvas.pen.mode := pmnotxor;
canvas.brush.style := bsclear;
canvas.rectangle(oldRect); // Altes Rechteck überzeichnen
end;
[edit]Schlechtschreibung[/edit]