![]() |
Standardfarben für die laufende Software ändern
Hallo zusammen,
ich stehe vor folgendem Problem: Mein aktuelles Projekt hat jede Menge Eingabe- und Ausgabefelder (mehrere hundert) auf viele Formulare verteilt. Zur Unterscheidung der "Nur Lese"-Felder und der Eingabefelder habe ich die Systemfarben von Windows verwendet (Hintergrundfarbe = clWindow, Textfarbe Eingabe = clWindowText und Textfarbe Ausgabe = clGrayText). Je nach gewähltem Farbschema sind die Ausgabefelder jedoch kaum zu erkennen. Ich suche nun nach einer Möglichkeizt diese Farbe (clGrayText) zentral für die aktuelle Applikation zu ändern. Da clGrayText in der Graphics als Konstante definiert ist, ist ja nichts mit einfach überschreiben. Genauso verhält es sich ja mit jeder anderen Farbe der Standardpalette... Hat irgendwer 'ne Idee, wie man zur Laufzeit eine Farbe umdefinieren könnte? Die Zuweisung der Farbe über den Objektinspektor ist ja immer eine Konstante. Leider ist clGrayText auch eine Farbe, die nicht über "Eigenschaften von Anzeige", "Darstellung" direkt geändert werden kann. Diese ist irgendwo im aktuellen Windows-Thema verborgen... Bei Vista ist dies ja noch viel schlimmer, da hier auch z.B. die Farbe für clWindow nicht direkt geändert werden kann. Ich hoffe ich habe mein Problem verständlich dargestellt und bedanke mich schon mal für eure Antworten. Alex |
Re: Standardfarben für die laufende Software ändern
Meines Wissens gibt es Systemfarben und "normale" Farben. Normale Farben sind einfach 32-Bit-Werte, bei denen das oberste Byte den Wert Null hat und die anderen die Rot-, Grün- und Blauwerte. Wenn du also von Systemfarben auf solche Farben umsteigst, solltest du nicht mehr von den Systemeinstellungen abhängig sein.
|
Re: Standardfarben für die laufende Software ändern
Hai BigAl,
Du könntest dir eine Procedure schreiben der als Parameter eine TForm übergeben wird. In der Procedure läufst Du nun über alle Controlls. Wenn Du nun auf ein TEdit triffst kannst Du anhand bestimmter Bedingungen (z.B ReadOnly) eine Frabe setzten. Diese Procedure rufst Du nun im OnCreate (oder OnActivate) jeder Form auf und übergibst als Parameter den Namen der Form.
Delphi-Quellcode:
Wenn Du die Procedure SetEditColors() in eine eigene Unit auslagerst kannst Du sie im OnCreate jeder Form aufrufen.
procedure SetEditColors(const aForm: TForm);
const readOnlyColor = clRed; editColor = clBlue; var i: Integer; curControl: TControl; begin for i := 0 to aForm.ControlCount - 1 do // Durch alle Controls laufen begin curControl := aForm.Controls[i]; // Das "aktuelle" Control if (curControl is TEdit) then // ist ein Edit begin with (curControl as TEdit) do // aktuelles Control auf TEdit casten begin if (ReadOnly) then // Wenn ReadOnlay dann begin Color := readOnlyColor; end else // ansonsten das. begin Color := editColor; end; end; end; end; end; procedure TForm1.FormCreate(Sender: TObject); begin SetEditColors(self); // Form als Parameter end; |
Re: Standardfarben für die laufende Software ändern
Vielen Dank für eure schnellen Antworten. Ist im Prinzip aber alles nicht das was ich will. Meine Gesamten Formulare basieren zwar auf einem Basisformular aber das mit dem "Überpinseln" beispielsweise ist meiner Meinung nach nicht so sauber. Produziert jede Menge Code... Habe solche Konstrukte teilweise schon im Programm zur Aktivierung und Deaktivierung von Feldern welche aufgrund von Berechntigungen gesperrt oder freigegeben sind...
Da es sich bei der Applikation um Software handelt, welche auf jeweils einem Rechner permanent als einzige Software ausgeführt wird, werde ich wohl den Weg über "SetSysColor" gehen... Alex |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:42 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 by Thomas Breitkreuz