Bild in Komponente einbinden



  • Hallo

    dann ist mein letzter Satz für dich entscheidend.
    Du gibst deiner Komponente Zugriff auf die TImageList-Komponente, indem du eine Eigenschaft darauf erstellst :

    // Header
    class TMyControl : public x
    {
      private :
        ...
        TImageList *iImageList; // interne Speicher für Imagelist und -Index
        int iImageIndex;
    
       // Setter
       void __fastcall Set_ImageList(TImageList *NewImageList);
       void __fastcall Set_ImageIndex(int NewImageIndex);
    
      public :
      __published :
        ...
    
       // Eigenschaften für Objektinspektor
        __property TImageList *ImageList = {read = Set_ImageList, write = iImageList};
        __property int ImageIndex = {read = Set_ImageIndex, write = iImageIndex};
      }
    
    // CPP-Datei
    void __fastcall TMyControl::Set_ImageList(TImageList *NewImageList)
    {
      iImageList = NewImageList;
      Repaint();
      }
    
    void __fastcall TMyControl::Set_ImageIndex(int NewImageIndex)
    {
      iIndexIndex = NewImageIndex;
      Repaint();
      }
    
    TMyControl::TMyControl(...) : X(...)
    {
      iImageList = NULL;
      iImageIndex = -1;
      }
    
    // Eigene Funktion zum Zeichnen
    void __fastcall TMyControl::Repaint()
    {
      ...
    
      // Wenn ImageList und ImageIndex vorhanden, Image in Canvas des Controls
      // an Position 50,100 zeichnen
      if ((iImageList != NULL) && (iImageIndex > -1))
        iImageList->Draw(Canvas, 50, 100, iImageIndex, true); 
      }
    

    danach kannst du du die neuen Eigenschaften der Control-Instanz auf dein ebenfalls angelegtes TImageList anpassen

    bis bald
    akari



  • danke akari,
    das komme ich klar damit werde es gleich mal testen.

    nochmals danke

    gruss
    waldseeduo 👍



  • aahhh jetzt hats geklingelt was ihr gemeint habt mit der eigenschaft.
    klar jetzt erscheint mir das ganze logisch.

    danke dass ihr mich nicht dumm sterben lasst 😋 💡 👍 #

    suppi jetzt klappt es.

    waldseeduo



  • Hallo,
    jetzt habe ich 3 ganze Tage versucht ein Bild in die Komponente einzubinden auf den ersten Eindruck schien es auch zu klappen doch er Schein hat getrügt.

    Bitte schaut euch mal den Code an. Ich bekomme immer die Fehlermeldung "E2247 Zugriff auf ... nicht möglich"

    Ich habe es auch mit dem bereits geposteten Code versucht "Fatal Error!"

    //header
    private:
    Graphics::TBitmap* FPic_0;
    
    __published:
            __property Graphics::TBitmap* Pic_0  =  {write=SetPic_0 };
    
    //-----------------------//cpp-----------------------------------------
    __fastcall TEFader::TEFader(TComponent* Owner)
            : TImage(Owner)
    {
    FPic_0=new Graphics::TBitmap();
    }
    
    void __fastcall TEFader::SetPic_0(Graphics::TBitmap* value)
    {
    FPic_0->Assign(value);
    Repaint();
    }
    

    Gibt es irgendwo eine Komponente die ich Downloaden kann bei der ein Bild wie bei der Image Komponente zur Entwurfzeit ein Bild auswählen kann.

    Ich gebe normal nicht so schnell auf aber so langsam dreh ich echt am Rad.

    Danke für eure Hilfe

    gruss
    waldseeduo 😞



  • Hast Du wirklich die Property genauso geschrieben wie oben im Quellcode?



  • Hallo

    denn so wie das aussieht ist deine __property im private Teil, obwohl die in den public sollte.

    bis bald
    akari



  • Hallo,

    __property ist im public: (hatte vergessen das wort mit zu kopieren sorry)

    ich habe den Code direkt aus der Komponente kopiert um Schreibfehler auszuschliessen.

    was mach mich falsch?

    gruss
    waldseeduo



  • Irgendwo fehlt in deinem geposteten Code eine öffnende geschweifte Klammer und der read-Teil der Property.



  • die klammer ist drin im code
    muss die read zwingend vorhanden sein. ich habe es schon probliert mit und ohne immer das gleiche ergebniss.

    ist die grundlegende vergehensweise so richtig?

    gruss
    waldseeduo



  • Wie lautet denn deine vollständige Fehlermeldung ?
    Wenn sie "Zugriff auf FPic_0 nicht möglich" lautet, schau mal deinen gesamten Quellcode durch, wo überall diese Variable verwendet wird. Vielleicht greifst du irgendwo von ausserhalb zu, was eben nicht möglich ist.



  • hallo,
    ja ich greife von ausen zu um das image zu füllen

    Fader1->Pic_0->LoadFromFile("c:\\test.bmp");

    dann wirft er mir die Meldung

    gruss
    waldseeduo



  • Hallo

    dann brauchst du noch einen Getter, den du im read-Teil der Property zuweist.

    bis bald
    akari



  • Nun erst mal Danke an allen.

    Ich habe den Getter eingefügt jetzt klappts so wie es im moment aussieht.

    gruss
    waldseeduo


Anmelden zum Antworten