Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TCustomControl.Canvas.Font aus TCustomControl.Font übernehme (https://www.delphipraxis.net/97617-tcustomcontrol-canvas-font-aus-tcustomcontrol-font-uebernehme.html)

oki 13. Aug 2007 17:34


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

shmia 13. Aug 2007 17:46

Re: TCustomControl.Canvas.Font aus TCustomControl.Font übern
 
Zitat:

Zitat von oki
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.

Bei einer Font-Änderung wird doch automatisch die Message CM_FONTCHANGED ausgelöst und dies bewirkt das Neuzeichnen:
Delphi-Quellcode:
procedure TControl.CMFontChanged(var Message: TMessage);
begin
  Invalidate;
end;
Du musst nur darauf achten, den Font an den Canvas weiterzureichen:
Delphi-Quellcode:
procedure Txxxx.Paint;
begin
   Canvas.Font.Assign(self.Font);
   // und hier dein Zeichengedöhns
end;

oki 13. Aug 2007 17:55

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:
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;
hinter FItem verbirgt sich mein Control.

Gruß oki

oki 13. Aug 2007 18:07

Re: TCustomControl.Canvas.Font aus TCustomControl.Font übern
 
Mit folgender Zuweisung klappt es:
Delphi-Quellcode:
procedure TBaseToolForm.SpinEdit1Change(Sender: TObject);
begin
  if Assigned(FFont) then
    FFont.Size := SpinEdit1.Value;
  if Assigned(FItem) then
    FItem.Font := FFont;
end;
Dank und Gruß oki


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:16 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