Autor Beitrag
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Do 23.08.07 15:31 
Hallo,

ich habe hier ein interessantes Problem für das ich momentan keinen Lösungsansatz finde. Ich duchschleife alle Komponenten meines Formulars. Nun möchte ich bei jenen, die die Eigenschaft color besitzen eben diese Verändern.
Dabei drängen sich mir aber zwei Probleme auf:
  1. Wie finde ich heraus ob die Gefundene Komponente diese Eigenschaft besitzt? Eine Methode "ProperyExists('color')" gibt es soviel ich weiß nicht.
  2. Wie spreche ich diese Eigenschaft an denn (ActComp as ActCom.ClassName).color dürfte ja nicht funktionieren.


Eine große if tha else if{...} Anweisung um alle möglichen vorkommenden Typen seperat zu behandeln möchte ich vermeiden.

Gibt es einen Weg dieses zu erreichen?

Gruß
Klabautermann
Jakob_Ullmann
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1747
Erhaltene Danke: 15

Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
BeitragVerfasst: Do 23.08.07 15:46 
Überprüfe doch mal, welche Vorfahrtypen Color besitzen und schreibe:
ausblenden Delphi-Quelltext
1:
if Sender as TGraphicControl then ...					

und so weiter. Ich habe es nicht probiert, aber das wäre eigentlich möglich.
Klabautermann Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Do 23.08.07 15:53 
Hallo,

das bringt leider so nichts da TGraphicControl die Eigenschaft color von seinem Vorfahren TControl als protected erbt. Ich also nicht auf diese Eigenschaft zugreifen kann :(.

Gruß
Klabautermann
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Do 23.08.07 16:47 
Wenn ich richtig sehe, könnte das über RTTI gehen. Schau mal bei diesem Link unter dem Abschnitt "Common properties with no common ancestor"

Wenn man das umschreibt, kann man das so machen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure ColorThem(Comps: array of TComponent);
var
  Loop: Integer;
  PropInfo: PPropInfo;
begin
  for Loop := Low(Comps) to High(Comps) do
  begin
    { Get info record for Enabled property }
    PropInfo := GetPropInfo(Comps[Loop].ClassInfo, 'Color');
    { If property exists, set value to False }
    if Assigned(PropInfo) then
      SetOrdProp(Comps[Loop], PropInfo, Longint(clGreen));
  end;
end;

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".