Ok, das habe ich so zur Kenntnis genommen, etwas zerknirscht, da sich die Frames bislang eigentlich als sehr gut funktional erwiesen haben.
In meinem Prototypen (auf
VCL-Basis) hat das sehr gut funktioniert. Daher verstehe ich das Problem nicht ganz.
Der Frame selbst wird nur einmal instanziiert, also denke ich dass das nicht wirklich das Problem sein sollte.
Ich wollte bewusst nicht mit mehreren Instanzen arbeiten.
Code:
if FontDialogFrame=NIL then
begin
FontDialogFrame := TFontDialogFrame.Create(Self);
FontDialogFrame.Setup;
end;
if FontDialogFrame<>NIL then
begin
FontDialogFrame.AssignLabels;
FontDialogFrame.Position.X := LessonMenuFrame.Position.X + LessonMenuFrame.Width + 50;
FontDialogFrame.Position.Y := LessonMenuFrame.Position.Y + 150;
FontDialogFrame.onChangeFont := FontChange;
end;
wenn ich den Button "Landesschrift" (linkes Bild im vorherigen Post) drücke, wird ein Event ausgelöst,
Code:
MyFont := TMBFontFMX.Create;
MyFont.FontName := MainForm.Vocabulary[cBxLanguages.ItemIndex].LanguagePack.Lang1FontName;
MyFont.FontSize := StrToInt(MainForm.Vocabulary[cBxLanguages.ItemIndex].LanguagePack.Lang1FontSize);
MyFont.FontStyle := MBTools.ReturnFontStyle(StrToInt(MainForm.Vocabulary[cBxLanguages.ItemIndex].LanguagePack.Lang1FontStyle));
MyFont.FontColor := StrToInt64(MainForm.Vocabulary[cBxLanguages.ItemIndex].LanguagePack.Lang1FontColor);
if Assigned(onWantToChangeFont) then onWantToChangeFont(Sender, cBxLanguages.ItemIndex, 1, hlp, MyFont);
MyFont.Free;
Der wiederum ruft dann den "Dialog" (rechtes Bild)
Code:
Procedure TSettingsFrm.CallChangeFontFrame(Sender: TObject; Language, Track : Integer; Value : String; Font: TMBFontFMX);
begin
FontDialogFrame.Parent := TC;
FontDialogFrame.fFontColor := Font.FontColor;
FontDialogFrame.Fontname := Font.FontName;
FontDialogFrame.FontSize := Font.FontSize;
FontDialogFrame.FontStyle := Font.FontStyle;
FontDialogFrame.Example := Value;
FontDialogFrame.LanguageNum := Language;
FontDialogFrame.FontNum := Track;
FontDialogFrame.ShowFrame;
end;
Der wiederum sollte dann eigentlich das ausführen, was wir da vorher gemacht haben.
Code:
procedure TFontDialogFrame.ExamplePanelEvenPaint(Sender: TObject; Canvas: TCanvas);
Var aRect : TRectF;
begin
aRect := TPaintBox (Sender).BoundsRect;
with TPaintBox (Sender).Canvas Do
begin
BeginScene;
Fill.Color := MainForm.EvenRowColor;
FillRect(Arect, 1,1, AllCorners,1);
Font.Family := Fontname;
Font.Style := FontStyle;
Font.Size := FontSize;
Fill.Color := FontColor;
FillText (ARect, fExample, True, 1, [], TTextAlign.Center, TTextAlign.Center);
EndScene;
end;
end;
Nachdem die Hintergrundfarben ja stimmen und alle anderen Daten auch korrekt ankommen, wundere ich mich doch, warum keine der Komponenten reagiert.
bzw. die Anzeige reagiert dann, wenn ich das mache - also auskommentiere
Code:
// Font.Family := Fontname;
// Font.Style := FontStyle;
// Font.Size := FontSize;
aber dann zeigt es mir natürlich keinen Font mehr korrekt an.
ansonsten ist das Ergebnis:
Versuch 1: Starte ich neu und stelle gleich "Französisch" ein, kommt nix. Wechsle ich auf "Deutsch" wird es angezeigt.
Versuch 2: Starte ich neu und stelle gleich "Deutsch" ein, wird das angezeigt. Wechsle ich auf "Französisch" wird es nicht angezeigt. wieder zurück auf "Deutsch" - funktioniert.