![]() |
TCustomControl.Canvas.Font aus TCustomControl.Font übernehme
Hi Leute,
ich hab folgendes Problem. Ich schreibe eine eigene Komponente, die von TCustomControl abgeleitet ist. Über den vorhandenen Canvas zeichne ich meinen notwendigen Kram und setze den Text mittels DrawText in den Canvas. Jetzt sollen zur Laufzeit die Eigenschaften meiner Compo (Farbe, Schrift usw.) änderbar sein. Nutze ich die hauseigene Property Font des TCustomControl, so wirkt sich das nicht auf den Canvas.Font aus und die SetFont-Procedure von TControl ist private und statisch. Somit kann ich auf die Änderung der Font-Eigenschaften nicht mit einer Übernahme und neuzeichnen in meiner Compo reagieren. somit brauche ich eine Idee wie ich das in meiner Klasse elegant lösen kann. Eine neue Eigenschaft wie MyFont will ich aber eigentlich nicht definieren. gruß oki |
Re: TCustomControl.Canvas.Font aus TCustomControl.Font übern
Zitat:
Delphi-Quellcode:
Du musst nur darauf achten, den Font an den Canvas weiterzureichen:
procedure TControl.CMFontChanged(var Message: TMessage);
begin Invalidate; end;
Delphi-Quellcode:
procedure Txxxx.Paint;
begin Canvas.Font.Assign(self.Font); // und hier dein Zeichengedöhns end; |
Re: TCustomControl.Canvas.Font aus TCustomControl.Font übern
Hi shima,
danke für den Tipp. Mit dem Fontnamen klappt das schon mal, nur nicht mit Size und Style. Mach ich da noch was falsch?
Delphi-Quellcode:
hinter FItem verbirgt sich mein Control.
procedure TBaseToolForm.JvFontComboBox1Change(Sender: TObject); // klappt
begin if Assigned(FFont) then FFont.Name := JvFontCombobox1.FontName; if Assigned(FItem) then FItem.Font.Name := FFont.Name; end; procedure TBaseToolForm.SpinEdit1Change(Sender: TObject); // klappt nicht begin if not Assigned(FFont) then Exit; FFont.Size := SpinEdit1.Value; if not Assigned(FItem) then Exit; FItem.Font.Name := FFont.Name; end; Gruß oki |
Re: TCustomControl.Canvas.Font aus TCustomControl.Font übern
Mit folgender Zuweisung klappt es:
Delphi-Quellcode:
Dank und Gruß oki
procedure TBaseToolForm.SpinEdit1Change(Sender: TObject);
begin if Assigned(FFont) then FFont.Size := SpinEdit1.Value; if Assigned(FItem) then FItem.Font := FFont; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:49 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