Hintergrundfarbe von Form ermitteln

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
400kmh
Beiträge: 100
Registriert: Do 25. Mär 2010, 04:03

Hintergrundfarbe von Form ermitteln

Beitrag von 400kmh »

Hallo,

wie ermittelt man die Hintergrundfarbe der Form, die ja vom aktuell eingestellten Design des Betriebssystems abhängt? Ursprünglich wollte ich diese Farbe ändern, das scheint aber bei Windows nicht zu gehen, also möchte ich diese Farbe zumindest automatisiert herausfinden und gewisse andere Farbgebungen davon abhängig machen.

sstvmaster
Beiträge: 575
Registriert: Sa 22. Okt 2016, 23:12
OS, Lazarus, FPC: W10, L 2.2.6
CPU-Target: 32+64bit
Wohnort: Dresden

Re: Hintergrundfarbe von Form ermitteln

Beitrag von sstvmaster »

Hi,
400kmh hat geschrieben:...Ursprünglich wollte ich diese Farbe ändern, das scheint aber bei Windows nicht zu gehen...

Sicher geht das, für das Form geht das über Color:= +Farbe;

siehe http://wiki.freepascal.org/Colors
LG Maik

Windows 10,
- Lazarus 2.2.6 (stable) + fpc 3.2.2 (stable)
- Lazarus 2.2.7 (fixes) + fpc 3.3.1 (main/trunk)

400kmh
Beiträge: 100
Registriert: Do 25. Mär 2010, 04:03

Re: Hintergrundfarbe von Form ermitteln

Beitrag von 400kmh »

sstvmaster hat geschrieben:Hi,
400kmh hat geschrieben:...Ursprünglich wollte ich diese Farbe ändern, das scheint aber bei Windows nicht zu gehen...

Sicher geht das, für das Form geht das über Color:= +Farbe;

siehe http://wiki.freepascal.org/Colors

Allerdings ändert sich damit nicht die Farbe der anderen Elemente darauf. Also über Form1.Color ändert sich zwar die Form-Farbe aber nicht die Farbe z. B. einer Trackbar darauf, und die lässt sich auch nicht über Trackbar.Color ändern.

Aber auf der verlinkten Seite wird auch die Farbe clMenu aufgelistet. Die scheint genau das zu sein, was ich alternativ gesucht habe.

Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Hintergrundfarbe von Form ermitteln

Beitrag von Warf »

400kmh hat geschrieben:Allerdings ändert sich damit nicht die Farbe der anderen Elemente darauf. Also über Form1.Color ändert sich zwar die Form-Farbe aber nicht die Farbe z. B. einer Trackbar darauf, und die lässt sich auch nicht über Trackbar.Color ändern.

Aber auf der verlinkten Seite wird auch die Farbe clMenu aufgelistet. Die scheint genau das zu sein, was ich alternativ gesucht habe.


Da hast du praktisch 3 Möglichkeiten:
1. Setze von Controls den Hintergrund auf Transparent, dann haben die keine eigene Hintergrundfarbe
2. Setze ParentColor der Controls auf true, dann übernehmen sie Farbänderungen des Parents
3. Iteriere durch alle Subcontrols und änder die Farbe per Hand:

Code: Alles auswählen

procedure ChangeColor(Control: TControl; Color: TColor)
var I: Integer;
begin
  Control.Color = Color;
  if Control is TWinControl then
    for i:=0 to (Control as TWinControl).ControlCount -1 do
      ChangeColor((Control as TWinControl).Controls[i], color);
end;


Was es genau mit der Trackball auf sich hat weiß ich nicht, kann aber gut sein das es Controls gibt die sich eigen verhalten

sstvmaster
Beiträge: 575
Registriert: Sa 22. Okt 2016, 23:12
OS, Lazarus, FPC: W10, L 2.2.6
CPU-Target: 32+64bit
Wohnort: Dresden

Re: Hintergrundfarbe von Form ermitteln

Beitrag von sstvmaster »

Das scheint bei der Trackbar entweder so zu sein das sie die Farben nicht ändert, weil es unter anderen WidgetSets das nicht möglich ist oder es ist ein Bug.

Hab mal ein Beispiel angehängt, da kann man das schön sehen wenn man das Theme ändert. (Bei mir hier Windows 7)
Dateianhänge
ColorTest.zip
(3.96 KiB) 97-mal heruntergeladen
LG Maik

Windows 10,
- Lazarus 2.2.6 (stable) + fpc 3.2.2 (stable)
- Lazarus 2.2.7 (fixes) + fpc 3.3.1 (main/trunk)

Antworten