Entwickler-Ecke

Multimedia / Grafik - Zeichnen wie in Paint


knut333 - Do 29.09.05 16:24
Titel: Zeichnen wie in Paint
Hallo. Ich habe ein Image und möchte wie in Paint darauf zeichnen können.

Der Befehl onmousemove zeichnet dabei allerdings die ganze Zeit. Ich will aber, dass nur wenn man die Maustaste gedrückt hält, gezeichnet wird. (alos so wie in Paint). ... wie mache ich das denn?


DarkHunter - Do 29.09.05 16:36

Ist relativ einfach
mach in der mousemoveprozedur einfach ein abfrage ob die maustaste gedrückt wurde.
Ich habe das mal vor einiger zeit so gelöst:
In der Mousdown wurde ein variable auf true gesetzt
in der mouseup wieder auf false
in der mousemove wurde nur gezeichnet wenn die Var true ist


FinalFantasy - Do 29.09.05 16:37

Du könntest dir eine Variable anlegen, in der du dir merkst, ob die Maustaste gedrückt ist, und dann zeichnest du im MouseMove nur, wenn die Maustaste auch wirklich gedrückt ist.

Etwa so:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if Button = mbLeft then
    ButtonPressed := true;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if ButtonPressed then begin
     //hier wird dann gezeichnet
  end;
end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if Button = mbLeft then
    ButtonPressed := false;
end;

Code nicht getestet!!!

Edit: Ok, war ich mal wieder zu langsam... Na dafür hast du jetzt auch noch ein Codebeispiel ;-)


DarkHunter - Do 29.09.05 16:45

Der Code sollte eigentlich gehen
Noch ein Tip für das Zeichnen:
Zeichne immer Linien zum nächsten Punkt, so stellst du sicher das du eine durchgehende Linie hat.