Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TScrollBox zentrieren (https://www.delphipraxis.net/74240-tscrollbox-zentrieren.html)

SnuffMaster23 31. Jul 2006 10:23


TScrollBox zentrieren
 
Wie kann man eigentlich eine ScrollBox zentrieren?
Ich hab ein Image drin das in der linken oberen Ecke hängt und möglicherweise viel größer als die Scrollbox ist.
In diesem Fall soll man erstmal die Mitte des Images sehen.

Folgendes funktioniert nicht:
Delphi-Quellcode:
ScrollBox1.HorzScrollBar.Position := (ScrollBox1.HorzScrollBar.Range - ScrollBox1.HorzScrollBar.ThumbSize) div 2;
ScrollBox1.VertScrollBar.Position := (ScrollBox1.VertScrollBar.Range - ScrollBox1.VertScrollBar.ThumbSize) div 2;
Das kommt aufs gleiche raus wie:
Delphi-Quellcode:
ScrollBox1.HorzScrollBar.Position := ScrollBox1.HorzScrollBar.Range div 2;
ScrollBox1.VertScrollBar.Position := ScrollBox1.VertScrollBar.Range div 2;
Ich hab sogar ein Application.ProcessMessages davor damit die ScrollBox bemerken kann dass sich ThumbSize geändert hat, bringt aber auch nix.
Zur Entwurszeit ist ThumbSize = 0, ich nehme an damit er sich dynamisch an den Inhalt anpasst. Aber ich muss doch die tatsächliche Größe zur Laufzeit auch kriegen.

fkerber 31. Jul 2006 10:35

Re: TScrollBox zentrieren
 
Hi!

Welchen Wert hat Thumbsize vor Ausführung dieser Codestelle?


Ciao, Frederic

SnuffMaster23 31. Jul 2006 10:39

Re: TScrollBox zentrieren
 
Vor und nach Application.Processmessages ist es 0.

Hawkeye219 31. Jul 2006 10:49

Re: TScrollBox zentrieren
 
Hallo SnuffMaster23,

versuche es einmal mit diesem Code:

Delphi-Quellcode:
with ScrollBox1.HorzScrollBar do
  Position := (Range - ScrollBox1.ClientWidth) div 2;

with ScrollBox1.VertScrollBar do
  Position := (Range - ScrollBox1.ClientHeight) div 2;
Gruß Hawkeye

SnuffMaster23 31. Jul 2006 10:57

Re: TScrollBox zentrieren
 
TScrollBox kennt kein ClientWidth. Da bin ich auch schon drauf gekommen. Man könnte es ganz umständlich machen mit
Delphi-Quellcode:
ScrollBox1.HorzScrollbar.Range - ScrollBox1.Height - ScrollBox1.VertScrollbar.Size * ord(ScrollBox1.VertScrollbar.Visible)
Aber das muss doch auch einfacher gehen.

//Edit: Das geht auch nicht, da Visible nur angibt ob die Scrollbar überhaupt angezeigt wird falls nötig, nicht ob sie gerade angezeigt wird.
Ich glaube ich verzichte einfach auf die paar Pixel und zeig halt nicht exakt die Mitte.

//Edit²: Ich habs jetzt so, das funktioniert brauchbar:
Delphi-Quellcode:
  ScrollBox1.HorzScrollBar.Position := (ScrollBox1.HorzScrollBar.Range - ScrollBox1.Width) div 2;

Hawkeye219 31. Jul 2006 11:05

Re: TScrollBox zentrieren
 
Zitat:

Zitat von SnuffMaster23
TScrollBox kennt kein ClientWidth.

Alle von TControl abgeleiteten Komponenten besitzen die public-Eigenschaften Client Width und ClientHeight, also auch TScrollBox. Der von mir gepostete Code funktioniert unter Delphi 6 einwandfrei. Was machst du anders?

Gruß Hawkeye

SnuffMaster23 31. Jul 2006 11:10

Re: TScrollBox zentrieren
 
Ich hab halt im Objektinspektor und der OH nachgeschaut, da steht kein ClientWidth.

Zitat:

Zitat von Die OH
Hierarchy
  • System.TObject
    Classes.TPersistent

Ich hab BDS 2005.

Hawkeye219 31. Jul 2006 11:15

Re: TScrollBox zentrieren
 
Der Objektinspektor zeigt nur published-Eigenschaften an, keine public-Eigenschaften. Und die Hilfe in BDS 2005 ist - freundlich formuliert - unvollständig.

Gruß Hawkeye

SnuffMaster23 31. Jul 2006 11:59

Re: TScrollBox zentrieren
 
Dass die 2005er OH nix ist weiß ich ;)
Ich seh grad, ich hab in der OH bei TControlScrollBar und nicht bei TScrollBox nachgeguckt (war grad noch auf) :oops:

Okay, mit ClientWidth/-Height funktionierts auch, aber auf die halbe ScrollBar-Breite/-Höhe kommts eigntlich nicht an.

Danke dir jedenfalls!


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:51 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz