Problem z TypeInfo.IsPublishedProp

0

Witam serdecznie pisze sobie funkcje ktora wyszukuje komponent potem jego wlasciwosc i wstawia np nazwe z pliku cos podobnego do tego:
http://4programmers.net/Delphi/Gotowce/Obs%C5%82uga_wielu_j%C4%99zyk%C3%B3w
Niestety problem jest w tym miejscu:

var
ts:TStringList;
o:TObject;

if typinfo.IsPublishedProp(o,ts[ts.count-1]) then //jesli wlasciwosc istnieje
     typinfo.SetPropValue(o,ts[ts.count-1],PValue); //ustaw wlasciwosc

Wszystko dziala jesli chodzi np o Label.caption problem jest gdy dochodzi do np RadioGroup.items[0] bo items[0] nie jest property wg tej funkcji moglby mi ktos z tym pomoc ??

0

nie chce mi się sprawdzać, ale tu coś powinno być - w końcu Items to obiekt a nie typ prosty

0

Misiekd racja chcialem to zrobic w ten sposob

SetObjectProp(TargetComp, Properties[i],
            GetObjectProp(SourceComp, Properties[i]));

ale to mi nie podmienia nazwy tylko kopiuje wlasciwosci

Nie mniej jednak przy uzyciu LabelEdit przy przekazaniu obiektu jako LabelEdit.Sublabel to dziala i caption na labelu sie zmienia poprawnie niestety przy itemach subitem nie dziala

0
procedure TForm1.btn1Click(Sender: TObject);
var
  o: TObject;
begin
  if IsPublishedProp(rg1, 'Items') then
  begin
    o := GetObjectProp(rg1, 'Items');
    if o <> nil then
      (o as TStrings)[0] := 'xxx';
  end;
end;

zmiana 0-ego elementu. rg1 to TRadioGroup. A mówiłem poczytaj :p

tu masz dużo przykładów jak w tym grzebać.

Ogólnie to musisz sprawdzić typ properta i jeśli jest to klasa to pobrać jaka to klasa i potem pobrać sam obiekt i odwołujesz się do niego rzutując go na pobrany wcześniej typ klasy. Trochę pisania jest bo praktycznie każda klasa ma inne metody i właściwości, no ale najczęściej jest to TStrings więc nie powinno być tak źle :)

0

Wielkie dzieki Misiekd zrobilem to tak:

      
if typinfo.IsPublishedProp(o,ts[ts.count-1]) then //jesli wlasciwosc istnieje
  if ts[ts.count-1] = 'Items' then
  begin
    items := typinfo.GetDynArrayProp(o,ts[ts.count-1]);
    items.DelimitedText := PValue ;
  end
  else
    typinfo.SetPropValue(o,ts[ts.count-1],PValue); //ustaw wlasciwosc

Bro dla Ciebie :)

PS.
W pliku wtedy jest tak:
Form1|RadioGroup1|Caption=Jakas nazwa|Items=Wszystkie,Tylko nowsze

1 użytkowników online, w tym zalogowanych: 0, gości: 1