Mit __property {read=} Zugriff auf Member eines Members
-
Hallo!
Ich stelle mir folgendes vor:
class TTest : public TDataModule { __published: // Von der IDE verwaltete Komponenten TIdFTP *IdFTP1; public: // Anwender-Deklarationen __fastcall TTest(TComponent* Owner); __property AnsiString strFTPHost = { read=IdFTP1->Host, write=IdFTP1->Host }; };
Also beim Zugriff auf strFTPHost soll automatisch der entsprechende Wert der Indy-FTP-Komponente gelesen und geschrieben werden. Leider kompiliert dieser Quellcode nicht.
Geht das prinzipiell nicht, oder habe ich einen Syntaxfehler?Gruß
Klaus
-
class TTest : public TDataModule { private: String FHost; __published: TIdFTP *IdFTP1; // ganz übel ! public: // Anwender-Deklarationen __fastcall TTest(TComponent* Owner); __property AnsiString strFTPHost = { read=FHost, write=FHost}; };
-
__published: TIdFTP *IdFTP1; // ganz übel !
Was heißt denn hier "ganz übel!"? Das hat doch der Builder selbst geschrieben ;). Du meinst wohl, weil man dann von außen darauf zugreifen kann, oder?
Durch die Deklaration der Variablen FHost habe ich aber eine Variable, die getrennt von der Eigenschaft Host der FTP-Komponente ist. Dann muss ich letztendlich doch noch irgendwann den Wert meiner FHost-Var IdFTP1->Host zuweisen. Schade eigentlich. Ich dachte, das könnte ich automatisieren.
-
Kannst du ja auch... implementiere hald Get-/Set-Methoden für den host dannk annst du mit dem Wert machen, was du auch immer willst.
-junix
-
warp schrieb:
Du meinst wohl, weil man dann von außen darauf zugreifen kann, oder?
Ja, das meinte ich. Wenn der Eintrag voin der IDE erstelllt wurde, kannst du ja nichts dran machen.
Dises Problem ist, meiner Meinung nach, noch eine Schwäche der IDE. Der Formdesigner macht einfach alles public (__published ist ja auch public).
warp schrieb:
Schade eigentlich. Ich dachte, das könnte ich automatisieren.
geht schon:
class TTest : public TDataModule { private: String GetHost(){return IdFTP1->Host}; void setHost(String value){IdFTP1->Host=value}; __published: TIdFTP *IdFTP1; public: __fastcall TTest(TComponent* Owner); __property AnsiString strFTPHost = { read=GetHost, write=SetHost}; };
siehe Tutorial in meiner Signatur...