ich bin da auf was gestossen was ich nicht verstehe. Ich möchte eine Polyline in einer Paintbox zeichnen. Dafür habe ich eine Form erzeugt, darauf eine Paintbox gesetzt und möchte nun das Array der Polylinepunkte mit MouseDown füllen. Soweit so gut. Mein Problem ist nun das mit jedem MousDown zu den X und Y Werten die in MouseDown in das Array gegeben wurden die Werte Paintbox1.Left und .Top hinzu addiert werden. Das bedeutet mit jedem klick wandern meine gesetzten Punkt nach unten und rechts. Warum ist das so? Das Rechteck das ich in der Paintmethode zeichne hat doch auch den richtigen Wert? Ist vielleicht noch wichtig in probiere in Ubuntu.
Vielleicht kann mir jemand erklären was ich da falsch mach.
Viele Grüße Bernd
Code: Alles auswählen
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,ExtCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
Label1 : TLabel;
Paintbox1 : TPaintbox;
procedure FormCreate(Sender: TObject);
procedure Paintbox1Paint(Sender: TObject);
procedure PaintboxMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1 : TForm1;
Punkte : array of TPoint;
AnzPu : integer;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
begin
Form1.Left := 200;
Form1.Top := 100;
Form1.Width := 800;
Form1.Height := 600;
Form1.Color := clsilver;
Label1 := TLabel.Create(self);
Label1.Parent := Form1;
Label1.AutoSize := false;
Label1.Left := 10;
Label1.Top := 20;
Label1.Width := 150;
Label1.Height := 25;
Label1.Color := clwhite;
Paintbox1 := TPaintbox.Create(self);
Paintbox1.Parent := Form1;
Paintbox1.Left := 10;
Paintbox1.Top := 50;
Paintbox1.Width := 780;
Paintbox1.Height := 540;
Paintbox1.OnPaint := @Paintbox1Paint;
Paintbox1.OnMouseDown:= @PaintboxMouseDown;
AnzPu :=0;
end;
procedure TForm1.Paintbox1Paint(Sender: TObject);
begin
Paintbox1.Canvas.Brush.Color := clwhite;
Paintbox1.Canvas.Rectangle(0,0,780,540);
Paintbox1.Canvas.Polyline(Punkte);
end;
procedure TForm1.PaintboxMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
//Label1.Caption := 'X: '+inttostr(x)+'Y: '+inttostr(y);
setlength(Punkte,AnzPu+1);
Punkte[AnzPu].X:=x-10;
Punkte[AnzPu].Y:=y-50;
inc(AnzPu);
Paintbox1.Invalidate;
Label1.Caption:='X[0]:'+inttostr(Punkte[0].X)+'Y[0]:'+inttostr(Punkte[0].Y)
end;
end.