Autor |
Beitrag |
combatman
Hält's aus hier
Beiträge: 13
|
Verfasst: Mo 29.07.02 13:38
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
      
Beiträge: 85
|
Verfasst: 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 
Hält's aus hier
Beiträge: 13
|
Verfasst: 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
      
Beiträge: 557
Win XP Prof, Win XP Home,Win Server 2003,Win 98SE,Win 2000,Win NT4,Win 3.11,Suse Linux 7.3 Prof,Suse Linux 8.0 Prof
D2k5 Prof, D7 Prof, D5 Standard, D3 Prof, K3 Prof
|
Verfasst: 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
      
Beiträge: 116
Erhaltene Danke: 2
Win2k, Win7, Win10
D5, D2005, D2006, D2007, D10.4.2
|
Verfasst: 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.
      
Beiträge: 1703
Erhaltene Danke: 25
Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
|
Verfasst: Fr 16.01.09 06:35
|
|
Biergeneral
      
Beiträge: 35
WIN XP
Delphi 7 Ent., Delphi 2007 Ent., C/C++ (Eclipse)
|
Verfasst: 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 
|
|