AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Zeichenprogramm

Ein Thema von Mystery · begonnen am 22. Feb 2012 · letzter Beitrag vom 22. Feb 2012
Antwort Antwort
Seite 1 von 2  1 2      
Mystery

Registriert seit: 26. Nov 2011
20 Beiträge
 
#1

Zeichenprogramm

  Alt 22. Feb 2012, 20:21
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.

Geändert von Mystery (22. Feb 2012 um 21:15 Uhr)
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#2

AW: Zeichenprogramm

  Alt 22. Feb 2012, 21:20
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 FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer) gut sind? Da hast Shift und X und Y. mit if ssLeft in Shift then findest du heraus ob Maustaste geklickt ist, X und Y sind selbsterklärend.

Delphi-Quellcode:
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;
Edit:

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.

Geändert von Popov (22. Feb 2012 um 21:25 Uhr)
  Mit Zitat antworten Zitat
Mystery

Registriert seit: 26. Nov 2011
20 Beiträge
 
#3

AW: Zeichenprogramm

  Alt 22. Feb 2012, 21:29
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

Geändert von Mystery (22. Feb 2012 um 21:32 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

AW: Zeichenprogramm

  Alt 22. Feb 2012, 21:33
Jedoch wird erst gezeichnet wenn ich die Maus wieder loslasse, was ebenfalls nicht sein soll
Und genau das passiert weil du nicht auf ein Bitmap im speicher zeichnest. Der Canvas hat kein Gedächtnis.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Mystery

Registriert seit: 26. Nov 2011
20 Beiträge
 
#5

AW: Zeichenprogramm

  Alt 22. Feb 2012, 21:37
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
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#6

AW: Zeichenprogramm

  Alt 22. Feb 2012, 21:39
Delphi-Quellcode:
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;
Sorry, ich habe trotzdem mit dem MouseMove Angaben gearbeitet.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

AW: Zeichenprogramm

  Alt 22. Feb 2012, 21:41
Ein Image ist ja auch nicht zum zeichnen gedacht. Wenn dann nimm eine Paintbox.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Mystery

Registriert seit: 26. Nov 2011
20 Beiträge
 
#8

AW: Zeichenprogramm

  Alt 22. Feb 2012, 21:42
du bist ein GOTT !! Danke vielmals !!!!!

kann deinen beitrag leider nicht liken aber danke Popov :-*
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#9

AW: Zeichenprogramm

  Alt 22. Feb 2012, 22:30
Etwas, daß ich irgendwie jeden fragen muß.
Warum greifst du auf die globale Variable form1 zu?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Mystery

Registriert seit: 26. Nov 2011
20 Beiträge
 
#10

AW: Zeichenprogramm

  Alt 22. Feb 2012, 22:42
bin anfänger und mag form1 einfach so gern (:
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:19 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