AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Verständnisprobleme mit FMX

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

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

AW: Verständnisprobleme mit FMX

  Alt 6. Mai 2015, 22:20
OK.

TText ist direkt von TControl abgeleitet und hat als Komponente keine (veröffentlichte) Hintergrundeigenschaft, insofern kannst Du da nirgendwo etwas zur Desingn-Time oder Runtime einstellen. Insofern bietet es sich an, hier das Onpaint-Event zu nehmen, dann kannst Du die Komponente selber und abweichend von dem verwendeten Style zeichnen (was Du ja wolltest, wenn ich Dich richtig verstanden habe):

Delphi-Quellcode:
procedure TForm10.Text1Paint(Sender: TObject; Canvas: TCanvas;
  const ARect: TRectF);
begin
  canvas.BeginScene;
  canvas.Fill.Color := TAlphaColorRec.Yellow;
  canvas.FillRect(Arect, 1,1, AllCorners,1);
  canvas.Fill.Color := TAlphaColorRec.Black;
  canvas.FillText (ARect, TText (Sender).Text, True, 1, [], TTextAlign.Center, TTextAlign.Center);
  canvas.EndScene;
end;
Aber bei FireMonkey gilt der Spruch "Viele Wege führen nach Rom" ganz besonders. Hier sind meistens mehrere Varianten an Lösungen möglich.

So könnte man auch das TText-Element in ein TRectangle packen und dann die Hintergrundfarbe des Rectangles zur Laufzeit (bzw. auch vorher schon zur Designzeit) manipulieren:

Delphi-Quellcode:
procedure TForm10.FormCreate(Sender: TObject);
begin
  Rectangle1.Fill.Color := TAlphaColorRec.Lime;
  Rectangle1.Fill.Kind := TBrushKind.solid;
end;
In den anliegenden Screenshots siehst Du zur Designzeit oben nur die TText-Komponente, unten eine TText-Komponente in einem TRectangle. Zur Laufzeit haben beide eine andere Farbe, auf unterschiedlichen Wegen gelöst.

[Edit: Noch ein Hinweis: Wenn man den Rahmen von TRectangle nicht haben will, muss man unter Stroke,Thickness den Wert von 1 auf 0 setzen.]
Angehängte Grafiken
Dateityp: jpg TTextDesign.jpg (56,9 KB, 32x aufgerufen)
Dateityp: jpg TTextRuntime.jpg (32,4 KB, 36x aufgerufen)

Geändert von Harry Stahl ( 6. Mai 2015 um 22:28 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Ookami
Ookami

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

AW: Verständnisprobleme mit FMX

  Alt 6. Mai 2015, 22:46
Hallo Harry,

erst mal danke, ich hab's jetzt noch ein bisschen anpassen müssen,

Code:
  canvas.BeginScene;
  canvas.Fill.Color := MainForm.EvenRowColor;
  canvas.FillRect(Arect, 1,1, AllCorners,1);
  Canvas.Font.Family := Fontname; (weil ich doch den Font anpassen muss)
  Canvas.Font.Style := FontStyle;
  Canvas.Font.Size  := FontSize;
  canvas.Fill.Color := FontColor;
  canvas.FillText (ARect, TText (Sender).Text, True, 1, [], TTextAlign.Center, TTextAlign.Center);
  canvas.EndScene;
und was soll ich sagen, es läuft ... zumindest bis ich die Fonteinstellungen wechsle.
dann bin ich wieder soweit wie bisher.
Für den Fall 1 läuft es, für Fall 2-6 nicht. Wieder zurück auf Fall 1 geht wieder.
Bei Fall 1..6 handelt es sich nur um verschiedene Texte, bzw. Font-Einstellungen.
Beispiel Fall 1: Text = 'Hallo Welt', Font=Arial, Size=24, Style=[], ... usw., eigentlich nichts dramatisches.


und gleich nochmal danke, in der Zwischenzeit hast du ja gleich nochmal geantwortet. jep, ein Teil des Fauxpas ist mir aufgefallen.
Der wirklich wichtige (canvas.Fill.Color := Color vor jedem Schritt der zeichnet aber nicht. Danke auch hierfür
Wolfgang
Grüße und Danke
Wolfgang
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

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

AW: Verständnisprobleme mit FMX

  Alt 7. Mai 2015, 00:06
Also ich habe hier in der Demo mal einen Button eingebaut, der nach Click die Fontfamily (AFName) ändert und dann die Paintbox neu zeichnet. Wird neu gezeichnet und mit dem neuen Font.

Habe das Demo hier mal als Zip angehängt, kannst ja mal vergleichen.
Angehängte Dateien
Dateityp: zip TTextFarbe.zip (28,0 KB, 8x aufgerufen)
  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, 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.561 Beiträge
 
Delphi 12 Athens
 
#5

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, 21x 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
 
#6

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
 
#7

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
Antwort Antwort

 

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 05:48 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