Komponete TStrings als property



  • Hallo,

    ich würde gerne in einer Komponente TStrings als property verwenden
    (so wie bei TMemo).

    Wie geht das? Ich habe folgendes versucht:

    class PACKAGE TPanelBtn : public TPanel
    {
    private:
        TStringList *MemoLines;
        // ...
    public:
        // ...
    __property TStringList *Lines = {read=MemoLines, write=MemoLines};
    }
    
    __fastcall TPanelBtn::TPanelBtn(TComponent* Owner)
        : TPanel(Owner)
    {
    
        MemoLines = new TStringList();
        // ...
    }
    

    klappt leider nicht, Borland beendet sich dabei mit einem "Abstakten Fehler".

    Was ich machen will:
    ein Panel auf dem sich ein Memo befindet, die Zeilen dieses Memos sollen
    nach aussen zur Bearbeitung weitergegeben werden.



  • Weil du die selbe Methode zum lesen und schreiben benutzt.
    Das müssen 2 verschiedene Sein.
    Read liefert die entsprechende TSrings zurück und darf keine Parameter haben und write nimmt eben diese an, darf dabei auch NUR diesen Parameter haben.
    Bsp

    public:
        inline void SetID (int tmp) { m_rID=tmp;  };
        inline int GetID      (void) const { return m_rID; } ;
        __property int ID = {write=SetID,read=GetID};
    

    zumindest so ungefähr 😉



  • eh edit:
    du hast read= und write= auf die Member Variable gesetzt. es müssen die Methoden zum schreiben und lesen angegeben werden.



  • die funktion zum lesen des property kann durchaus das objekt zurueckliefern...

    private:
    
     TStringList *FItems;
    
    protected:
    
      void __fastcall SetItems(TStringList *Value);
    
    __published:
    
      __property TStringList *Items = { read = FItems, write = SetItems };
    

    in der cpp

    //---------------------------------------------------------------------------
    // Set-Funktion für FItems
    //---------------------------------------------------------------------------
    void __fastcall NameDeinerKomponente::SetItems(TStringList *Value)
    {
      Items->Assign(Value);
    }
    


  • Das zum lesen wusste ich noch nicht.
    Gut zu wissen 🙂



  • wobei ich auf die gewonnenen erkenntnisse über Assign() von hier aufmerksam machen will

    mfg
    BigNeal



  • BigNeal schrieb:

    wobei ich auf die gewonnenen erkenntnisse über Assign() von hier aufmerksam machen will

    mfg
    BigNeal

    *grins* stimmt 🙂


Anmelden zum Antworten