Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Instance of object from class name DELPHI

[es] :: Pascal / Delphi / Kylix :: Instance of object from class name DELPHI

[ Pregleda: 1729 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

looping
none
none

Član broj: 324206
Poruke: 18
37.19.108.*



Profil

icon Instance of object from class name DELPHI22.07.2014. u 12:51 - pre 117 meseci
Pokusavam da kreiram objekat od klase, a da pri tome imam samo ime klase (string vrednost)
Kako da od imena klase kreiram objekat te klase u DELPHI-ju?
Pokusavam nesto slicno ovome:
Code:

var
  imeKlase : string;
  objKlase : TClass;

  objKlase := GetInstanceFromClassName(imeKlase);
 
Odgovor na temu

reiser

Član broj: 7895
Poruke: 2314



+102 Profil

icon Re: Instance of object from class name DELPHI22.07.2014. u 13:14 - pre 117 meseci
Mozes pomocu RTTI-ja, ovako:

Code:
function CreateClassFromName(const AClassName: String): TObject;
var
  c: TRttiContext;
  t: TRttiInstanceType;
  v: TValue;
begin
  c := TRttiContext.Create;
  t := c.FindType(AClassName) as TRttiInstanceType;
  v := t.GetMethod('Create').Invoke(T.MetaclassType, []);
  result := v.AsObject;
end;

...

var
  neka_klasa: TNekaKlasa;
begin
  neka_klasa := CreateClassFromName('Unit1.TNekaKlasa');


Alternativno resenje preko GetClass(), s' tim sto moras da registrujes klase (RegisterClass/UnregisterClass ili RegisterClasses/UnregisterClasses) koje zelis da budu nadjene ovim, i te klase takodje moraju da nasledjuju TPersistent:

Code:

function CreateClassFromName(const AClassName: String): TObject;
begin
  result := GetClass(AClassName).Create;
end;

...

var
  neka_klasa: TNekaKlasa;
begin
  RegisterClass(neka_klasa)
  neka_klasa := CreateClassFromName('TNekaKlasa');
 
Odgovor na temu

looping
none
none

Član broj: 324206
Poruke: 18
77.243.20.*



Profil

icon Re: Instance of object from class name DELPHI22.07.2014. u 16:07 - pre 117 meseci
Hvala na odgovoru. To je ono sto mi je trebalo.
 
Odgovor na temu

Rapaic Rajko
Bgd

Član broj: 4105
Poruke: 810
*.dynamic.sbb.rs.



+62 Profil

icon Re: Instance of object from class name DELPHI24.07.2014. u 08:22 - pre 117 meseci
looping, ne znam zasta ti ovo treba, tj. koji je scenario u kojem radis, ali - generalno je retka praksa instanciranje preko string-a odnosno imena klase.

U Delphi-ju postoji bolji mehanizam za instanciranje nepoznate klase, i rukovanje dobijenom instancom. Pogledaj metaklase, konkretno deklaracija neke metaklase ide ovako:

Code:

  type
    TControlClass = class of TControl;


Ovo podrzava nasledjivanje i donosi gomilu prednosti u odnosu na instanciranje preko string imena klase. Pogledaj npr. ovo:

Code:

  var 
    MyClass: TControlClass;
    MyInstance: TControl;

  begin
    ...
    MyClass := TButton; // class, ne string!
    MyInstance := MyClass.Create(AnyParent);
    ...  
  end;


Da li uvidjas flexibilnost i moc gornjeg koda? Istrazi malo po Delphi help-u, ima jos na ovu temu.

Pozz
 
Odgovor na temu

looping
none
none

Član broj: 324206
Poruke: 18
37.19.108.*



Profil

icon Re: Instance of object from class name DELPHI24.07.2014. u 12:13 - pre 117 meseci
Pozrdav Rapaic Rajko.
Scenario gde mi je potrebno da na osnovu stringa dobijem instancu klase je sledeci:

Kreiram alat koji treba da ucita exe ili bpl file i da iz exe-a ili bpl-a izvucem sve TForm objekte.
Taj deo sam uradio i mogu da dobijem formu kao string (dobijem isti string kao i u DFM file-u forme)
E sad, u DFM-u forma pocinje sa
Code:

inherited nekaForma: TnekaForma

inherited oznacava da forma ne nasledjuje direktno TForm, nego postoji Custom forma koju ova koju ucitavam nasledjuje.
Iz odredjenih razloga moram da prodjem kroz propertije u baznoj formi (a moze biti bilo koja Custom forma-nemam spisak formi koje mogu biti bazne)
pa iz tog razloga treba da kreiram instancu na osnovu stringa iz DFM filea

Nadam se da nisam konfuzno objasnio :)
 
Odgovor na temu

Rapaic Rajko
Bgd

Član broj: 4105
Poruke: 810
*.dynamic.sbb.rs.



+62 Profil

icon Re: Instance of object from class name DELPHI24.07.2014. u 21:59 - pre 117 meseci
Citat:
Iz odredjenih razloga moram da prodjem kroz propertije u baznoj formi (a moze biti bilo koja Custom forma-nemam spisak formi koje mogu biti bazne)


Kako znas koje propertije ces da citas a ne znas koje su klase? Ili sve bazne klase imaju iste propertije..?

Pozz
 
Odgovor na temu

looping
none
none

Član broj: 324206
Poruke: 18
95.180.97.*



Profil

icon Re: Instance of object from class name DELPHI25.07.2014. u 08:25 - pre 117 meseci
Petljom prolazim kroz sve kontrole i po unapred definisanom pravilu izcitavam samo odredjene property-je odredjenih kontrola.
Problem je dobiti objekat, ostalo je lako :-)

U principu, gornji primeri funkcionisu, samo sto je potrebno znati Unit u kome je klasa definisana, sto zahteva postojanje mapera klasa-Unit
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Instance of object from class name DELPHI

[ Pregleda: 1729 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.