AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Verständnisprobleme mit FMX

Ein Thema von Ookami · begonnen am 6. Mai 2015 · letzter Beitrag vom 10. Mai 2015
Antwort Antwort
Benutzerbild von Ookami
Ookami

Registriert seit: 20. Nov 2009
Ort: Baden Württemberg
77 Beiträge
 
Delphi 2009 Architect
 
#1

AW: Verständnisprobleme mit FMX

  Alt 7. Mai 2015, 12:47
Hallo Harry,

ich hab das heute Morgen mal probiert. Da war aber nicht der von dir erwähnte Button drin.
Wenn's nicht zuviel verlangt ist, sei doch so nett und häng das bitte noch mal dran.

Ausgehend von dem was ich hatte und hab selber noch mal getestet. Das Resultat ist aber bei mir dasselbe.
Wolfgang
Grüße und Danke
Wolfgang
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.558 Beiträge
 
Delphi 12 Athens
 
#2

AW: Verständnisprobleme mit FMX

  Alt 7. Mai 2015, 16:18
Oh, da hatte ich die letzten Änderungen wohl noch nicht gespeichert.

Hier anliegend jetzt eine Version, wo man Font und Size noch auswählen kann und dann per Klick auf den Button die Änderung ansehen kann. Das funktioniert immer und nicht nur einmal.
Angehängte Grafiken
Dateityp: jpg TTextRuntime.jpg (46,1 KB, 20x aufgerufen)
Angehängte Dateien
Dateityp: zip TextundFarbe.zip (29,0 KB, 11x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Ookami
Ookami

Registriert seit: 20. Nov 2009
Ort: Baden Württemberg
77 Beiträge
 
Delphi 2009 Architect
 
#3

AW: Verständnisprobleme mit FMX

  Alt 7. Mai 2015, 16:46
Hallo Harry,

grüß dich und vielen, vielen Dank.

Ich bin mir noch nicht ganz sicher, bin aber dran es zu verstehen

Code:
  with PaintBox1.Canvas do
    begin
         BeginScene();

         Stroke.Kind:= tBrushKind.Solid;
         Fill.Color := TAlphaColorRec.Yellow;
         FillRect(PaintBox1.BoundsRect, 1,1, AllCorners, 1);

         [Font.Family := ComboBox1.Items[combobox1.ItemIndex];
         Font.Size := SpinBox1.Value;
         Font.Style := fFontStyle;
         Fill.Color := FontColor;

         FillText(PaintBox1.BoundsRect, 'Test', True, 1, [], TTextAlign.Center, TTextAlign.Center);

         EndScene;
    end;
ich denke, mein Fehler war wie folgt:
ich habe nicht immer eine Aktion komplett abgeschlossen sondern am Anfang alles zu einzustellen.
Fill.Color := TAlphaColorRec.Yellow;
FillRect(PaintBox1.BoundsRect, 1,1, AllCorners, 1);

Anhand deines Codes aber sehe ich, dass ich bei (FillRect / FillText / usw... jeweils Werte zuweisen, dann die Aktion ausführen muss.
Wolfgang
Grüße und Danke
Wolfgang
  Mit Zitat antworten Zitat
Benutzerbild von Ookami
Ookami

Registriert seit: 20. Nov 2009
Ort: Baden Württemberg
77 Beiträge
 
Delphi 2009 Architect
 
#4

AW: Verständnisprobleme mit FMX

  Alt 7. Mai 2015, 17:44
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.
Angehängte Grafiken
Dateityp: jpg Schrift.jpg (156,4 KB, 35x aufgerufen)
Wolfgang
Grüße und Danke
Wolfgang
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.558 Beiträge
 
Delphi 12 Athens
 
#5

AW: Verständnisprobleme mit FMX

  Alt 7. Mai 2015, 18:09
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:
with PaintBox1.Canvas do
  begin
    BeginScene();
Der absolute Bezug auf PaintBox1 kann leicht zur Falle werden.

Daher solltest Du z.B.

Delphi-Quellcode:
with TPaintBox (Sender).Canvas do
  begin
    BeginScene();
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).

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.
  Mit Zitat antworten Zitat
Benutzerbild von Ookami
Ookami

Registriert seit: 20. Nov 2009
Ort: Baden Württemberg
77 Beiträge
 
Delphi 2009 Architect
 
#6

AW: Verständnisprobleme mit FMX

  Alt 7. Mai 2015, 18:43
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.
Wolfgang
Grüße und Danke
Wolfgang

Geändert von Ookami ( 7. Mai 2015 um 18:49 Uhr) Grund: war ein bisschen konfus
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.558 Beiträge
 
Delphi 12 Athens
 
#7

AW: Verständnisprobleme mit FMX

  Alt 7. Mai 2015, 19:16
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.
Angehängte Grafiken
Dateityp: jpg TTextRuntime.jpg (62,0 KB, 16x aufgerufen)
Angehängte Dateien
Dateityp: zip TextundFarbe.zip (29,9 KB, 5x aufgerufen)
  Mit Zitat antworten Zitat
Antwort Antwort

 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 20:55 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz