AW: Verständnisprobleme mit FMX
Liste der Anhänge anzeigen (Anzahl: 1)
So sorry, aber das Problem hat sich doch noch nicht gelöst.
Ich habe ein paar Bilder ausgeschnitten, die das Problem zeigen. Im kleineren linken Bildausschnitt stelle ich die Sprache per Combobox ein. Ein Event wird durch den Button "Landesschrift" ausgelöst. Der wiederum zeigt ein Frame (rechtes Bild, in dem die Einstellung der Sprache zu sehen sein soll. (Einstellung "Deutsch" funktioniert) Darunter habe ich die erwähnte Combobox auf "Englisch" eingestellt. Ich drücke wieder den Button "Landesschrift". Das Resultat (rechtes Bild) ist das Problem, von dem ich rede, also die omimösen Fälle die ich immer erwähne. Die ganzen Einstellungen kommen ganz korrekt an, die Darstellung in FillRect ist auch noch korrekt. Lediglich der Beispieltext der oben rechts angezeigt wird, wird eben nicht angezeigt. Beim Debuggen habe ich alle Informationen korrekt vorliegen. Die Anzeige des Textes aber wird verweigert. |
AW: Verständnisprobleme mit FMX
Es ist natürlich nicht ganz so leicht, ohne den konkreten Source-Code und die Implementation da den Fehler zu finden.
Aber eine wesentliche Information lieferst Du glaube ich erst jetzt, nämlich, dass Du den Code in Frames verwendest, also in mehreren Instanzen. Da ist es schlecht das so zu machen (bzw. es ist immer schlecht, das so zu machen):
Delphi-Quellcode:
Der absolute Bezug auf PaintBox1 kann leicht zur Falle werden.
with PaintBox1.Canvas do
begin BeginScene(); Daher solltest Du z.B.
Delphi-Quellcode:
verwenden, damit auch auf der richtigen Instanz gemalt wird. Wie gesagt, ob da ein Fehler auftaucht oder nicht, hängt von der konkreten Implementation ab (also z.B. ob die Implementation der Zeichenaktion im Frame erfolgte oder in der Form).
with TPaintBox (Sender).Canvas do
begin BeginScene(); Wenn Dir das nicht hilft, bliebe aus meiner Sicht nur ein isolierter Upload der Form hier in das Forum, so dass man sich das konkret ansehen kann. Sonst spekuliert man hier nur so rum.:wink: |
AW: Verständnisprobleme mit FMX
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:
Der wiederum ruft dann den "Dialog" (rechtes Bild)
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;
Code:
Der wiederum sollte dann eigentlich das ausführen, was wir da vorher gemacht haben.
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;
Code:
Nachdem die Hintergrundfarben ja stimmen und alle anderen Daten auch korrekt ankommen, wundere ich mich doch, warum keine der Komponenten reagiert.
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; bzw. die Anzeige reagiert dann, wenn ich das mache - also auskommentiere
Code:
aber dann zeigt es mir natürlich keinen Font mehr korrekt an.
// Font.Family := Fontname;
// Font.Style := FontStyle; // Font.Size := FontSize; 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. |
AW: Verständnisprobleme mit FMX
Liste der Anhänge anzeigen (Anzahl: 2)
Also, da Du 2 Frames auf dem Formular hast, hast Du ja auch 2 Instanzen von dem Frame. Da ist dann drauf zu achten, dass da jeweils dir richtigen Variablen der jeweiligen Instanz verwendet werden.
Habe also die PaintBox nun mal in ein Frame gelegt und davon dann 2 auf die Form gelegt. Wie Du im anliegenden Screenshot sehen kannst, werden in beiden Frames unterschiedliche Fontfamilys und Fontgrößen angezeigt. Anliegend auch das Code-Beispiel. |
AW: Verständnisprobleme mit FMX
Klar, du hast gewonnen. Natürlich sind des verschiedene Instanzen vom Typ TFrame.
Ich muss das jetzt einfach nochmal genau durchprüfen und das kann dauern. Werde jetzt an der Stelle erstmal schließen und mich an die Arbeit machen. Vielleicht komme ich über diesen Weg weiter. By the Way - Bist du zufällig der Buchautor Harry Stahl? ich bin da vor einigen Tagen bei Amazon auf ein paar Bücher gestoßen, die deinen Namen tragen. Bis jetzt aber erstmal noch ein großes Danke für deine Geduld und Hilfsbereitschaft. |
AW: Verständnisprobleme mit FMX
Zitat:
Zitat:
|
AW: Verständnisprobleme mit FMX
Hallo Harry,
würdest du Frames empfehlen ? Ich habe das vor vielen Jahren mal als super Feature gesehen und eingesetzt (unter VCL), leider gab es aber Probleme an allen Ecken und Kanten. Z.B. Bei Änderungen konnte einiges verloren gehen, und der ReUse in mehreren Projekten war schwierig. Seitdem habe ich es liegen gelassen. Ich bin mittlerweile auf dem Standpunkt das nicht alles RAD sein muss, und das man viele Funktionen besser in übersichtlichen, lesbaren Funktionen auslagert. ZB. Habe ich statt der Frames direkt Forms jeweils einmalig in Container geladen, ungefähr so:
Code:
Das funktionierte sehr gut unter VCL, und man behält die Übersicht und Kontrolle wenn die IDE mal abstürzt und nicht alles korrekt speichert.
LoadFormInContainer(FormNeu1, PanelTgt);
LoadFormInContainer(FormNeu2, TabSheetTgt); etc. Ich vermute mal das es unter Fmx ähnliches Verhalten geben sollte, habe es aber noch nicht ausprobiert. Rollo |
AW: Verständnisprobleme mit FMX
Das Einbinden von Forms in andere Forms / Container funktioniert ohne Probleme in FMX. Wenn die Programmlogik nicht unbedingt für Frames spricht, würde ich immer eine Form vorziehen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:59 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