Einzelnen Beitrag anzeigen

RBiniasch

Registriert seit: 23. Mär 2006
4 Beiträge
 
#2

Re: Komponente speichert Font-Property nicht mehr

  Alt 7. Nov 2008, 12:06
Ha, gefunden 8)

Im Konstruktor von TControl befindet sich die Zeile

FFont.OnChange := FontChanged;

Wer also in einer von TControl abgeleiteten Klasse selbst dem Onchange des Fonts eine Funktion zuweißt ruiniert die Ereignisbehandlung des TControl ...

Ich habe meine Funktion durch folgende Einträge erweitert :

Delphi-Quellcode:
  ParentFont := FALSE;
  DesktopFont := FALSE;

  if Font.Height <> F_iFontHeight then
  begin
    ScalingFlags := ScalingFlags + [sfFont];
    F_iFontHeight := Font.Height;
  end;
  Perform(CM_FONTCHANGED, 0, 0);
was der Funktion FontChanged entspricht. Allerdings greift das Control dort direkt auf die Feldvariablen FParentFont, FDesktopFont und FScalingflags zu und verwendet die Variable FFontHeight, welche ebenfalls als private deklariert und über keine Property zugänglich ist.
FFontHeight wird nur in dieser Funktion verwendet, daher habe ich es durch F_iFontHeight ersetzt.
Inwiefern das Auslösen der Setter von FParentFont und FDesktopFont ein Problem bergen könnte wird die Zeit zeigen. Wahrscheinlich ist es unkritisch.
FScalingflags hat keinen Setter so das es nur ein wenig Performance kostet, weil ich statt 'Include(FScalingFlags, sfFont)' das obige Konstrukt verwenden muss.

Und wofür das ganze Gemurkse? Nur weil die Entwickler bei Borland es bei der Programmierung des TControls nicht für nötig befunden haben, eine virtuelle Funktion OnChangeFont einzubauen. Sorry, aber das ist echt lausig ...
  Mit Zitat antworten Zitat