AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi TCustomControl.Canvas.Font aus TCustomControl.Font übernehme
Thema durchsuchen
Ansicht
Themen-Optionen

TCustomControl.Canvas.Font aus TCustomControl.Font übernehme

Ein Thema von oki · begonnen am 13. Aug 2007 · letzter Beitrag vom 13. Aug 2007
Antwort Antwort
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#1

TCustomControl.Canvas.Font aus TCustomControl.Font übernehme

  Alt 13. Aug 2007, 18:34
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
42
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

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

  Alt 13. Aug 2007, 18:46
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;
Andreas
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#3

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

  Alt 13. Aug 2007, 18:55
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
42
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#4

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

  Alt 13. Aug 2007, 19:07
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
42
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:10 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