Color von Frame

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
wennerer
Beiträge: 294
Registriert: Di 19. Mai 2015, 20:05
OS, Lazarus, FPC: Linux Mint 20 Cinnamon, Lazarus Stable 2.0.10 r63673M FPC 3.2.0
CPU-Target: x86_64-linux-gtk2

Color von Frame

Beitrag von wennerer »

Hallo zusammen,
ich verwende folgenden Code unter Linux um einen weißen Frame auf einer Form zu erzeugen:

Code: Alles auswählen

procedure TForm1.FormCreate(Sender: TObject);
begin
 Frame    := TFrame.Create(self);
 Frame.Parent := self;
 Frame.Color:= clWhite;
 Frame.SetBounds(20,20,120,120);
end;  
Dies funktioniert unter Linux und auch crosskompiliert unter Wine ohne Probleme. Verwende ich es in einem nativen Windows (habe Win10 und XP getestet) ist von dem Frame nichts zusehen. Ich glaube nicht das ich der Erste bin der einen farbigen Frame unter Windows erzeugen möchte, deshalb denke ich das ich da irgendwas in meinem Code verändern muss. Aber was?
Viele Grüße
Bernd

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 4591
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Niederösterreich
Kontaktdaten:

Re: Color von Frame

Beitrag von af0815 »

Ich arbeite sehr viel Cross (Win->Linux) und habe dabei festgestellt, das die Widgetsets unterschiedlich reagieren. Das ist das erste (Probier mal einen Standdard Button auf allen Widgetsets einzufärben :-) ).

Das nächste, eine Frame ist genaugenommen ein Container für Visuelle Objekte, die woanders eingeblendet werden. Damit ist das Frame selbst für mich kein stabiles visuelles Objekt selbst. Ich lege für solche Effekte immer ein Panel oder Image darauf, um genau solche Effekte zu vermeiden. Grundlegend haben alle visuellen Objekte die nativ im Widgetset sind die Eigenschaften des Widgetsets. Und die können Unterschiedlich sein. Lazarus versucht das nur vor dir zu verstecken. Wenn man visuelle Objekte verwendet die nicht nativ im Widgetset sind und daher von Lazarus gezeichnet werden, so ist die Sache einfacher, die verhalten sich überall gleich.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

wp_xyz
Beiträge: 3686
Registriert: Fr 8. Apr 2011, 09:01

Re: Color von Frame

Beitrag von wp_xyz »

wennerer hat geschrieben:
Do 25. Mär 2021, 20:41
ich verwende folgenden Code unter Linux um einen weißen Frame auf einer Form zu erzeugen
Warum? Mit der Verwendung von expliziten Farben (weiß = clWhite) würde ich sehr vorsichtig sein. Irgendwann springst du auf den DarkMode-Zug auf, und dann wird die weiße Fläche in der dunklen Umgebung zum Fremdkörper.

Benutzeravatar
Aidex
Beiträge: 24
Registriert: Do 24. Sep 2020, 07:02
OS, Lazarus, FPC: Win10 64bit, Laz v2.0.10
CPU-Target: AMD64

Re: Color von Frame

Beitrag von Aidex »

Mit der Frame-Farbe ärgere ich mich auch immer rum. Es funktioniert unter Windows nicht mal, wenn man eine eigene Farbe definiert, z.B. $F0F0F0 o.ä.
Da ich aber glaube, mich zu erinnern, dass es in Delphi funktioniert, scheint es ein Lazarus-Bug zu sein. Kann das jemand bestätigen?

wennerer
Beiträge: 294
Registriert: Di 19. Mai 2015, 20:05
OS, Lazarus, FPC: Linux Mint 20 Cinnamon, Lazarus Stable 2.0.10 r63673M FPC 3.2.0
CPU-Target: x86_64-linux-gtk2

Re: Color von Frame

Beitrag von wennerer »

Vielen Dank für eure Antworten!

