ich habe das Verhalten in einem einfachen Programm nachgestellt und bilde es hier ab.
Durch Mausklick irgendwo in die Zeichenfläche wird die Größe verändert. Ist die darstellung bereits gescrollt, beginnt das neue Zeichnen nicht oben im Dokument, sondern oben im gerade gezeigten Ausschnitt.
Delphi-Quellcode:
procedure TForm1.MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Randomize();
fSize.cx := RandomRange(400, 5000);
fSize.cy := RandomRange(400, 5000);
szChanged := true;
PaintPaintBox(PaintBox1);
Invalidate();
end;
procedure TForm1.PaintPaintBox(Sender: TObject);
var
x, y: Integer;
s:String;
pt: TPoint;
begin
PaintBox1.canvas.Font.Height := 14;
if szchanged then begin
PaintBox1.SetBounds(0, 0, fSize.cx, fSize.cy);
szChanged := false;
end;
pt.X := 0; pt.Y := 0;
pt := ScrollBox1.ParentToClient(pt, nil);
pt.X := 0; pt.Y := 0;
pt := ScrollBox1.ClientToParent(pt, nil);
y := 0;
while y < fSize.cy do begin
x := 0;
while x < fSize.cx do begin
s := Format('(%d, %d)', [x, y]);
pt.x := x;
pt.Y := y;
pt := PaintBox1.ClientToParent(pt);
PaintBox1.canvas.TextOut(pt.x, pt.y, s);
x := x + 200;
end;
y := y + 100;
end;
end;
Ich hoffe, irgendjemand mag sich das mal anschauen.