AGB  ·  Datenschutz  ·  Impressum  







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

TScrollBox, VerticalScrollbar, Range

Ein Thema von Alex_ITA01 · begonnen am 4. Nov 2022 · letzter Beitrag vom 4. Nov 2022
Antwort Antwort
Seite 1 von 2  1 2      
Alex_ITA01

Registriert seit: 22. Sep 2003
1.115 Beiträge
 
Delphi 12 Athens
 
#1

TScrollBox, VerticalScrollbar, Range

  Alt 4. Nov 2022, 07:33
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.
Let's fetz sprach der Frosch und sprang in den Mixer
  Mit Zitat antworten Zitat
BerndS

Registriert seit: 8. Mär 2006
Ort: Jüterbog
491 Beiträge
 
Delphi 12 Athens
 
#2

AW: TScrollBox, VerticalScrollbar, Range

  Alt 4. Nov 2022, 08:48
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.
  Mit Zitat antworten Zitat
Alex_ITA01

Registriert seit: 22. Sep 2003
1.115 Beiträge
 
Delphi 12 Athens
 
#3

AW: TScrollBox, VerticalScrollbar, Range

  Alt 4. Nov 2022, 09:34
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.
Let's fetz sprach der Frosch und sprang in den Mixer
  Mit Zitat antworten Zitat
BerndS

Registriert seit: 8. Mär 2006
Ort: Jüterbog
491 Beiträge
 
Delphi 12 Athens
 
#4

AW: TScrollBox, VerticalScrollbar, Range

  Alt 4. Nov 2022, 09:56
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;
  Mit Zitat antworten Zitat
Alex_ITA01

Registriert seit: 22. Sep 2003
1.115 Beiträge
 
Delphi 12 Athens
 
#5

AW: TScrollBox, VerticalScrollbar, Range

  Alt 4. Nov 2022, 10:29
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:
'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;
Alle 3 Results liefern 13.
Sieht man aber sofort, dass es nicht nur 13 Pixel sein können
Miniaturansicht angehängter Grafiken
2022.11.04-10_27_26-001.png  
Let's fetz sprach der Frosch und sprang in den Mixer

Geändert von Alex_ITA01 ( 4. Nov 2022 um 10:39 Uhr)
  Mit Zitat antworten Zitat
BerndS

Registriert seit: 8. Mär 2006
Ort: Jüterbog
491 Beiträge
 
Delphi 12 Athens
 
#6

AW: TScrollBox, VerticalScrollbar, Range

  Alt 4. Nov 2022, 10:42
Die Frage ist, was steht im Text?
Wird der Text vom Panel automaisch auf mehrere Zeilen umgebrochen obwohl dort kein #13#10 enthalten ist?
  Mit Zitat antworten Zitat
Alex_ITA01

Registriert seit: 22. Sep 2003
1.115 Beiträge
 
Delphi 12 Athens
 
#7

AW: TScrollBox, VerticalScrollbar, Range

  Alt 4. Nov 2022, 11:02
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.
Let's fetz sprach der Frosch und sprang in den Mixer
  Mit Zitat antworten Zitat
itblumi

Registriert seit: 28. Mär 2009
73 Beiträge
 
Delphi XE6 Professional
 
#8

AW: TScrollBox, VerticalScrollbar, Range

  Alt 4. Nov 2022, 11:06
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:
'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;
Alle 3 Results liefern 13.
Sieht man aber sofort, dass es nicht nur 13 Pixel sein können
Um die Zeilenumbrüche musst du dich selbst kümmern, das TCanvas macht dies nicht automatisch für dich.
Das könnte dir dabei helfen: https://shrimpworks.za.net/2006/05/2...-on-a-tcanvas/

Edit: ok hatte nicht gedacht das es dies macht. Mein Fehler.
Jan
Ein neuer Tag bringt so einiges mit sich. Was auch immer es ist, es bleibt ein kleines Abenteuer.

Geändert von itblumi ( 4. Nov 2022 um 11:09 Uhr)
  Mit Zitat antworten Zitat
itblumi

Registriert seit: 28. Mär 2009
73 Beiträge
 
Delphi XE6 Professional
 
#9

AW: TScrollBox, VerticalScrollbar, Range

  Alt 4. Nov 2022, 11:11
Das TCanvas besitzt eine Funktion TextHeight so kannst du die tatsächliche höhe des Textes ermitteln.
Jan
Ein neuer Tag bringt so einiges mit sich. Was auch immer es ist, es bleibt ein kleines Abenteuer.
  Mit Zitat antworten Zitat
BerndS

Registriert seit: 8. Mär 2006
Ort: Jüterbog
491 Beiträge
 
Delphi 12 Athens
 
#10

AW: TScrollBox, VerticalScrollbar, Range

  Alt 4. Nov 2022, 11:21
Zitat:
Das TCanvas besitzt eine Funktion TextHeight so kannst du die tatsächliche höhe des Textes ermitteln.
Leider ignoriert diese Funktion #13#10 und gibt nur die Höher einer Zeile zurück. Hat man mehrer Zeilen muss man dann noch das Result damit multiplizieren.
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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