Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Linien zeichnen (https://www.delphipraxis.net/145729-linien-zeichnen.html)

sqrt 9 7. Jan 2010 09:19


Linien zeichnen
 
Hallo!

Nochmals ne Frage zu meinem Zeichenprojekt:

Wenn ich eine Linie Zeichne, mache ich das so:

Delphi-Quellcode:
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 i:=i+1;
  if i=1 then begin
    Form1.Image1.Canvas.MoveTo(X,Y);
  end;
  if i=2 then begin
    Form1.Image1.Canvas.LineTo(X,Y);
    i:=0;
  end;
end;
Nun hätte ich gerne, dass mir die Linie auch angezeigt wird, bevor ich den 2. Klick betätige und die Linie fix gezeichnet wird.
Ist das irgendwie möglich oder wird das zu kompliziert?

DANKE!
Michael

Matze 7. Jan 2010 09:54

Re: Linien zeichnen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

ich habe mal eben eine kleine Demo geschrieben. Kurz zur Funktionsweise:
Intern gibt es 2 TBitmaps. Eines ist temporär, zeigt die "Live"-Linie an (gezeichnet im OnMouseMove) und dient als Zwischenspeicher. Das andere enthält die Ausgabe (gezeichnet im OnMouseDown).

Das hat auch den großen Vorteil, dass du das Bild jederzeit speichern kannst mit OutputBmp.SaveToFile().
Es geht sicher auch schöner, aber es ist ein möglicher Weg zum Ziel.

Grüße, Matze

DP-Maintenance 7. Jan 2010 09:54

DP-Maintenance
 
Dieses Thema wurde von "Matze" von "Object-Pascal / Delphi-Language" nach "Multimedia" verschoben.

sqrt 9 7. Jan 2010 15:53

Re: Linien zeichnen
 
WOW!

Dankeschön! :thumb:

Nur bei folgenden Befehlen blicke ich noch nicht durch:

1.
Delphi-Quellcode:
procedure TForm1.FormDestroy(Sender: TObject);
begin
  FreeAndNil(TmpBmp);
  FreeAndNil(OutputBmp);
end;
2.
Delphi-Quellcode:
procedure TForm1.ShowBmp(Img: TImage; TmpImg: Boolean);
begin
  if TmpImg then
    Img.Canvas.Draw(0, 0, TmpBmp)
  else
    Img.Canvas.Draw(0, 0, OutputBmp)
end;
:dp:
Gruß Michael

Luckie 7. Jan 2010 15:56

Re: Linien zeichnen
 
Zitat:

Zitat von sqrt 9
Nur bei folgenden Befehlen blicke ich noch nicht durch:

Da musst mal deine ganze Mut zusammennehmen und beherzt F1 drücken. Ich weiß, beim ersten mal braucht man dazu noch viel Überwindung. Aber mit der Zeit fällt es immer leichter. ;)

Sherlock 7. Jan 2010 16:40

Re: Linien zeichnen
 
Zitat:

Zitat von Luckie
Zitat:

Zitat von sqrt 9
Nur bei folgenden Befehlen blicke ich noch nicht durch:

Da musst mal deine ganze Mut zusammennehmen und beherzt F1 drücken. Ich weiß, beim ersten mal braucht man dazu noch viel Überwindung. Aber mit der Zeit fällt es immer leichter. ;)

LOL :dp:

Solche Perlen sind es, die den grauen Alltag versüßen.

@3: Objekte sollte man nach Benutzung wieder freigeben. Solche, die zur Designzeit aufs Formular gelegt werden, werden automatisch freigegeben (so ist zumindest der Plan). Solche die man zur Laufzeit (dynamisch also) erzeugt, muss man selber freigeben. Zum Image.Canvas.Draw, also da empfehle ich entweder Englisch aufzufrischen, oder wirklich mal in die Hilfe zu schauen ;)

Sherlock


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:59 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz