![]() |
TScrollBox, VerticalScrollbar, Range
Hallo zusammen,
ich habe folgende Situation und würde die Range der TScrollbox automatisch berechnen: Formular mit einer Höhe von knapp 250 Pixeln. Darauf liegt die Scrollbox mit alClient. In der Scrollbox liegt ein Panel mit alClient. Dem Panel weise ich unterschiedlich langen Text mit Zeilenumbrüchen etc zu. Das heißt, der Text in dem Panel ist kann mal 600 Pixel hoch sein, mal aber auch 900, mal aber auch nur 400. Wie kann ich diese Pixelhöhe des Textes berechnen, sodass ich die Range der Scrollbox nach Zuweisung des Textes auf das Panel automatisch setzen kann? Ich hoffe, ihr könnt mir dabei helfen. |
AW: TScrollBox, VerticalScrollbar, Range
Hast du auf dem Panel für den Text ein Label oder ein Memo?
Bei einem Label wäre es einfach. Für Panel und Label Align = atTop und Autosize = True setzen. Bei einem Memo könntst du es GetScrollRange versuchen. |
AW: TScrollBox, VerticalScrollbar, Range
Weder noch, der Text wird direkt ins Panel geschrieben, dass brauche ich auch zwingend, da es ein spezielles Panel ist und ich bestimmte Eigenschaften davon brauche, die das normale Panel nicht bietet.
|
AW: TScrollBox, VerticalScrollbar, Range
Wenn dein Panel ein Canvas hat, was bei einem normalen Panel protected ist, könntest du es so machen:
Beispiel für normales TPanel
Delphi-Quellcode:
type THackPanel = class(TPanel); function PanelTextHeight(APanel: TPanel; AText: string): Integer; var R: TRect; begin R.Create(0,0,0,0); THackPanel(APanel).Canvas.TextRect(R, AText, [tfCalcRect]); Result := R.Height; end; |
AW: TScrollBox, VerticalScrollbar, Range
Liste der Anhänge anzeigen (Anzahl: 1)
Habe ich versucht, sieht aber meiner Meinung nach falsch aus.
Als Result wird mir 13 geliefert (=Bottom). Right sieht entsprechend lang aus aber auch keine 25k Pixel... Edit: Als String habe ich mal testweise folgendes übergeben:
Delphi-Quellcode:
Alle 3 Results liefern 13.
'Hallo Welt #13#10 Hallo Welt #13#10 Welt #13#10 Hallo Welt Hallo Welt Hallo Welt #13#10 Hallo Welt Hallo Welt Hallo Welt #13#10 Hallo Welt Hallo Welt Hallo Welt #13#10 #13#10 Hallo Welt Hallo Welt Hallo Welt #13#10 Hallo Welt Hallo Welt'
TMyPanel(aPanel).Canvas.TextRect(R, aText, [tfCalcRect]); Result := R.Height; Result := TMyPanel(aPanel).Canvas.TextHeight(aText); Result := TMyPanel(aPanel).Canvas.TextExtent(aText).Height; Sieht man aber sofort, dass es nicht nur 13 Pixel sein können |
AW: TScrollBox, VerticalScrollbar, Range
Die Frage ist, was steht im Text?
Wird der Text vom Panel automaisch auf mehrere Zeilen umgebrochen obwohl dort kein #13#10 enthalten ist? |
AW: TScrollBox, VerticalScrollbar, Range
Also in der Eigenschaft Text steht entsprechend der lange Text.
Das Panel macht anhand bestimmter Sonderzeichen in dem Text automatisch ein Zeilenumbruch. Deswegen wollte ich ja gerne die tatsächliche Höhe des Textes ermitteln. Am Ende steht alles untereinander weil #13#10 ein "Enter" einfügt. |
AW: TScrollBox, VerticalScrollbar, Range
Zitat:
Das könnte dir dabei helfen: ![]() Edit: ok hatte nicht gedacht das es dies macht. Mein Fehler. |
AW: TScrollBox, VerticalScrollbar, Range
Das TCanvas besitzt eine Funktion TextHeight so kannst du die tatsächliche höhe des Textes ermitteln.
|
AW: TScrollBox, VerticalScrollbar, Range
Zitat:
Ich würde mir mal bei diesem für uns unbekannten Panel die Methode anschauen, die den Text ausgibt (sofern die Quellen vorhanden sind) oder mal in die Quellen von TCustomLabel reinschauen. TCustomLabel kann Wordwrap und Autosize. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:47 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 by Thomas Breitkreuz