Hallo,
ich muss den Thread nocheinmal aufgreifen:
ich möchte nun unabhängig vom Komponententyp prüfen, ob dieser die Eigenschaft "color" besitzt und wenn, diese dann prüfen, ob diese einen bestimmten Farbwert hat. Hintergrund: Ich möchte zur Laufzeit die "Grundfarbe" meiner Anwednung ändern. Hierzu wollte ich alle Komponenten durchgehen und prüfen, ob diese clbtnface als Farbwert haben. Wenn ja, soll dieser entsprechend geändert werden.
Meine Ansätze bisher sind:
Delphi-Quellcode:
Procedure set_color(form:TForm);
var i:integer;
PropInfo: PPropInfo;
test:string;
Begin
for i := 0 to form.ComponentCount - 1 do
Begin
PropInfo := GetPropInfo((form.Components [i]).ClassInfo, 'color');
if Assigned(PropInfo) then
MySetPropertyColor((form.Components [i]),'color',clred);
end //for
end;
procedure MySetPropertyColor(Component: TComponent; const PropName: String; const Value: integer);
var
PropInfo: PPropInfo;
begin
if (Component <> nil) then
begin
PropInfo := GetPropInfo(Component.ClassInfo, PropName);
if (PropInfo <> nil) then
begin
if (PropInfo^.PropType^.Kind in [tkInteger]) then
SetordProp(Component, PropInfo, Value);
end;
end;
end;
Leider funktioniert diese Version nicht mit allen Komponenten der Form, sodass z.B PagesControls, Panels, Buttons usw. nicht berücksichtigt werden. Labels und Edits hingegebn werden berücksichtigt. Auch ist mir nicht ganz klar, wie ich neben dem Vorhandensein auch den Wert der Eigenschaft abfragen kann. Die Anpassung sollte hierbei in der set_color erfolgen.
Vielen Dank für jeden Hinweis...