Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Textbreite feststellen -> automatische Controlbreite
combatman - Mo 29.07.02 13:38
Titel: Textbreite feststellen -> automatische Controlbreite
Ich möchte für mein Programm Übersetzungen in andere Sprachen ermöglichen. Dabei habe ich nun folgendes Problem:
Da die Textbreite natürlich bei verschiedenen Sprachen variiert, möchte ich z.B. bei einer Radiobox die Breite des Textes in Pixeln abfragen, um die Breites des Controls entsprechend anzupassen.
Hat jemand eine Idee wie man das anstellen könnte? Bisher bin ich leider noch nicht fündig geworden.
Moderiert von
Narses: Topic aus Sonstiges (Delphi) verschoben am Fr 09.01.2009 um 17:27
GPF - Mo 29.07.02 14:51
TCanvas stellt die Methoden TextWidth und TextHeight zur Verfügung.
Damit kannst Du Pixel-genau die Breite bzw. Höhe eines Strings ermitteln.
Einziger Haken dabei ist allerdings, daß einige Standardkomponenten den Canvas nicht veröffentlicht haben und Du dann damit Canvas.Textwidth und Canvas.Textheight nicht aufrufen kannst.
In einem solchen Fall mußt Du einfach eine abgeleitete Komponente erstellen und nur den Canvas im public Bereich veröffentlichen. Bei der RadioBox bin ich mir nicht sicher ob Du dieses noch machen mußt oder nicht.
MfG
GPF
combatman - Mo 29.07.02 22:18
Titel: Danke
Klingt ja gar nicht so schwer, werde ich morgen gleich mal ausprobieren. Wichtig ist, dass die tatsächliche Textbreite bekomme, nicht die Breite des Controls.
FriFra - Mo 29.07.02 22:28
Die Textbreite kannst du mit
Delphi-Quelltext
1:
| Form1.canvas.textwidth('Dein Text'); |
ermitteln. Du kannst den Canvas vom Form nehmen, da das Form ja idR. die gleichen Fonteinstellungen wie Radiobuttons etc. haben. Falls es bei Dir anders ist, kannst Du ja auch den Canvas eines Labels verwenden.
Bei RadioButtons und CheckBoxen musst Du allerding noch einen fixen Wert addieren, da die vorangestellten "Images" deren Breite erhöhen.
Moderiert von
Narses: Code- durch Delphi-Tags ersetzt
Knulli - Fr 09.01.09 17:44
@GPF
Wie komme ich z.B. an den Canvas eines TPanel?
Delphi-Quelltext
1: 2: 3: 4: 5:
| TPanel = class(TCustomPanel) TCustomPanel = class(TCustomControl) TCustomControl = class(TWinControl) protected property Canvas: TCanvas read FCanvas; |
Ich will kein neues TPanel erfinden, aber TCustomPanel versteckt ihn...
Knulli
Moderiert von
Narses: Delphi-Tags hinzugefügt
Andreas L. - Fr 16.01.09 06:35
Knulli hat folgendes geschrieben : |
Wie komme ich z.B. an den Canvas eines TPanel?
Delphi-Quelltext 1: 2: 3: 4: 5:
| TPanel = class(TCustomPanel) TCustomPanel = class(TCustomControl) TCustomControl = class(TWinControl) protected property Canvas: TCanvas read FCanvas; |
Ich will kein neues TPanel erfinden, aber TCustomPanel versteckt ihn...
Knulli |
Das Panel hat die Eigenschaft AutoSize. Schaus dir mal an. Ansonsten nimm doch wie schon vorgeschlagen das Canvas des Forms:
Delphi-Quelltext
1:
| Panel1.Width := Form1.Canvas.TextWidth(Panel1.Caption); |
Biergeneral - So 18.01.09 12:57
Es gibt noch eine andere Möglichkeit an die Textbreite zu kommen, ohne über die TCanvas Klasse zu gehen.
Delphi-Quelltext
1: 2: 3: 4:
| procedure GetControlTextExtents(AControl: TControl; const Text: string): TSize; begin GetTextExtentPoint32(AControl.Handle, Text, length(Text), Result); end; |
Result.cx beschreibt dann die Breite und Result.cy die Höhe des Textes.
( Das ist übrigens nichts anderes, als das TCanvas nutzt um die Ausdehnung des Textes zu errechnen )
Grüße ;-)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!