Einzelnen Beitrag anzeigen

Mikkey

Registriert seit: 5. Aug 2013
265 Beiträge
 
#7

AW: Umgang mit TScrollbox/TImage/TPaintbox

  Alt 8. Aug 2013, 06:50
Schön, aber sx2008 hat Recht.
Im OnPaint-Event sollte man keine Größenänderung durchführen und keine Neuzeichnung initiieren.
Falls PaintPaintBox Deine OnPaint-Behandlung ist, dann solltest Du das nochmal überarbeiten.
Das mag ja sein, aber wenn ich das obige Programmstück so modifiziere, tritt der beschriebene Effekt ebenfalls auf (PaintPaintbox ist jetzt die OnPaint-Routine):


Delphi-Quellcode:
procedure TForm1.MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  pt: TPoint;
begin
  Randomize();
  fSize.cx := RandomRange(4000, 5000);
  fSize.cy := RandomRange(4000, 5000);
  pt.X := 0; pt.Y := 0;
  pt := PaintBox1.ClientToParent(pt, nil);
  //PaintBox1.SetBounds(pt.x, pt.y, pt.x + fSize.cx, pt.y + fSize.cy);
  PaintBox1.SetBounds(0, 0, pt.x + fSize.cx, pt.y + fSize.cy);
  Invalidate();
end;

procedure TForm1.PaintPaintBox(Sender: TObject);
var
  x, y: Integer;
  s:String;
begin
  PaintBox1.canvas.Font.Height := 14;
  y := 0;
  while y < fSize.cy do begin
    x := 0;
    while x < fSize.cx do begin
      s := Format('(%d, %d)', [x, y]);
      PaintBox1.canvas.TextOut(x, y, s);
      x := x + 200;
    end;
    y := y + 100;
  end;
end;
Wenn die andere SetBounds-Zeile aktiviert wird, ist alles ok (*), in dieser Variante beginnt die Ausgabe mitten im Dokument. Das "Programm" besteht aus nicht mehr als den geposteten beiden Methoden.

(*) Das Dokument sollte nach SetBounds in beiden Richtungen eine Größe von 4000-5000 Pixeln haben, tatsächlich ist die letzte Ausgabe aber immer (1800, 1400), der Bereich außerhalb von ca. 2000,1500 ist grau.

Any Idea?

Gruß, Mikkey

Geändert von Mikkey ( 8. Aug 2013 um 08:36 Uhr)
  Mit Zitat antworten Zitat