Autor Beitrag
FXMaveric
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Di 22.06.10 16:04 
Hallo,

gibt es eine Möglichkeit (evtl über RTTI?) einen "KlassenTyp" in eine Variable zu verfrachten?!

Beispiel:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
Type 

  TMyClass =class()
  End;

  TMyClass2 =class(TMyClass )
  End;

  TMyClass3 = class(TMyClass )
  End;

...
Var
  V : TYP_X;
  M : TMyClass;

Begin
  V := TMyClass2;
  M := V.Create;

  ...
  V := TMyClass3;
  M := V.Create;
End;

Ziel soll eigentlich sein, das die "KlassenTypen" in einer Art Nachschlagetabelle stehen, in welcher ich den zutreffenden Typ raussuchen will.

Har jemand eine Idee? Ich meine ich hätte soetwas in der Art schon mal gesehen...

Gruß
FXM

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Di 22.06.10 18:00 
in der Art?
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
unit Unit4;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type


  TMyClass =class
  End;

  TMyClass2 =class(TMyClass )
  public
  Procedure Test;
  End;

  TMyClass3 = class(TMyClass )
  Procedure Test;
  End;


  TForm4 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form4: TForm4;

implementation

{$R *.dfm}

procedure TForm4.Button1Click(Sender: TObject);
Var
  V : TClass;
  M : TObject;
begin

Begin

  V := TMyClass2;
  M := V.Create;
  TMyClass2(M).teSt;


  V := TMyClass3;
  M := V.Create;
  TMyClass3(M).teSt;

End;

end;

{ TMyClass2 }



procedure TMyClass2.Test;
begin
  Showmessage('MyClass2');
end;

{ TMyClass3 }

procedure TMyClass3.Test;
begin
   Showmessage('MyClass3');
end;

end.
FXMaveric Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Di 22.06.10 18:44 
Hallo,

machmal sieht man den Code vor lauter Typecasts nicht ;-)
Genau soweit war ich schon.
Bin nur auf eine, duch einen falschen Cast ausgelöste, Fehlermeldung reingefallen und hab den Weg aufgegeben. :-)
Besten Dank!

Gruß
FXM
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Mi 23.06.10 09:42 
ohne Typecasts geht es auch:
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
unit Variable_KLASSEN_Spielereien;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, DB, ADODB;

type
  TmyClassClass = Class of TMyClass;
  TMyClass =Class
  Procedure initialize;virtual;
  constructor Create;virtual;
  End;

  TMyClass2 =class(TMyClass )
  Procedure initialize;override;
  private
  f:Integer;
  public
  Procedure Test;
  constructor Create;override;
  End;

  TMyClass3 = class(TMyClass )
  Procedure initialize;override;
  private
  f:Integer;
  public
  Procedure Test;

  End;


  TForm4 = class(TForm)
    ADOConnection1: TADOConnection;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form4: TForm4;

implementation

{$R *.dfm}

procedure TForm4.Button1Click(Sender: TObject);
Var
  V : TmyClassClass;
  M : TMyClass;
begin


  V := TMyClass2;
  M := V.Create;
  M.initialize;
  //TMyClass2(M).teSt;


  V := TMyClass3;
  M := V.Create;
  M.initialize;
 // TMyClass3(M).teSt;

End;

{ TmyClass2 }



{ TMyClass2 }

constructor TMyClass2.Create;
begin
  Showmessage('ssda'+Classname) ;
end;

procedure TMyClass2.initialize;
begin
  inherited;
  Showmessage(Classname);
end;

procedure TMyClass2.Test;
begin
  Showmessage(Classname)
end;

{ TMyClass3 }

procedure TMyClass3.initialize;
begin
  inherited;
  Showmessage(Classname);
end;

procedure TMyClass3.Test;
begin
  Showmessage(Classname)

end;

{ TMyClass }

constructor TMyClass.Create;
begin
//
end;

procedure TMyClass.initialize;
begin
//
end;

end.