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.


Anmelden zum Antworten