Zugriff auf die einzelnen Objekte von TMainMenu



  • Hallo,

    ich bin's mal wieder. Habe diesesmal eine Frage zu TMainMenu. Wollte mir die Indexnumer der Elemente von TMainMenu zurückgeben lassen. Besser wäre noch die Anzhal der Elemente und der Zugriff auf die Unterelemente. Beispiel Element Datei hat einen Eintrag Laden und Speichern. Neben dem Element Datei findet sich das Element Bearbeiten mit den Unterelementen Löschen und Kopieren. Mit Items[i] kann ich zwar auf die Elemente zugreifen aber nicht auf die Unterlemente.
    TmainMenu1->Items->Count; erlaubt mir nur die Anzahl der beiden ersten Elemente zu finden( ind diesem Fall ja Datei und Beabeiten). Leider kann ich die Unterelemente nicht finden. Wir das Element Datei Instanziert?
    Gibt es eine einfache Variante auf die Unterelemente zuzugreifen und dessen Anzahl herauszufinden. Ich gehe mal von der Antwort "Ja" aus. Aber was habe ich übersehen?
    Nochmalige Hilfe wäre super nett.



  • Hallo

    siehe TMenuItem::Items

    bis bald
    akari



  • Ich habe leider noch ein weiteres Problem. Ich kann noch immer nicht wirklich auf die Indexzahl des Objekts über Items[i] zugreifen. Zusätzlich funktioniert immer noch nicht die Caption-Bennenung. Casten muss ich auch nichts in diesem Fall.(dynamic_cast)
    Bin auch etwas unkonzentriert. Sitze zu lange vor dem restlich Quelltext. Sorry.

    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #pragma hdrstop
    
    #include "Objektsuche.h"
    #include "ObjectDebug.h"
    #include <XMLDoc.hpp>
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm2 *Form2;
    
    #define __SHOWNAMES__
    
    //---------------------------------------------------------------------------
    // Einlesen der XML-Datei mit der Sprachen- und Objekliste
    // Suchalgorithmus zur Findung der Objektnamen
    AnsiString getName(AnsiString ObjName,AnsiString Sprache)
    {
    	AnsiString BuCaption;
    
    	try
      		{
        	_di_IXMLDocument LangXML = LoadXMLDocument("lang.xml");
        	_di_IXMLNodeList NodeList = LangXML->DocumentElement->ChildNodes;
        	_di_IXMLNode ObjNameNode = NodeList->FindNode(ObjName);
        	BuCaption = ObjNameNode->ChildNodes->FindNode(Sprache)->NodeValue;
    
        	return BuCaption;
           }
        catch (...)
    		{
            try
    				{
    					throw Exception("");
    				}
                catch (Exception &exception)
    				{
    					Application->ShowException(&exception);
    				}
    		}
    
       	return BuCaption;
    }
    
    //---------------------------------------------------------------------------
    __fastcall TForm2::TForm2(TComponent* Owner)
    	: TForm(Owner)
    {
       // Ausgabe der Anzahl der Objekte
    	Button_Para->Caption = Form2->ComponentCount;
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm2::Button_BerPrClick(TObject *Sender)
    {
    	// Variablen zum Zwischenspeichern der Caption und des Objektnamens
    	AnsiString ObjName[50];
        AnsiString CaptionName[50];
        AnsiString Sprache = "eng";
        int NumberMenu;
        int NumberItem;
          int zahl = 0;
        #ifdef __SHOWNAMES__
        FormObjDebug->Show();
        FormObjDebug->LB1->Clear();
        #endif
    
        for (int i=0; i< Form2->ComponentCount;i++)
    
    		{
                ObjName[i] = Form2->Components[i]->GetNamePath();
    
                TComponent *comp = Components[i];
    
              	#ifdef __SHOWNAMES__
        		FormObjDebug->LB1->Items->Add( "Name: " + ObjName[i] + " Class: " + Components[i]->ClassName());
                #endif
    
                if (Components[i]->ClassNameIs("TLabel"))
                {
                    CaptionName[i] = getName(ObjName[i], Sprache);
                   	TLabel *label = dynamic_cast<TLabel *>(comp);
                	if(label != NULL)
                	{
                    	label->Caption = CaptionName[i];
                    }
            	}
                if (Components[i]->ClassNameIs("TButton"))
                {
                    CaptionName[i] = getName(ObjName[i], Sprache);
                	TButton *button = dynamic_cast<TButton *>(comp);
                    if(button != NULL)
                    {
                       	button->Caption = CaptionName[i];
                    }
    
                }
               if (Components[i]-ClassNameIs("TMenuItem"))
               {
    
                   if (Components[i]->ClassNameIs("TMainMenu"))
                {
    
                int zahl;
                	NumberMenu = MainMenu1->Items->Count;
                   	Form2->MainMenu1->Items->Caption = "Test";
          //        zahl = Form2->MainMenu1->ComponentCount;
              //      MainMenu1->Items->Caption = "Test";
    
    		    }
    
               }
    
    }
            }
    


  • versuchs mal so

    int NumberMenu = MainMenu1->Items->Count;
    for (int i=0; i<NumberMenu; i++)
    	{
    	TMenuItem *ItemToEdit = MainMenu1->Items->Items[i];
    	ItemToEdit->Caption = "A";
    	for (int j=0; j<ItemToEdit->Count;j++)
    		{
    		ItemToEdit->Items[j]->Caption = "Test";
    		}
    	}
    


  • Ich danke dir. Geile Sache. Funktionier sau gut. Bin dir echt dankbar.

    1000 Dank.


Anmelden zum Antworten