AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Standardfarben für die laufende Software ändern
Thema durchsuchen
Ansicht
Themen-Optionen

Standardfarben für die laufende Software ändern

Ein Thema von BigAl · begonnen am 7. Sep 2008 · letzter Beitrag vom 7. Sep 2008
Antwort Antwort
BigAl

Registriert seit: 6. Sep 2008
Ort: Kehl
495 Beiträge
 
Delphi 12 Athens
 
#1

Standardfarben für die laufende Software ändern

  Alt 7. Sep 2008, 13:24
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
Man sollte nie so viel zu tun haben, dass man zum Nachdenken keine Zeit mehr hat. (G.C. Lichtenberg)
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Standardfarben für die laufende Software ändern

  Alt 7. Sep 2008, 13:35
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.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Standardfarben für die laufende Software ändern

  Alt 7. Sep 2008, 13:38
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.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
BigAl

Registriert seit: 6. Sep 2008
Ort: Kehl
495 Beiträge
 
Delphi 12 Athens
 
#4

Re: Standardfarben für die laufende Software ändern

  Alt 7. Sep 2008, 15:15
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
Man sollte nie so viel zu tun haben, dass man zum Nachdenken keine Zeit mehr hat. (G.C. Lichtenberg)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:10 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