Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Standardfarben für die laufende Software ändern (https://www.delphipraxis.net/120232-standardfarben-fuer-die-laufende-software-aendern.html)

BigAl 7. Sep 2008 13:24


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

Apollonius 7. Sep 2008 13:35

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.

Sharky 7. Sep 2008 13:38

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:
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;
Wenn Du die Procedure SetEditColors() in eine eigene Unit auslagerst kannst Du sie im OnCreate jeder Form aufrufen.

BigAl 7. Sep 2008 15:15

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 15:46 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz