Wieso kann ich mit OOP innerhalb einer Klasse nicht auf VCL Komponenten zugreifen ?
-
hi,
angenohmen ich schreib mir ne datenbankklasse,
wie soll ich davon was haben wenn ich nichtmal auf sachen wie ADOConnection->usw. zugreifen kann ? Oder läuft das ganze OOP Zeugs wirklich nur mit Referenzen und Rückgabewerten ???sprich:
DB Datenbank;
ADOConnection->ConnectionString = DB->getString(); ????danke
gruß
binary
-
Äh 2 Dinge:
binary trust schrieb:
Wieso kann ich mit OOP innerhalb einer Klasse nicht auf VCL Komponenten zugreifen ?
1. Mit OOP kann man auf garnix zugreifen denn OOP ist ein Konzept.
2. Vielleicht solltest du dir überlegen, deine Frage nochmals neu zu formulieren. Mich dünkt die Formulierung etwas - äh - wirr. Bedenke, dass wir hier alle keine Ahnung haben woran du gerade arbeitest etc. also nimm den scope etwas weiter weg und stelld ie Frage so, als würdest du sie deinem Nachbarn stellen.
-junix
-
ok, dann versuch ich es mal neu,
dann klappts auch mit denn nachbarn
also,
angenohmen in einer unit1 hab ich eine klasse und will mit dieser klasse z.b. die Form1->Caption einfach ändern. Nun kann ich von meiner Klasse aus aber nicht sagen Form1->Caption = "bla" sondern soweit ich das sehe geht das nur über Rückgabewerte oder Referenzen wie z.b.
Form1->Caption = DB->getCaption();
in getCaption ist dann halt nur ein return(AnsiString);
oder geht es ihrgendwie anderes ???
danke
-
Du könntest in die Klasse die Form übergeben und dies dort ändern ;o)
Um einen Parameter oder Rückgabe kommst nicht rum (obs nun set_Form ist, set_Caption(Form * frm) oder Form->Caption = DB->GetCaption();)
-
aha, das bedeutet also das ich meiner klasse die form klasse übergebe damit diese weis das es sie gibt. nun ändere ich in meiner klasse dort ein paar dinge und gebe diese per return an die eigentliche form klasse wieder zurück ?
ist das soweit richtig gedacht oder bin ich jetzt ganz auf denn holzweg ... ?danke
-
...fast... du gibst deiner Klasse einen Zeiger auf z.B. Form1... dieser Zeiger zeigt dann der Klasse wo das Form liegt. Da dieser Zeiger das gezeigt hat, kannst du nun über den Zeiger auf alles was TForm1 bietet zugreifen. returnen musste da nixmehr da die Änderung ja selber aufgerufen wird.
-junix
-
puhhh c++ schwere sprache

habs aber soweit geschluckt worum es geht.danke junix für deine hilfe!
gruß
binary
-
nicht schwieriger als deutsch (o;
-junix
-
ist ja auschon schwer genug

ok danke
-
Na C++ ist wesentlich einfacher, da steckt wenigstens ne Logik dahinter ;o)
-
ok, hab nochmal ne frage,
wie sollte denn dann so ne funktion entsprechend aussehen ?//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; getFormname(TForm *Form1); getFormname(TForm *Form1) { ShowMessage(Form1->Caption); } void __fastcall TForm1::Button1Click(TObject *Sender) { getFormname(Form1); } //--------------------------------------Es funktioniert zwar aber ich denk ich hab die Funktion falsch deklariert, kann das sein ????
Ich will denn Formname beliebig übergeben.
-
Hi!
Häää? Sorry, wenn ich dieses alte Posting nach vorne hole, aber das verstehe ich jetzt nicht ganz.
Warum machst du denn nicht//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- getFormname(); getFormname() { ShowMessage(Form1->Caption); Form1->Caption = "muhh"; } void __fastcall TForm1::Button1Click(TObject *Sender) { getFormname(); } //---------------------------------------------------------------------------Funktioniert bei mir zumindest super!
Warum sollte das nicht funktionieren? Form1 ist doch eine globale Variable (bzw. ein globaler Zeiger), auf die kann ich von überall aus zugreifen??!?Warum übergibt "binary trust" denn einen Zeiger auf die Form an seine Funktion?
Sorry, ich glaube ich habe das Problem nicht so 100% ig verstanden...?
tschüss
Robert