Hallo,
ich habe von TPanel abgeleitete Komponente gebaut, welche auf eine Änderung des Fonts reagieren muss (der wer weiß wievielte erweiterte Button 8) ).
Dafür habe ich im Konstruktor den Eintrag
Font.OnChange := OnFontChanged;
stehen. In 'OnFontChanged' passieren dann die spannenden Dinge.
Das Problem ist nun, wenn diese Zeile im Konstruktor steht speichert Delphi (7 und 2009) Änderungen am Font nicht mehr in der
dfm-Datei. Zur Entwurfszeit ist alles ok, die Komponente reagiert auf die Änderungen und das Leben ist schön. Starte ich das Programm sind alle Änderungen vergessen. Ebenso beim neu Laden des Projektes oder Kopieren des Buttons.
Kommentiere ich die Zuweisung von 'OnFontChanged' aus funktioniert der Spaß wieder.
Steckt die Zuweisung im 'Loaded' landen Änderungen am Font wieder in der
dfm, aber die Komponente reagiert zur Entwurfszeit nicht mehr auf Änderungen.
Falls wer bis hierher gelesen hat und noch einen Blick auf den Konstruktor werfen möchte, hier kommt er :
Delphi-Quellcode:
constructor TMQButton.Create(tcOwner: TComponent);
begin
inherited;
Width := 90;
Height := 22;
InitBMPs;
F_toGraphics := TtoGraphics.Create;
F_toBorders := TtoDrawFrame.Create;
F_strBtnText := EmptyStr;
F_tcColorMain := SB_DEF_COLOR_STD_MAIN;
F_tcColorShade := SB_DEF_COLOR_STD_SHADE;
F_tcColorFrame := SB_DEF_COLOR_STD_FRAME;
F_tcColorActiveMain := SB_DEF_COLOR_STD_SHADE;
F_tcColorActiveShade := SB_DEF_COLOR_STD_MAIN;
F_tcColorHotMain := SB_DEF_COLOR_HOT_MAIN;
F_tcColorHotShade := SB_DEF_COLOR_HOT_SHADE;
F_iGradientSteps := 100;
F_iEllipseHeight := 0;
F_iEllipseWidth := 0;
F_setBtnStates := [bsBase];
F_bDrawBorder := TRUE;
F_bActive := FALSE;
F_bShowHot := FALSE;
F_bStayDown := FALSE;
F_bDisableDblClick := TRUE;
BevelOuter := bvNone;
DoubleBuffered := TRUE;
F_tneOnMouseEnter := nil;
F_tneOnMouseLeave := nil;
Font.OnChange := OnFontChanged; // Hier passierts ...
CreateBMPs;
ChangeBtnState;
end;
Danke fürs Lesen und falls wer eine Idee hat, immer her damit
Ralf Biniasch