Wie kann man den Namen eines Objektes an eine Funktion übergben?
-
Hallo,
ich habe eine Datenbank mit mehreren Formularen, welche auf unterschiedliche Tabellen (über BDE mit TTable Objekten) zugreifen. In einer extra Unit möchte ich nun Funktionen welche von mehreren Formularen aus benötigt werden (z.B. sortieren der Spalte eines DBGrid) unterbringen und diese von den jeweiligen Anwendungsformularen aufrufen. Dazu muss ich z.B den Namen des TTable (oder auch eines TDBGrid, TTimer etc.) Objektes übergeben siehe Bsp unten)
Nur wie kann man den Namen von Objekten an eine Funktion übergeben? So wie ich das angedacht habe (siehe unten) funktioniert das nicht???
Beispiel:
Unit Funktionen:void SortiereSpalte2(TTable *TABname, AnsiString Feldname) { //Funktion zum Sortieren der Spalten des DBGrid im Suchformular nach dem im //AnsiString beim Aufruf der Funktion angegebenen "Feldname". //Tabelle deaktivieren und exclusiv schalten DTMdms->TABname->Active = false; DTMdms->TABname->Exclusive = true; // Aktuell verfügbare Indizes abrufen DTMdms->TABname->IndexDefs->Update(); //herausfinden welcher Index "Feldname" ist for (int i = 0; i < DTMdms->TABname->IndexDefs->Count; i++) { if (DTMdms->TABname->IndexDefs->Items[i]->Fields == String(Feldname)) { // Diesen Index als aktuellen Index der Tabelle aktivieren DTMdms->TABname->IndexName = DTMdms->TABname->IndexDefs->Items[i]->Name; } } //Tabelle wieder aktivieren DTMdms->TABname->Exclusive = false; DTMdms->TABname->Active = true; }
Header von Unit Funktionen
void SortiereSpalte2(TTable *TABname, AnsiString Feldname);
Aufruf in z.B. Unit Anwender
void __fastcall TFORanwendersuchen::DBGanwenderTitleClick(TColumn *Column) { int i = Column->Index; switch (i) { //sortiert je nach Index über die Funktion SortiereSpalte das übergebene Feld //per Klick auf den Spaltenkopf des DBGrid case 0: SortiereSpalte(TABanwender, "Kennung"); //TABanwender ist der in der Eigenschaft "Name" eingetragene Name //des TTable Objektes DBGanwender->Columns->Items[0]->Title->Font->Style = TFontStyles() << fsUnderline; break; //usw.. } }
-
Wenn du die Komponente selbst übergibst (was du bereits machst), kannst du direkt auf sie zugreifen und musst nicht über das Parent (vermutlich Formular) gehen.
void mach_irgendwas(TIrgendeinObjekt *obj) { obj->Eigenschaft[Index] = daten; }
oder ähnlich.