var n : Integer; PropList : TPropList; begin n := 0; GetPropList( Obj.ClassInfo, tkProperties + [ tkMethod ], @PropList ); while( (Nil <> PropList[ n ]) and (n < High(PropList)) ) do begin Items.Add( PropList[ n ].Name + \': \' + PropList[ n ].PropType^.Name ); Inc( n ); end; end;
Drop en listbox og lad dit objects onclick pege på listbox1.click så får du listet dine attributter. Det virker i hvertfald med en label og en checkbox som jeg lige tjekkede.
procedure TForm1.ListBox1Click(Sender: TObject);
var Count, i : integer; PropList : PPropList; begin ListBox1.Clear; Count := GetPropList(Sender.ClassInfo, tkProperties, nil); GetMem(PropList, Count*sizeof(PPropInfo)); try GetPropList(Sender.ClassInfo, tkProperties, PropList); for i := 0 to Count - 1 do ListBox1.Items.Add(PropList[i].Name); finally FreeMem(PropList, Count*sizeof(PPropInfo));
Stoney.. jeg laver lige et eksempel udfra din kode: Jeg har et klasseerklæring: TKunde = Class Private Navn: String; end;
Jeg vil gerne udskrive attributnavnet \"Navn\", og jeg ved ikke hvilket objekt jeg får udleveret.
procedure TForm1.Button1Click(Sender: TObject); var Count, i : integer; PropList : PPropList; begin ListBox1.Clear; Count := GetPropList(Kunde.ClassInfo, tkProperties, nil); /////Her går det galt GetMem(PropList, Count*sizeof(PPropInfo)); try GetPropList(Kunde.ClassInfo, tkProperties, PropList); for i := 0 to Count - 1 do ListBox1.Items.Add(PropList[i].Name); finally FreeMem(PropList, Count*sizeof(PPropInfo)); end; end;
Hankster >> Hvis du vil lave kode der kan bruge RTTI til at finde dine property, SKAL de være published ellers finder du dem ikke. Så hvis du bruger samme kode og flytter navn ned i Published så vil det virke
Som jeg skriver er det Published de skal ned under hvis du vil bruge RTTI, som det eks. du har fået gør. Bede om at få et COM object, så kan du bruge std. COM funktioner, og evt. lade delphi pakke det ind i en comp. ( import typelib )
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.