Komponenten benutzen - Dynamische Arrays von Komponenten oder Objekten



  • Hallo, kann man denn auch einen dynamische!!!! Array von TLabels erstellen?
    Es müßte auf alle Fälle ein Globaler Array sein. Also z.B. das ich auf die Labels mit Button1 und Button2 zugreifen kann.

    Für schnelle Hilfe bin ich Dankbar

    [ Dieser Beitrag wurde am 02.07.2003 um 10:26 Uhr von Jansen editiert. ]



  • Eine Möglichkeit:

    DynamicArray<TLabel*>LblArray;
    int LblNum = 5;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
      : TForm(Owner)
    {  
      LblArray.Length = LblNum;
      for (int i = 0; i < LblArray.Length; i++)
        LblArray[i] = new TLabel(this);
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
      for (int i = 0; i < LblArray.Length; i++)
      {
        LblArray[i]->Parent = this;
        LblArray[i]->Caption = "Label" + String(i+1);
        LblArray[i]->Top = 20 * i;
        LblArray[i]->Show();
      }
    }
    //---------------------------------------------------------------------------
    

    std::vector sollte aber genausogut funktionieren, eine weitere Möglichkeit wäre die Verwendung von TList.



  • So denn, hier noch ein Beispiel mit vector:

    #include <vector>
    
    std::vector<Graphics::TBitmap*> BmpVector;
    
    //---------------------------------------------------------------------------
    // Vector nach Bedarf mit Bitmap-Objekten füllen
    void __fastcall TForm1::Button1Click(TObject *Sender)
    { 
      if (OpenDialog1->Execute())
      {
        Graphics::TBitmap *bmp = new Graphics::TBitmap;
        bmp->LoadFromFile(OpenDialog1->FileName);
        BmpVector.push_back(bmp);
      }
    }
    //---------------------------------------------------------------------------
    // durch die im Vector gelisteten Bilder blättern
    void __fastcall TForm1::Button2Click(TObject *Sender)
    { 
      if (Button2->Tag >= BmpVector.size())
        Button2->Tag = 0;
    
      if (BmpVector.size())
        Image1->Picture->Bitmap = BmpVector[Button2->Tag++];
    }
    //---------------------------------------------------------------------------
    // Bitmap-Objekte freigeben
    void __fastcall TForm1::FormDestroy(TObject *Sender)
    {
      int count = BmpVector.size();
      while (count)
        delete BmpVector[--count];
    }
    //---------------------------------------------------------------------------
    

    Die Bitmap-Objekte müssen von uns selbst wieder freigegeben werden; im Unterschied zu den Labels, welche mit this als Owner erzeugt wurden (der Owner übernimmt die Freigabe der ihm gehörenden Objekte bei seiner eigenen Zerstörung automatisch).



  • Vielen Dank für deine Hilfe 🙂


Anmelden zum Antworten