Desidero enumerare tutte le proprietà: private, protette, pubbliche, ecc. Desidero utilizzare le funzionalità incorporate e non utilizzare alcun codice di terze parti.Come si elencano tutte le proprietà in un oggetto e si ottengono i relativi valori?
6
A
risposta
5
Usa RTTI esteso come questo (quando ho provato il codice XE ho ottenuto eccezione sulla proprietà ComObject, così ho inserito prova - ad eccezione di blocco):
uses RTTI;
procedure TForm1.Button1Click(Sender: TObject);
var
C: TRttiContext;
T: TRttiType;
F: TRttiField;
P: TRttiProperty;
S: string;
begin
T:= C.GetType(TButton);
Memo1.Lines.Add('---- Fields -----');
for F in T.GetFields do begin
S:= F.ToString + ' : ' + F.GetValue(Button1).ToString;
Memo1.Lines.Add(S);
end;
Memo1.Lines.Add('---- Properties -----');
for P in T.GetProperties do begin
try
S:= P.ToString;
S:= S + ' : ' + P.GetValue(Button1).ToString;
Memo1.Lines.Add(S);
except
ShowMessage(S);
end;
end;
end;
7
risposta di Serg è buona, ma è meglio evitare eccezioni di saltare alcuni tipi:
uses
Rtti, TypInfo;
procedure TForm4.GetObjectProperties(AObject: TObject; AList: TStrings);
var
ctx: TRttiContext;
rType: TRttiType;
rProp: TRttiProperty;
AValue: TValue;
sVal: string;
const
SKIP_PROP_TYPES = [tkUnknown, tkInterface];
begin
if not Assigned(AObject) and not Assigned(AList) then
Exit;
ctx := TRttiContext.Create;
rType := ctx.GetType(AObject.ClassInfo);
for rProp in rType.GetProperties do
begin
if (rProp.IsReadable) and not (rProp.PropertyType.TypeKind in SKIP_PROP_TYPES) then
begin
AValue := rProp.GetValue(AObject);
if AValue.IsEmpty then
begin
sVal := 'nil';
end
else
begin
if AValue.Kind in [tkUString, tkString, tkWString, tkChar, tkWChar] then
sVal := QuotedStr(AValue.ToString)
else
sVal := AValue.ToString;
end;
AList.Add(rProp.Name + '=' + sVal);
end;
end;
end;
2
qui è un ottimo punto di partenza utilizzando le funzionalità avanzate di recente versione di Delphi:
Il seguente collegamento riguarda piuttosto la versione precedente (dalla D5 in poi). Sulla base delle TypInfo.pas unità, è limitato ma comunque istruttiva:
Problemi correlati
- 1. Come si elencano tutte le viste indicizzate in SQL Server?
- 2. Come si visualizzano automaticamente tutte le proprietà di una classe e i relativi valori in una stringa?
- 3. Come si ottengono i valori da tutte le colonne utilizzando ResultSet.getBinaryStream() in jdbc?
- 4. Come si ottengono le chiavi oggetto secondo uno schema?
- 5. Come si elencano le opzioni di un modello Leiningen?
- 6. Esiste un metodo .NET integrato per ottenere tutte le proprietà e i valori per un oggetto?
- 7. Come si elencano tutti i trigger in un database MySQL?
- 8. Come si ottengono le dimensioni di ImageRectangle in PictureBox?
- 9. Come si ottengono i figli di un widget in Qt?
- 10. Come si elencano solo le variabili create dall'utente in PowerShell?
- 11. Come si definiscono e si ottengono i messaggi basati sulla localizzazione in Spring MVC?
- 12. Come si elencano i metodi disponibili su un determinato oggetto o pacchetto in Perl?
- 13. Come si elencano tutte le tabelle in uno schema in Oracle SQL?
- 14. HDFS: come si elencano i file in modo ricorsivo?
- 15. Come si elencano le modalità secondarie attive in emacs?
- 16. Come si elencano tutti i processi figli in python?
- 17. Come si elencano TUTTI i pacchetti in Nuget
- 18. Come si ottengono i valori dai controlli dinamici in un controllo ListView sul postback?
- 19. Come si elencano i moduli inclusi in una classe Ruby?
- 20. Come si elencano i protocolli a cui è conforme un oggetto?
- 21. Best practice: come si elencano le dipendenze richieste nel setup.py?
- 22. utilizzando caratteri jolly quando si elencano le directory in python
- 23. si elencano i valori di opzione Seleziona con selenio e Python
- 24. Come si ottengono le credenziali (NetworkCredential) dell'utente attualmente connesso?
- 25. Chai si aspettano: una matrice per contenere un oggetto con almeno queste proprietà e valori
- 26. Come si ottiene l'elenco di tutte le stored procedure e i relativi parametri che iniziano con un determinato prefisso?
- 27. Come elencare tutte le proprietà di un oggetto PowerShell?
- 28. Come si calcola la correlazione tra tutte le colonne in un DataFrame e tutte le colonne in un altro DataFrame?
- 29. Osservazione dei valori chiave: come osservare tutte le proprietà di un oggetto?
- 30. Come si ottengono proprietà, operatori e valori da un predicato Espressione <Func <T, bool>>?
Con quale versione di Delphi stai lavorando? Enhanced RTTI è disponibile solo da Delphi 2010. Le versioni precedenti non saranno in grado di ottenere ciò: solo le proprietà pubblicate possono essere elencate. –
Stai chiedendo di ottenere i valori di tutte le proprietà. Il nuovo RTTI, disponibile in Delphi XE2, è in grado di farlo. Il link che ho postato come duplicato era un riferimento all'utilizzo di RTTI, in generale. Non c'era alcuna indicazione della versione Delphi che stavi usando. Da quando hai modificato la tua domanda, ho eliminato il mio duplicato. –
@DavidHeffernan, grazie per aver modificato bene le mie domande. – VibeeshanRC