![]() |
Zeichenprogramm
Stehe vor folgendem Problem:
Versuche ein Zeichenprogramm zu erstellen. Meine ersten Versuche waren mit Canvas. sah ungefähr so aus: procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if getkeystate(VK_LBUTTON)<0 then begin form1.Canvas.MoveTo(mouse.CursorPos.X,mouse.Cursor Pos.Y); while getasynckeystate(VK_LBUTTON)<0 do begin form1.Canvas.Pen.Color:=clred; form1.Canvas.lineto(mouse.CursorPos.X,mouse.Cursor Pos.Y); end; end; end; das ganze läuft auch wie ich es mir wünsche :-) nur leider wird das formular und alles gezeichnete nach einer gewissen zeit schwarz und ich muss alles neu zeichnen. Ich verstehe NICHT warum.. Das Programm läuft imm Vollbildmodus, wenn ich einmal kurz auf den Desktop gehe und das Programm danach wieder groß mache, ist das Formular wieder leer. |
AW: Zeichenprogramm
Die erste Frage die sich stellt ist: warum setzt du alles in FormMouseMove Prozedur? Warum nicht in die Button1Click Prozedur? Die Frage ist berechtigt, denn um X/Y auzulesen nimmst du Mouse.CursorPos und um zu prüfen ob Maustaste geklickt ist nimmst du GetKeyState. Warum? Was glaubst du wozu die Angaben in
Delphi-Quellcode:
gut sind? Da hast Shift und X und Y. mit
FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer)
Delphi-Quellcode:
findest du heraus ob Maustaste geklickt ist, X und Y sind selbsterklärend.
if ssLeft in Shift then
Delphi-Quellcode:
Edit:
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer); begin if ssLeft in Shift then begin //Canvas.Pen.Color := Farbe; Canvas.MoveTo(xAlt, yAlt); Canvas.LineTo(X, Y); end; xAlt := X; yAlt := Y; end; Und was das leere Formular angeht, Canvas ist nur eine Leinwand. Alles was sich drüber legt wischt das Ergebnis weg. Dann entweder alles zusätzlich in einer Bitmap speichern und auf OnPaint des Formulars reagieren oder gleich Image Komponente nehmen. Übrigens, die zu Delphi mitgelieferten Beispiele (im Installationsverzeichnis) enthalten ein Mallprogramm. Da mal reingucken. |
AW: Zeichenprogramm
Das habe ich bewusst nicht so gemacht, da bei einer schnelleren Bewegung der Maus keine durchgängige Linie gezeichnet wird.
Der Quelltext den ich habe soll eigentlich so bleiben, auch wenn es nicht die beste Lösung ist ;) Das Problem ist, was bei deinem Code auch nicht gelöst wird, wenn ich zum Beispiel windowstaste+ d drücke um auf den desktop zu gelangen, danach das Programm wieder öffne, ist das gezeichnete verschwunden, was nicht sein dürfte :) und mit einem image habe ich es auch schon versucht: Jedoch wird erst gezeichnet wenn ich die Maus wieder loslasse, was ebenfalls nicht sein soll :( |
AW: Zeichenprogramm
Zitat:
|
AW: Zeichenprogramm
Wenn ich es direkt auf die form zeiche, zeichnet das Programm sofort mit, wenn ich es über image1.canvas anstatt form1.canvas mache jedoch nicht :( Böses delphi :D
|
AW: Zeichenprogramm
Delphi-Quellcode:
Sorry, ich habe trotzdem mit dem MouseMove Angaben gearbeitet.
procedure TForm1.FormCreate(Sender: TObject);
begin Image1.Picture.Bitmap.Width := Screen.Width; Image1.Picture.Bitmap.Height := Screen.Height; Image1.Align := alClient; end; procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if ssLeft in Shift then Image1.Picture.Bitmap.Canvas.LineTo(X, Y); Image1.Picture.Bitmap.Canvas.MoveTo(X, Y); end; |
AW: Zeichenprogramm
Ein Image ist ja auch nicht zum zeichnen gedacht. Wenn dann nimm eine Paintbox.
|
AW: Zeichenprogramm
du bist ein GOTT !! Danke vielmals !!!!!
kann deinen beitrag leider nicht liken ;) aber danke Popov :-* |
AW: Zeichenprogramm
Etwas, daß ich irgendwie jeden fragen muß.
Warum greifst du auf die globale Variable form1 zu? |
AW: Zeichenprogramm
bin anfänger und mag form1 einfach so gern (:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:30 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-2025 by Thomas Breitkreuz