AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Umgang mit TScrollbox/TImage/TPaintbox

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

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

AW: Umgang mit TScrollbox/TImage/TPaintbox

  Alt 7. Aug 2013, 16:22
Ich weiß zwar noch nicht genau, was Du meinst, aber hilöft Dir vielleicht, die aktuellen Positionen der Scrollbars vom Offset abzuziehen?
Du beginnst dann nicht bei 0,0 sondern bei -HorzScrollBar.Position, -VertScrollBar.Position.

Hilft das irgendwie?
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#2

AW: Umgang mit TScrollbox/TImage/TPaintbox

  Alt 7. Aug 2013, 17:31
Du kannst doch im OnPaint-Event der Paintbox nicht die Größe der Paintbox ändern!
So forderst du die Probleme ja geradezu heraus.
fork me on Github
  Mit Zitat antworten Zitat
Mikkey

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

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.357 Beiträge
 
Delphi 11 Alexandria
 
#4

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
 
#5

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

 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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:19 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