![]() |
TCanvas für TextWidth in Komponente verwenden
Hallo,
ich muss die Breite eines Textes in einem Panel wissen. Das ganze passiert in einer Komponente. Meine erste Version war so:
Delphi-Quellcode:
Da ich aber die Unit "Forms" in meiner Komponente nicht brauch und will, dacht ich mir, ich könnte ja ein Canvas erzeugen:
var
Text_Width: Integer; begin Text_Width := Application.MainForm.Canvas.TextWidth(S); //In "S" ist der String end;
Delphi-Quellcode:
Wenn ich aber nun diesen Code ausführe, erhalte ich die Fehlermeldung:
var
Canvas : TCanvas; begin //Canvas ereugen Canvas := TCanvas.Create; try Text_Width := Canvas.TextWidth(S); finally FreeAndNil(Canvas); end; end; Zitat:
|
Re: TCanvas für TextWidth in Komponente verwenden
Ach,
ich könnt mich in den Arsch beissen :-) Wenn alles so simple wär:
Delphi-Quellcode:
var
Canvas : TCanvas; begin //Canvas ereugen Canvas := TCanvas.Create; try Canvas.Handle := FPanel.Handle; //Das hat gefehlt!! //FPanel ist das Panel Text_Width := Canvas.TextWidth(S); finally FreeAndNil(Canvas); end; end; |
Re: TCanvas für TextWidth in Komponente verwenden
Übrigens, wenn Du von TCustomPanel ableitest, ist Dein Panel ein TCustomControl, hat also bereits einen (wenn auch versteckten) Canvas. :zwinker:
|
Re: TCanvas für TextWidth in Komponente verwenden
Wie wäre es mit:
Delphi-Quellcode:
Wieso noch ein Extra Canvas erzeugen?
Text_Width := FPanel.Canvas.TextWidth(S)
|
Re: TCanvas für TextWidth in Komponente verwenden
Zitat:
Zitat:
sooo: Nach etwas rumbasteln, hab ich jetzt die Textbreite abhängig von der Schrift:
Delphi-Quellcode:
//Canvas ereugen
Canvas := TCanvas.Create; try //Handle zuweisen Canvas.Handle := GetWindowDC(FPanel.Handle); Canvas.Font := FPanel.Font; Text_Width := Canvas.TextWidth(FPanel.Caption); finally FreeAndNil(Canvas); end; |
Re: TCanvas für TextWidth in Komponente verwenden
Falsch gelesen :wall:
|
Re: TCanvas für TextWidth in Komponente verwenden
Vorher den Font Canvas.Font zuweisen, sonst rechnet GetTextWidth falsch.
Das TPanel hat bereits wie erwaehnt einen Canvas. Er ist aber protected und daher nicht direkt zugreifbar. In einer TPanel-Ableitung Canvas einfach public machen. Die implementierte Version ist zwar nicht falsch, aber heftig ineffizient. |
Re: TCanvas für TextWidth in Komponente verwenden
Zitat:
|
Re: TCanvas für TextWidth in Komponente verwenden
Zitat:
|
Re: TCanvas für TextWidth in Komponente verwenden
Delphi-Quellcode:
TMyPanel = class(TPanel)
... public property Canvas; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:19 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