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 Auswahl in Paint (https://www.delphipraxis.net/110727-auswahl-paint.html)

Nero der Professor 23. Mär 2008 14:48


Auswahl in Paint
 
Liste der Anhänge anzeigen (Anzahl: 1)
hallo,

und frohe ostern


in paint kann ich über auswahl über ein bild, ein rechteck ziehen.

wie kann ich das in delphi tun?


momentan kann ich lediglich ein recheck in einem image, welches leer ist zeichnen

sobald ich ein bild geladen habe funktioniert dies nicht mehr

Der.Kaktus 23. Mär 2008 14:51

Re: Auswahl in Paint
 
Hallo, ebenfalls Frohe Ostern,

Was willst Du denn markieren bzw. wie und warum?

Die Muhkuh 23. Mär 2008 14:52

Re: Auswahl in Paint
 
Wie machst Du es denn bisher?

Nero der Professor 23. Mär 2008 14:55

Re: Auswahl in Paint
 
bei meinem Programm kann ich aus einem bild ein einen "markierten" teil in ein zweites image einfügen

um jetzt den zu kopierenden bereich zu markieren wollte ich dies mit einem rechteck zur besseren

orientierung überzeichnen

als rein der optik wegen

Namenloser 23. Mär 2008 15:26

Re: Auswahl in Paint
 
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]

Nero der Professor 23. Mär 2008 15:36

Re: Auswahl in Paint
 
vielen dank

das meinte ich

danke

Fussball-Robby 23. Mär 2008 16:50

Re: Auswahl in Paint
 
Du könntest vielleicht noch das machen:
Delphi-Quellcode:
Canvas.Pen.Style := psDot;
Sieht noch ein bisschen schicker aus :wink:

Mfg

isilive 5. Jul 2009 12:43

Re: Auswahl in Paint
 
Zitat:

Zitat von NamenLozer
Delphi-Quellcode:
...
procedure onMouseMove;
var
  myRect: trect;
begin
  if not mousepressed then exit;
...

Wie krieg ich das mousepressed hin? Das kennt mein Delphi so nicht...

Ich nutze Delphi2006 und das Mousemove Ereignis schaut hier so aus:
Delphi-Quellcode:
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);

sx2008 5. Jul 2009 12:49

Re: Auswahl in Paint
 
Zitat:

Zitat von isilive
Wie krieg ich das mousepressed hin? Das kennt mein Delphi so nicht...

Als Variable im Formular deklarieren und in OnMouseDown (mousepressed := True) und in OnMouseUp auf False setzen.

Muetze1 5. Jul 2009 15:15

Re: Auswahl in Paint
 
Zitat:

Zitat von sx2008
Zitat:

Zitat von isilive
Wie krieg ich das mousepressed hin? Das kennt mein Delphi so nicht...

Als Variable im Formular deklarieren und in OnMouseDown (mousepressed := True) und in OnMouseUp auf False setzen.

Oder einfach durch "ssLeft in ShiftState" ersetzen, schliesslich wird der Maustastenstatus auch im Move mitgegeben.


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