![]() |
Re: Eigenschaften unterschiedlicher Objekte ändern
Hallo,
Zitat:
Du hast nur zwei Möglichkeiten: Entweder Du suchst Dir aus der Hilfe den gemeinsamen Vorfahren, der über die gewünschte Eigenschaft verfügt und hangelst Dich ggfls. durch entsprechende If-Kaskaden oder Du benutzt die von Bernhard Geyer beschriebene Methode. Bernhards Methode hat den Charme, dass Du sie genau einmal implementieren musst und dann sämtliche Komponenten damit "funktionieren" und bei Änderungen am Programm musst Du an die entsprechende Stelle mit den Eigenschaftszuweisungen nicht mehr ran. |
Re: Eigenschaften unterschiedlicher Objekte ändern
Hallo,
das vom Bernd ist doch gut: Auf den ersten blick vielleicht aufwendiger, aber dafür eine Universal-Lösung. Mfg Zitat:
|
Re: Eigenschaften unterschiedlicher Objekte ändern
Habe es jetzt so:
Delphi-Quellcode:
gelöst. Scheint mir nur irgendwie sehr "aufgebauscht". Die Methode von Bernhard werde ich mir heute nach der Arbeit mal anschauen... habe das Gefühl, dass das länger dauern wird :)
for i := 0 to Mainform.ComponentCount - 1 do
Begin if (Mainform.Components [i]).tag=1 then Begin if (Mainform.Components[i] is TEdit) then Begin TEdit(Mainform.Components[i]).Color :=cl3DLight; TEdit(Mainform.Components[i]).readonly :=true; end else if (Mainform.Components[i] is TMemo) then Begin TMemo(Mainform.Components[i]).Color :=cl3DLight; TMemo(Mainform.Components[i]).readonly :=true; end else if (Mainform.Components[i] is TListbox) then TMemo(Mainform.Components[i]).Color :=cl3DLight; end //if else Begin if (Mainform.Components[i] is TEdit) then Begin TEdit(Mainform.Components[i]).Color :=clwindow; TEdit(Mainform.Components[i]).readonly :=false; end else if (Mainform.Components[i] is TMemo) then Begin TMemo(Mainform.Components[i]).Color :=clwindow; TMemo(Mainform.Components[i]).readonly :=false; end else if (Mainform.Components[i] is TListbox) then TMemo(Mainform.Components[i]).Color :=clwindow; end //if end;//for MFG Steffen |
Re: Eigenschaften unterschiedlicher Objekte ändern
@Bernhard: Habe mir mal die typinfo angeschaut. Für mich scheint es , als könne man die Color-Property mit:
Delphi-Quellcode:
ändern. Leider bleibt der Aufruf bei mir funktionslos. Vielleicht hast du ja nen Tip, wo der Fehler liegt.
procedure MySetPropertyColor(Component: TComponent; const PropName: String; const Value: string);
var PropInfo: PPropInfo; begin if (Component <> nil) then begin PropInfo := GetPropInfo(Component.ClassInfo, PropName); if (PropInfo <> nil) then begin if (PropInfo^.PropType^.Kind in [tkEnumeration]) then SetSetProp(Component, PropInfo, Value); //Wäre das überhaupt die richtige Methode? end; end; end; //aufgerufen mit: MySetPropertyColor(edit1,'color','clred'); MFG Steffen |
Re: Eigenschaften unterschiedlicher Objekte ändern
Hier liegt doch keine Menge vor. Du musst auf tkInteger prüfen und dann mit SetOrdProp den Wert setzen.
|
Re: Eigenschaften unterschiedlicher Objekte ändern
So solle es gehen:
Delphi-Quellcode:
uses
TypInfo; procedure MySetPropertyColor(Instance: TComponent; const PropName: String; const Value: TColor); resourcestring SUnknownProperty = 'Eigenschaft %s existiert nicht.'; var PropInfo: PPropInfo; begin PropInfo := GetPropInfo(Instance, PropName); if PropInfo = NIL then begin raise EPropertyError.CreateResFmt(@SUnknownProperty, [PropName]); end; SetOrdProp(Instance, PropInfo, Value); end; procedure TForm1.Button1Click(Sender: TObject); begin MySetPropertyColor(Edit1,'Color',clred); end; |
Re: Eigenschaften unterschiedlicher Objekte ändern
Ja, vielen Dank. Hatte zwischenzeitlich den Hinweis von Apollonius umgesetzt, was dann ungefähr deinem Besipiel entspricht.
Ich verstehe nur den Unterschied zwischen SetOrdProd und SetSetProd nicht ganz. Gibt es zur Typinfo ne bessere Dokumentation, als die Delphi-Hilfe bereitstellt? Möchte es nicht nur blind übernehmen... Vielen Dank für eure Hilfe! MFG Steffen |
Re: Eigenschaften unterschiedlicher Objekte ändern
Die RTTI von Delphi ist sehr schlecht dokumentiert. Den Unterschied zwischen den Funktionen sagt hier schon der Name:
SetOrdProp = set ordinal property = ordinale (= Zahl-) Eigenschaft setzen SetSetProp = set set property = Mengen-Eigenschaft setzen |
Re: Eigenschaften unterschiedlicher Objekte ändern
Vielen Dank, wenn du nun noch ein Beispiel für eine Mengeneigenschaft für mich hast, bin ich schon glücklich....(könnte man z.B. Anchors als Mengeneigenschaft sehen?)
Nochmals danke!! MFG Steffen |
Re: Eigenschaften unterschiedlicher Objekte ändern
Ja, der Typ TAnchors ist ein klassischer Mengen-Typ.
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:02 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-2025 by Thomas Breitkreuz