![]() |
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:
Das kommt aufs gleiche raus wie:
ScrollBox1.HorzScrollBar.Position := (ScrollBox1.HorzScrollBar.Range - ScrollBox1.HorzScrollBar.ThumbSize) div 2;
ScrollBox1.VertScrollBar.Position := (ScrollBox1.VertScrollBar.Range - ScrollBox1.VertScrollBar.ThumbSize) div 2;
Delphi-Quellcode:
Ich hab sogar ein Application.ProcessMessages davor damit die ScrollBox bemerken kann dass sich ThumbSize geändert hat, bringt aber auch nix.
ScrollBox1.HorzScrollBar.Position := ScrollBox1.HorzScrollBar.Range div 2;
ScrollBox1.VertScrollBar.Position := ScrollBox1.VertScrollBar.Range div 2; 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. |
Re: TScrollBox zentrieren
Hi!
Welchen Wert hat Thumbsize vor Ausführung dieser Codestelle? Ciao, Frederic |
Re: TScrollBox zentrieren
Vor und nach Application.Processmessages ist es 0.
|
Re: TScrollBox zentrieren
Hallo SnuffMaster23,
versuche es einmal mit diesem Code:
Delphi-Quellcode:
Gruß Hawkeye
with ScrollBox1.HorzScrollBar do
Position := (Range - ScrollBox1.ClientWidth) div 2; with ScrollBox1.VertScrollBar do Position := (Range - ScrollBox1.ClientHeight) div 2; |
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:
Aber das muss doch auch einfacher gehen.
ScrollBox1.HorzScrollbar.Range - ScrollBox1.Height - ScrollBox1.VertScrollbar.Size * ord(ScrollBox1.VertScrollbar.Visible)
//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;
|
Re: TScrollBox zentrieren
Zitat:
Gruß Hawkeye |
Re: TScrollBox zentrieren
Ich hab halt im Objektinspektor und der OH nachgeschaut, da steht kein ClientWidth.
Zitat:
|
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 |
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 20:25 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