Thema: Delphi Auswahl in Paint

Einzelnen Beitrag anzeigen

Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#5

Re: Auswahl in Paint

  Alt 23. Mär 2008, 16:26
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]
  Mit Zitat antworten Zitat