Wie ändert man die Hintergrundfarbe eines FMX Memos?

    Wie ändert man die Hintergrundfarbe eines FMX Memos?

    Hallo,

    ich habe ein Memo, welches nur anzeigen soll (wie ein Label) aber scrollbar ist bei großem Text.
    Zur Farbumstellung habe ich folgendes gefunden:

    Delphi-Code

    1. procedure TForm1.MemoApplyStyleLookup(Sender: TObject);
    2. var
    3. Obj: TFmxObject;
    4. Rectangle1: TRectangle;
    5. begin
    6. with Sender as TMemo do
    7. begin
    8. Obj := FindStyleResource('background');
    9. end;
    10. if Obj <> nil then
    11. begin
    12. TControl(Obj).Margins := TBounds.Create(TRectF.Create(-2, -2, -2, -2));
    13. Rectangle1 := TRectangle.Create(Obj);
    14. Obj.AddObject(Rectangle1);
    15. Rectangle1.Align := TAlignLayout.Client;
    16. Rectangle1.Fill.Color := TAlphaColors.Lightslategrey;
    17. Rectangle1.Stroke.Color := Rectangle1.Fill.Color;
    18. Rectangle1.HitTest := false;
    19. Rectangle1.SendToBack;
    20. end;
    21. end;


    Ich möchte aber anstelle einer fest definierten Farbe (TAlphaColors.Lightslategrey), abhängig von der aktuellen Hintergrundfarbe des Formulars den Hintergrund haben.
    Wie komme ich aber da ran?

    RAD Studio 10.1

    Ciao
    Stefan

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „DeddyH“ () aus folgendem Grund: Code- durch Delphi-Tags ([delphi][/delphi]) ersetzt, bitte künftig diese benutzen //MfG DeddyH

    Danke, das hilft schon "etwas" weiter, denn hier muss ich ja dann genau die Farbe auswählen die das Formular hat und das ist
    a) nicht hinzubekommen und
    b) sollte sich das ganze ja ja nach Einstellung im Device mit ändern!

    Ich möchte ein Memo (weil es Text, der zu groß ist, scrollbar macht) mit der Hintergrundfarbe des Formulars oder Panels auf dem es liegt.

    Vielleicht gibt es ja einen besseren Ansatz, so etwas zu erzeugen?

    Ciao
    Stefan
    Du kannst doch auch eine VerticalScrollbox nehmen, da ein Label drauf ( Align: None, AutoSize true, TextSettings: WordWrap true, Trimming: Word) und das dann befüllen. Man muss halt nur bei Größen- und Ausrichtungsänderungen selbst rechnen, um das Label richtig zu positionieren.

    [edit] Mit Align auf Top spart man sich dann auch noch die Rechnerei, fiel mir nachträglich ein. [/edit]
    10 Minuten Nachdenken ersparen oftmals 10 Stunden Fehlersuche.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „DeddyH“ ()

    Danke für den Tip, ein Label in Scrollbox bringt, wenn es sich vergrößert, leider die Box nicht dazu, Scrollbars zu zeigen :(

    Aber der Ansatz war gut, ich habe jetzt ein Panel in der Scrollbox (Align Top) und auf dem das Label (ebenfalls Align Top).
    Im OnResize des Labels wird Panel.Height := Label.Height gesetzt, dann erscheint wie gewünscht der Scrollbalken, drehe ich das handy auf Querformat verschwindet der sogar wieder wenn der Text dann passt :-))) weil auch da OnResize gefeuert wird.

    Ciao
    Stefan

    sko schrieb:

    Danke für den Tip, ein Label in Scrollbox bringt, wenn es sich vergrößert, leider die Box nicht dazu, Scrollbars zu zeigen :(

    Komisch, bei mir schon, es kommt aber auf die richtigen Einstellungen an.

    [edit]Funktioniert das hier?

    Delphi-Code

    1. unit ScrollableLabel;
    2. interface
    3. uses
    4. System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
    5. FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
    6. FMX.Controls.Presentation, FMX.StdCtrls, FMX.Layouts, FMX.Effects,
    7. FMX.Filter.Effects;
    8. type
    9. TfrmScrollTest = class(TForm)
    10. procedure FormCreate(Sender: TObject);
    11. private
    12. { Private-Deklarationen }
    13. FScrollBox: TVertScrollBox;
    14. FLabel: TLabel;
    15. public
    16. { Public-Deklarationen }
    17. end;
    18. var
    19. frmScrollTest: TfrmScrollTest;
    20. implementation
    21. {$R *.fmx}
    22. procedure TfrmScrollTest.FormCreate(Sender: TObject);
    23. var
    24. SL: TStringList;
    25. begin
    26. //Erzeugen der Scrollbox
    27. FScrollbox := TVertScrollBox.Create(self);
    28. FScrollBox.Parent := self;
    29. FScrollBox.Align := TAlignLayout.Client;
    30. //Erzeugen des Labels
    31. FLabel := TLabel.Create(self);
    32. FLabel.Parent := FScrollBox;
    33. FLabel.Align := TAlignLayout.Top;
    34. FLabel.AutoSize := true;
    35. FLabel.Margins.Left := 5;
    36. FLabel.Margins.Top := 5;
    37. FLabel.Margins.Right := 5;
    38. FLabel.Margins.Bottom := 5;
    39. FLabel.TextSettings.WordWrap := true;
    40. FLabel.TextSettings.Trimming := TTextTrimming.Word;
    41. //Laden eines langen Textes aus einer Datei
    42. SL := TStringList.Create;
    43. try
    44. SL.LoadFromFile('C:\Temp\LoremIpsum.txt');
    45. FLabel.Text := SL.Text;
    46. finally
    47. SL.Free;
    48. end;
    49. end;
    50. end.
    [/edit]
    10 Minuten Nachdenken ersparen oftmals 10 Stunden Fehlersuche.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „DeddyH“ ()