TImage Anzeigeproblem



  • Hallo Community,

    ich möchte verschiedene Diagramme in TImages zeichnen und diese in einen Vector schieben. Wenn ich dann auf einen Button weiter drücke, sollen diese nacheinander wieder angezeigt werden.

    Ich habe mich nun am Beispiel von Jansen im FAQ "Komponenten Benutzen" orientiert. Ich möchte aber keine Bilder laden sondern diese selber zeichnen. Leider werden mir meine gezeichneten Images nicht angezeigt. was mache ich falsch?

    Ich vermute, dass ich statt dem

    Image1->Picture->Bitmap
    

    etwas anderes nehmen müsste, aber was?

    #include <vector>
    
    std::vector<Graphics::TBitmap*> BmpVector;
    
    //---------------------------------------------------------------------------
    // Vector nach Bedarf mit Bitmap-Objekten füllen
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
     Graphics::TBitmap *bmp = new Graphics::TBitmap;
    
        // Beispiel für Textausgabe und Linie zeichnen
        bmp->Canvas->TextOutA(300,200,"Hallo");
        bmp->Canvas->MoveTo(400,200);
        bmp->Canvas->LineTo(500,200);
    
     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];
    }
    


  • Hallo

    Das eigentliche Problem dürfte sein das du dem neu erstellten Bitmaps vor den Zeichenoperationen keine Dimension zuweist. Das heißt alle Bitmaps haben eine Größe von 0x0 Pixeln. Und deshalb wird auch nichts dargestellt.

    bis bald
    akari



  • Super, das wars.

    Danke
    egcactus



  • int count = BmpVector.size();
      while (count)
        delete BmpVector[--count];
    

    Reicht hier nicht einfach diese Zeile?

    delete BmpVector[];
    


  • Hallo

    Nein das reicht nicht. Dieser Aufruf wäre für ein dynamisches C-Array richtig (und nur für das Array, nicht für die Instanzen hinter den Pointern), nicht aber für einen std::vector.

    bis bald
    akari



  • Der Aufruf wäre auch für ein C-Array nicht richtig.


Anmelden zum Antworten