AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Alle Eigenschaften einer Klasse herausfinden
Thema durchsuchen
Ansicht
Themen-Optionen

Alle Eigenschaften einer Klasse herausfinden

Ein Thema von changlee · begonnen am 16. Okt 2008 · letzter Beitrag vom 17. Okt 2008
Antwort Antwort
changlee
(Gast)

n/a Beiträge
 
#1

Alle Eigenschaften einer Klasse herausfinden

  Alt 16. Okt 2008, 20:10
Hallo,

ich möchte eine Prozedur schreiben, die einen untypisierten Parameter erwartet und dann irgendwie auf Eigenschaften dieser Variable zugreift.
Also z.B. so eine:

Delphi-Quellcode:
procedure verarbeite(const Variable; Dateiname:string);
var i : integer;
begin
  for i:=0 to AnzahlEigenschaftenDerVariable do
    Memo1.Text := Memo1.Text + TString(Variable.Eigenschaften[i]);
end;
Die Variable "Variable" gehört zu einer Klasse, die ich selbst erstellt habe.

Geht sowas?

Ich konnte nichts entsprechendes finden.

Viele Grüße
Stefan
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.442 Beiträge
 
Delphi 12 Athens
 
#2

Re: Alle Eigenschaften einer Klasse herausfinden

  Alt 16. Okt 2008, 20:36
Was erwartest du denn an Eigenschaften für eine untypisierte Variable (z,B, Integer)? Wenn du die Variable auf von TPersistent abgeleitet einschränken kannst, gibt es vielleicht eine Möglichkeit über RTTI.
Uwe Raabe
  Mit Zitat antworten Zitat
changlee
(Gast)

n/a Beiträge
 
#3

Re: Alle Eigenschaften einer Klasse herausfinden

  Alt 16. Okt 2008, 20:46
Als variable möchte ich eigene Klassen übergeben.

also z.B.:

Delphi-Quellcode:

  type
    TMyClass = class
      .
      .
    private
      .
      .
    public
      property Eigensch_1:string read .. write ...;
      property Eigensch_2:integer read... write...;
    end;


// im Programm rufe ich dann auf:

Variable := TMyClass.create;
verarbeite(Variable,'c:\temp\test.dat');
Variable.free;
Die Prozedur 'verarbeite' soll aber verschiedene Variablentypen (also von unterschiedlichen selbst erstellten Klasse) verarbeiten können.
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#4

Re: Alle Eigenschaften einer Klasse herausfinden

  Alt 16. Okt 2008, 21:47
Benutze

eine gemeinsame Basisklase (in dieser kannst du die elemente definieren, auf die zugegriffen werden soll)

oder

Interfaces (same, aber schränkt nicht die vererbung ein)

oder

RTTI (flexibel, ermöglicht das zugreifen auf published properties jeder Klasse)

Von oben nach unten flexibler aber tendenziell aufwändiger.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.442 Beiträge
 
Delphi 12 Athens
 
#5

Re: Alle Eigenschaften einer Klasse herausfinden

  Alt 16. Okt 2008, 21:54
Hier mal ein Beispiel für RTTI:

Delphi-Quellcode:
type
  {$TYPEINFO ON}    // Ohne das geht's nicht!
  TMyClass = class
  private
    FEigensch_1: string;
    FEigensch_2: integer;
  public
    property Eigensch_2: integer read FEigensch_2 write FEigensch_2; // public properties gehen so auch nicht!
  published
    property Eigensch_1: string read FEigensch_1 write FEigensch_1; // dafür gehen aber published properties
  end;


procedure TForm1.verarbeite(Variable: TObject);
var
  N: Integer;
  i : integer;
  PropList: PPropList;
begin
  N := GetPropList(Variable, PropList);
  for i := 0 to N - 1 do begin
    Memo1.Lines.Add(PropList[I].Name);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Variable: TMyClass;
begin
  Variable := TMyClass.create;
  try
    verarbeite(Variable);
  finally
    Variable.Free;
  end;
end;
Uwe Raabe
  Mit Zitat antworten Zitat
changlee
(Gast)

n/a Beiträge
 
#6

Re: Alle Eigenschaften einer Klasse herausfinden

  Alt 17. Okt 2008, 18:49
Super, So funktioniert es.

Vielen Dank!

Gruß
Stefan.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:33 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz