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.