Mit Maus zeichnen

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
masterm
Beiträge: 15
Registriert: Do 11. Okt 2012, 18:56
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Berlin

Mit Maus zeichnen

Beitrag von masterm »

Hey Community, ich habe ein ziemlich blödes Anfänger-Problem:

wir haben in der Schule die Aufgabe gestellt bekommen, dass wir ein Programm schreiben sollen, mit welchem man auf einem TImage eine Linie selbst zeichnen kann, indem man zweimal draufklickt. Mehr hat uns unser Lehrer aber dazu nicht gesagt mit der Begründung, wir sollten uns mal selbst im Internet erkunden und uns "eigene Gedanken machen". Problem nur, dass ich (und auch einige meiner Freunde) dazu schon sehr viele Seiten durchgeforstet haben und trotzdem zu dem Thema nichts gefunden haben.

Ich weiß sonst nur, dass das Linien-Zeichnen mit der Canvas-Funktion geht und den Befehlen moveto und lineto, mehr haben wir zu Canvas leider nicht gemacht, weshalb ich hier nun im Forum die Frage stelle. Nun weiß ich nicht, wie ich jetzt die Koordinaten für die Punkte herausbekommen soll, wenn man draufklickt (das wäre meine nächste Überlegung, denn hätte ich ja die Koordinaten für die Punkte, würde das Linien-Zeichnen so kein Problem sein).

Danke schonmal für jeden Lösungsvorschlag bzw. Comment. ;)

masterm

Heinrich Wolf
Beiträge: 323
Registriert: Di 12. Apr 2011, 13:21
OS, Lazarus, FPC: WinXP + VMWare Player mit Fedora14, L 1.1, FPC 2.7.1
CPU-Target: 1core 1,8GHz 32Bit
Wohnort: Fürth
Kontaktdaten:

Re: Mit Maus zeichnen

Beitrag von Heinrich Wolf »

Hi,

mit folgendem Code kriegst Du den Punkt relativ zur linken oberen Ecke von Image1.

Code: Alles auswählen

procedure TForm1.Image1Click(Sender: TObject);
var p : tPoint;
begin
  p := Mouse.CursorPos;
  p := Image1.ScreenToClient(p);
end;
 
Gruß
Heiner

Benutzeravatar
theo
Beiträge: 10869
Registriert: Mo 11. Sep 2006, 19:01

Re: Mit Maus zeichnen

Beitrag von theo »

So vielleicht? Mouse Down -> Bewegen -> Mouse Up = Linie?

Warum schicken euch eure Lehrer immer in die Foren? Sind die zu faul? Find ich merkwürdig.

Code: Alles auswählen

 
 
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  Image1.Canvas.MoveTo(X,Y);      
end;
 
procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  Image1.Canvas.Brush.Color:=clWhite;
  Image1.Canvas.FillRect(0,0,Image1.Width,Image1.Height);
  Image1.Canvas.LineTo(X,Y);
end;    

Heinrich Wolf
Beiträge: 323
Registriert: Di 12. Apr 2011, 13:21
OS, Lazarus, FPC: WinXP + VMWare Player mit Fedora14, L 1.1, FPC 2.7.1
CPU-Target: 1core 1,8GHz 32Bit
Wohnort: Fürth
Kontaktdaten:

Re: Mit Maus zeichnen

Beitrag von Heinrich Wolf »

theo hat geschrieben:So vielleicht? Mouse Down -> Bewegen -> Mouse Up = Linie?
Das ist natürlich das intuitivste. Aber die Vorgabe waren zwei Mausklicks

masterm
Beiträge: 15
Registriert: Do 11. Okt 2012, 18:56
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Berlin

Re: Mit Maus zeichnen

Beitrag von masterm »

Heinrich Wolf hat geschrieben:Hi,

mit folgendem Code kriegst Du den Punkt relativ zur linken oberen Ecke von Image1.

Code: Alles auswählen

procedure TForm1.Image1Click(Sender: TObject);
var p : tPoint;
begin
  p := Mouse.CursorPos;
  p := Image1.ScreenToClient(p);
end;
 
Gruß
Heiner
Super, habs auch so hinbekommen:

Code: Alles auswählen

 
[...]
var pt: TPoint;i:integer;
[...]
procedure TForm1.Image1Click(Sender: TObject);
begin
if i=0 then begin
pt:=Mouse.CursorPos;
pt := ScreenToClient(pt);
with Image1.Canvas do begin
  Pen.Style:=pssolid;
  Pen.Color:=clred;
  Pen.Width:=2;
  moveto(pt);
end; end else
begin
  pt:=Mouse.CursorPos;
  pt := ScreenToClient(pt);
 with image1.canvas do lineto(pt);
end;
i:=i+1;
end; 
[...]
 
Jetzt etwas erweitert: wenn ich möchte, dass man auf das Image klickt und der mit dem Mauszeiger sozusagen mitzeichnet, also dahin Punkte setzt, wohin die Maus geht, wie mache ich es dann ?
Zuletzt geändert von masterm am Do 10. Jan 2013, 07:55, insgesamt 1-mal geändert.

Benutzeravatar
theo
Beiträge: 10869
Registriert: Mo 11. Sep 2006, 19:01

Re: Mit Maus zeichnen

Beitrag von theo »

Schau dir einfach mal die Events an.
Es gibt OnClick (finde ich nicht geeignet zum Zeichnen) OnMouseDown, OnMouseUp, und OnMouseMove

masterm
Beiträge: 15
Registriert: Do 11. Okt 2012, 18:56
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Berlin

Re: Mit Maus zeichnen

Beitrag von masterm »

theo hat geschrieben:OnClick (finde ich nicht geeignet zum Zeichnen) OnMouseDown, OnMouseUp, und OnMouseMove
Ah, jetzt verstehe ich langsam. Man kann mit den Events angeben, bei was genau eine bestimmte Prozedur ausgeführt werden soll, also nicht nur beim Klicken auf eine Oberfläche, sondern es gibt noch weitere Sachen.

Danke, das war mir so noch nicht klar.^^ Hab es nun auch damit hinbekommen, auch so wie ich es wollte, super. ;)

masterm

Antworten