Eigenschaftsänderungen abfangen / überschreiben



  • Original erstellt von spool:
    Sowas nachdem Motto: F_Bild->OnMouseDown = TPanel->MouseDown
    So gehts natürlich nicht, ...

    Wieso sollte das nicht gehen? Klar geht das! Ist doch alles __published.



  • Nö, WebFritzi. geht wirklich nicht. Denn OnMouseDown erwartet andere Parameter als MouseDown. 😉

    @spool: Schreib dir halt ne Methode für F_Bild->OnMouseDown und ruf darin MouseDown auf.



  • Blödsinn:

    Image->OnMouseDown = OnMouseDown;
    

    Klar geht das!



  • Eben. OnMouseDown klappt. MouseDown aber nciht. 😉

    Denn: Bei OnMouseDown gibts den Parameter Sender und bei MouseDown nicht.

    [ Dieser Beitrag wurde am 21.01.2003 um 21:18 Uhr von Eßer editiert. ]



  • Ich hatte mir eigentlich gedacht, dass er weiß, dass es

    TPanel->MouseDown
    

    garnicht gibt.



  • Klar gibts das. Als Erbe von TControl hat TPanel auch ne (protected) Methode namens MouseDown. 😉



  • Hallo??? TPanel->MouseDown NICHT!!! TPanel::MouseDown vielleicht aber nicht mit "->"!



  • Image->OnMouseDown = OnMouseDown;

    Wo schreib ich das denn hin ?? In den Konstruktor von TExtendedImage ??
    Oder heißt das Richtig Image->OnMouseDown = inherited::OnMouseDown ???

    muß ich gleich mal am Schlepptop ausprobieren. Hab das Projekt grad nicht hier an der Kiste.



  • Konstruktor is gut. Ohne Inherited!



  • Wo ist denn hier ein Zeiger namens TPanel???



  • Original erstellt von Eßer:
    Wo ist denn hier ein Zeiger namens TPanel???

    Ja eben! Das hatte er aber geschrieben (spool). Ich ging davon aus, dass er anstatt von "TPanel->MouseDown" meinte: "this->OnMouseDown". Sowas passiert, wenn man schnell tippen will und sowieso meint, das, was man da schreibt, sei Unsinn.



  • Dann gibts aber this->MouseDown trotzdem. 😉



  • Hab ich das je angezweifelt?



  • Original erstellt von WebFritzi:
    **Ich hatte mir eigentlich gedacht, dass er weiß, dass es

    TPanel->MouseDown
    

    garnicht gibt.**



  • Öhm... den Unterschied zwischen TPanel und this kennst du aber, oder?



  • Achso, du meinst, dass es TPanel nicht gibt.

    Ich dachte, du meinst, dass es this->MouseDown nicht gibt und bin davon ausgegangen, dass du spools TPanel-Fehler übernommen hast.

    BTW: Ich kann dir nicht sagen, ob es einen Unterschied zwischen TPanel und this gibt, weil TPanel nirgends definiert ist. 😉 🕶



  • Ich dachte, du meinst, dass es this->MouseDown nicht gibt

    Hab ich nirgends gesagt.



  • Stimmt. Ich dachte ja auch, du meintest TPanel == this.

    Drücke ich mich so unklar aus?



  • Äh, ja. Und ich mich wohl auch... 😃



  • Egal wie, es funktioniert nicht !
    Ich kriegs nicht zum Laufen. Anbei nochmal der derzeitige Code
    Header Datei:

    //---------------------------------------------------------------------------
    
    #ifndef ExtendedImageH
    #define ExtendedImageH
    
    #define Rand 2
    //---------------------------------------------------------------------------
    #include <SysUtils.hpp>
    #include <Controls.hpp>
    #include <Classes.hpp>
    #include <Forms.hpp>
    #include <ExtCtrls.hpp>
    // #include <jpeg.hpp>
    
    typedef void __fastcall (__closure *MyMouseDown)
    (TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y);
    
    //---------------------------------------------------------------------------
    class PACKAGE TExtendedImage : public TPanel
    {
    private:
            // Ereigniss
            MyMouseDown          IVMyOnClick;
    
            // Private Variablen / Objekte
            TImage*              F_Bild;
    
            int                  F_CmLeft;
            int                  F_CmTop;
            int                  F_CmWidth;
            int                  F_CmHeight;
    
            //*******************************************************************
            //   Zugriffsmethoden für die Eigenschaften
            //*******************************************************************
            // Setzt die neuen linken Koordinaten in Cm
            void __fastcall setCmLeft( int i_Left );
            // Setzt / Liest die neuen linken Koordinaten
            void __fastcall setLeft( int i_Left );
            int __fastcall getLeft();
            // Setzt / Liest die neuen oberen Koordinaten
            void __fastcall setTop( int i_Top );
            int __fastcall getTop();
            // Setzt / Liest die neue Breite
            void __fastcall setWidth( int i_Width );
            int __fastcall getWidth();
    
    protected:
    
    public:
            virtual __fastcall TExtendedImage(TComponent* Owner);
            virtual __fastcall ~TExtendedImage();
    
            DYNAMIC void __fastcall MouseDown(TMouseButton Button,
                    Classes::TShiftState Shift, int X, int Y);
    
    __published:
    
            __property int CmLeft = { read = F_CmLeft, write = setCmLeft };
    
            __property int Left  =  {read = getLeft,   write = setLeft    };
            __property int Top   =  {read = getTop,    write = setTop     };
            __property int Width =  {read = getWidth,  write = setWidth   };
    
    };
    //---------------------------------------------------------------------------
    #endif
    

    CPP Datei

    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #pragma hdrstop
    
    #include "ExtendedImage.h"
    #pragma package(smart_init)
    //---------------------------------------------------------------------------
    // ValidCtrCheck wird benutzt, um sicherzustellen, daß die erzeugten Komponenten
    // keine rein virtuellen Funktionen besitzen.
    static inline void ValidCtrCheck(TExtendedImage *)
    {
            new TExtendedImage(NULL);
    }
    //---------------------------------------------------------------------------
    __fastcall TExtendedImage::TExtendedImage(TComponent* Owner)
            : TPanel(Owner)
    {   // Dem Panel keine Beschriftung zuweisen
        inherited::Caption = " ";
        // TImage auf dem TPanel erzeugen
        F_Bild = new TImage(this);
        // Übergeordnetes Control setzen
        F_Bild->Parent = this;
        // Setzt die Eigenschaften Left, Top, Width und Height
        // des TImage gleichzeitig
        F_Bild->SetBounds(Rand, Rand, (inherited::Width) - ( Rand * 2 ), (inherited::Height) - ( Rand * 2 ));
        // Temporär mal ein Bild zuweisen
        F_Bild->Picture->LoadFromFile("D:\\Programme\\ahead\\nero\\cdextra.jpg");
        // Das Image neu zeichnen
        F_Bild->Repaint();
    
        //**************************************
        // Da tut sich gar nix                 *
        //**************************************
        F_Bild->OnMouseDown = this->OnMouseDown;
    }
    //---------------------------------------------------------------------------
    __fastcall TExtendedImage::~TExtendedImage()
    {
     delete F_Bild;
    }
    //---------------------------------------------------------------------------
    void __fastcall TExtendedImage::MouseDown(TMouseButton Button,
                    Classes::TShiftState Shift, int X, int Y)
    {// Ereigniss an die Originalprozedur weiterleiten
     inherited::MouseDown(Button, Shift, X, Y);
     // Ereigniss dieses Controls auslösen
     if(IVMyOnClick) IVMyOnClick(this, Button, Shift, X, Y);
     AnsiString Msg = "MouseDown aus dem Control";
     ShowMessage( Msg );
    }
    //***************************************************************************
    //  Die linken Koordinaten des TPanel (inherited) setzen
    //***************************************************************************
    void __fastcall TExtendedImage::setLeft( int i_Left )
    {
       inherited::Left = i_Left;
    }
    //***************************************************************************
    //  Die linken Koordinaten des TPanel (inherited) zurückliefern
    //***************************************************************************
    int __fastcall TExtendedImage::getLeft()
    {
       return inherited::Left;
    }
    
    //***************************************************************************
    //  Die oberen Koordinaten des TPanel (inherited) setzen
    //***************************************************************************
    void __fastcall TExtendedImage::setTop( int i_Top )
    {
       inherited::Top = i_Top;
    }
    //***************************************************************************
    //  Die oberen Koordinaten des TPanel (inherited) zurückliefern
    //***************************************************************************
    int __fastcall TExtendedImage::getTop()
    {
       return inherited::Top;
    }
    
    //***************************************************************************
    //  Die Breite des TPanel (inherited) setzen
    //***************************************************************************
    void __fastcall TExtendedImage::setWidth( int i_Width )
    {
       inherited::Width = i_Width;
       // Das TImage der geänderten Größe anpassen
       F_Bild->Left = Rand;
       F_Bild->Width = inherited::Width - (Rand * 2);
       F_Bild->Invalidate();
       F_Bild->Update();
    }
    //***************************************************************************
    //  Die Breite des TPanel (inherited) zurückliefern
    //***************************************************************************
    int __fastcall TExtendedImage::getWidth()
    {
       return inherited::Width;
    }
    // Für später
    //---------------------------------------------------------------------------
    void __fastcall TExtendedImage::setCmLeft( int i_CmLeft )
    {
     F_CmLeft = i_CmLeft;
    }
    //---------------------------------------------------------------------------
    namespace Extendedimage
    {
            void __fastcall PACKAGE Register()
            {
                     TComponentClass classes[1] = {__classid(TExtendedImage)};
                     RegisterComponents("Components", classes, 0);
            }
    }
    //---------------------------------------------------------------------------
    

Anmelden zum Antworten