@af0815
Dann werde ich mich wohl um entscheiden und eine andere Komponente wählen die die von dir beschriebenen Eigenschaften mitbringt.
@wp_xyz
Die Systemfarben habe ich mittlerweile schon mit auf dem Schirm (werde deinen Rat auf jeden Fall beherzigen). Bräuchte aber auch nicht clWhite sein, soll nur eine andere Farbe wie die Form haben.
@aidex
Habe extra nochmal nachgesehen, in meinem Delphi 3 gab es noch gar keine Frames. Ob es ein Bug ist kann ich jedoch nicht sagen. Es verhält sich zwar nicht so wie ich es gerne hätte, aber das muss noch lange nichts heißen :D
Da es bei dir aber auch nicht geht scheint in meinem Code zumindest nichts falsch zu sein.

Viele Grüße
Bernd

Soner
Beiträge: 435
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: Color von Frame

Beitrag von Soner »

Eigentlich ist das ein Fehler und man sollte es als bug-report melden.
Wenn man ParentColor auf false setzt, dann sollte die Farbe veränderbar sein, auch unter Windows.

Michl
Beiträge: 2405
Registriert: Di 19. Jun 2012, 12:54

Re: Color von Frame

Beitrag von Michl »

Aidex hat geschrieben:
Fr 26. Mär 2021, 06:10
scheint es ein Lazarus-Bug zu sein. Kann das jemand bestätigen?
Ja kann ich bestätigen. Unter Windows 7 mit klassischen Theme wird die Framefarbe gesetzt, wenn ich ein Aero Theme nutze, dann nicht.

[Edit]
Es ist bereits als Bug gemeldet https://bugs.freepascal.org/view.php?id=35229

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

wennerer
Beiträge: 294
Registriert: Di 19. Mai 2015, 20:05
OS, Lazarus, FPC: Linux Mint 20 Cinnamon, Lazarus Stable 2.0.10 r63673M FPC 3.2.0
CPU-Target: x86_64-linux-gtk2

Re: Color von Frame

Beitrag von wennerer »

Danke für die Info!
Viele Grüße
Bernd

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 4591
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Niederösterreich
Kontaktdaten:

Re: Color von Frame

Beitrag von af0815 »

Dort sollte man sich den Komentar von Bart ansehen. Dann sind wir wieder dort, woch ich meine Bemerkungen dazu abgegeben habe.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Michl
Beiträge: 2405
Registriert: Di 19. Jun 2012, 12:54

Re: Color von Frame

Beitrag von Michl »

Das Problem ist jetzt in Lazarus Trunk behoben. Ich habe den gleichen Code genommen, wie Ondrej, der ein ähnliches Problem mit der TGroupBox behoben hat.

Wenn man die Farbe ändern will, muss man zusätzlich ParentBackground auf False setzen. Siehe https://wiki.freepascal.org/Lazarus_2.2 ... CL_Changes

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

wp_xyz
Beiträge: 3686
Registriert: Fr 8. Apr 2011, 09:01

Re: Color von Frame

Beitrag von wp_xyz »

Michl hat geschrieben:
Sa 27. Mär 2021, 13:45
Wenn man die Farbe ändern will, muss man zusätzlich ParentBackground auf False setzen.
Hab' das jetzt nicht ausprobiert, aber normalerweise ist das anders herum: Man ändert die Farbe, und dabei sprint ParentBackground auf False. Das Henne-Ei-Problem...

wennerer
Beiträge: 294
Registriert: Di 19. Mai 2015, 20:05
OS, Lazarus, FPC: Linux Mint 20 Cinnamon, Lazarus Stable 2.0.10 r63673M FPC 3.2.0
CPU-Target: x86_64-linux-gtk2

Re: Color von Frame

Beitrag von wennerer »

Von meiner Seite ein herzliches Danke für deine Arbeit!
Viele Grüße
Bernd

Michl
Beiträge: 2405
Registriert: Di 19. Jun 2012, 12:54

Re: Color von Frame

Beitrag von Michl »

wennerer hat geschrieben:
So 28. Mär 2021, 10:33
Von meiner Seite ein herzliches Danke für deine Arbeit!
Danke fürs Feedback!
wp_xyz hat geschrieben:
Sa 27. Mär 2021, 16:18
Hab' das jetzt nicht ausprobiert, aber normalerweise ist das anders herum: Man ändert die Farbe, und dabei sprint ParentBackground auf False.
Ja da hast du Recht. Werde es anpassen.

[Edit]
Habe es geändert.

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

Antworten