AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Umgang mit TScrollbox/TImage/TPaintbox

Ein Thema von Mikkey · begonnen am 5. Aug 2013 · letzter Beitrag vom 12. Aug 2013
Antwort Antwort
Mikkey

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

AW: Umgang mit TScrollbox/TImage/TPaintbox

  Alt 7. Aug 2013, 17:58
Vielen Dank für die Idee. Das war's zwar nicht, aber wenn man als untere Grenzen bei SetBounds die ermittelte Scrollposition (negativ) einsetzt

- und die oberen Grenzen so beibehält -

Dann funktioniert es.

Komische Logik...

Gruß, Mikkey
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.352 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Umgang mit TScrollbox/TImage/TPaintbox

  Alt 7. Aug 2013, 18:10
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.

Z.B. könntest Du einen Timer starten, der dann die Größe der Paintbox anpasst.
Oder häng mal hier ein kleines Dempoprojekt an, dann können wir das mal genauer anschauen...
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Mikkey

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

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
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:23 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz