Funktion mit variablem Objektnamen wie deklarieren?
-
Hallo,
ich möchte eine Funktion haben die durch ein Click-Ereignis auf einen Eintrag im MainMenue eine Spalte in einem DBGrid ein/ausblendet und die Checked Eigenschaft des MainMenue Eintrages setzt/entfernt.Hier meine Idee bis hier:
void TFORanwendersuchen::ZeigeSpalte(AnsiString MMEeintrag, int Index) { if (DBGanwender->Columns->Items[Index]->Visible == false) { DBGanwender->Columns->Items[Index]->Visible = true; MMEeintrag->Checked = true; } else { DBGanwender->Columns->Items[Index]->Visible = false; MMEeintrag->Checked = false; } } //------------------------------------------------------------------- void __fastcall TFORanwendersuchen::MMEnachnameClick(TObject *Sender) { ZeigeSpalte("MMEnachname", 1); }
MMEeintrag soll die Variable für den Namen des Eintrages im MainMenue sein.
Index ist die Nr der Spalten(Items) im DBGrid.
MMEnachname ist der Name des Eintrages im MainMenue über den ich die Spalte mit dem Index 1 des DBGrid (Tabellenfeld Nachname) ein/ausblenden möchte.**Da es aber keinen "MMEeintrag" als Objektnamen selbst gibt sondern dies nur eine Variable für den echten Namen ist der beim Aufruf der Funktion übergeben wird, meckert er beim compilieren der Zeile
MMEeintrag->Checked = true;
natürlich schon.
Wie könnte man das lösen?**Vielen Dank und Gruss.
-
void TFORanwendersuchen::ZeigeSpalte(TMenuItem *MenuItem, int Index) { // beim übergebenen Menüitem einfach den Status checked negieren MenuItem->Checked = !MenuItem->Checked; // Column visible-status setzen DBGanwender->Columns->Items[Index]->Visible = MenuItem->Checked; } //------------------------------------------------------------------- void __fastcall TFORanwendersuchen::MMEnachnameClick(TObject *Sender) { // den Sender auswerten und nach TMenuItem verbiegen TMenuItem *TempMenuItem = dynamic_cast <TMenuItem*>(Sender); // Funktion aufrufen und den verbogenen Sender :) übergeben ZeigeSpalte(TempMenuItem, 1); }
MMEeintrag ist vom Typ "TMenuItem", deswegen kannst Du nicht einfach ZeigeSpalte das "TMenuItem" als "AnsiString" übergeben.
-
Danke an den Profi
wenn du vielleicht kurz noch zeit hast woher kommt das *TempMenuItem und was macht der dynamic_cast? bitte in einfachen worten für ein anfänger aus der hilfe werd ich nicht schlau, der rest ist klar.
Gruss
-
Wird ein TMenuItem angeklickt, wird das OnClick Ereignis ausgeloest. Als Parameter des Ereignisses wird eine Zeiger zu diesem MenuItem uebergeben (TObject *Sender). Da du jetzt ja die Eigenschaft "Checked" von diesem MenuItem aendern willst, musst du dieses ja auch an deine eigene Funktion "ZeigeSpalte(...)" uebergeben. Da "Sender" aber noch vom Typ TObject ist, musst du diesen erst zu einem TMenuItem casten (umwandeln). Das Ergebnis von dieser "Umwandlung" ist dann ein Zeiger namens "TempMenuItem" (jeder andere Name ist natuerlich auch waehlbar..
) Diesen kannst du dann einfach deiner Funktion uebergeben...
Ich hoffe das war verstaendlich und es haben sich keine Fehler eingeschlichen...MfG Aoeke
-
Siehe auch den Abschnitt "Komponenten" in der FAQ.
Ach ja, noch zum Invertieren des bool-Wertes:
MenuItem->Checked ^= 1;
-
fettes merci an alle...
jetzt haben sogar wir es verstanden vielen vielen dank!!