Ich vermute mal, dass du beim freien Zeichnen immer die vorherige Position des Cursors mit der jetzigen per Canvas.LineTo() verbindest. Wenn du den Cursor dabei langsam bewegst, entstehen halt sehr viele einzelne kurze Linien, die eventuell nicht länger als ein paar Pixel sind. Es ist einleuchtend, dass die Punktung der Linie dabei nicht sichtbar wird, denn wie will man eine 1Pixel lange Linie punkten?
Als Lösung fällt mir spontan eine Sache ein: Merke dir die Punkte in einem Array of TPoint. Dann zeichnest du sie per Canvas.Polyline:
Delphi-Quellcode:
var
Pt: Array of TPoint;
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if ssLeft in Shift then
begin
SetLength(Pt, Length(Pt) + 1);
Pt[High(Pt)].X := X;
Pt[High(Pt)].Y := Y;
Canvas.Polyline(Pt);
end;
end;
Dann wird die Linie gepunktet.
Viele Grüße