Ĺadny brzuch
Witam
W ostatnim czasie zająłem się przerabianiem istniejących komponentów, jednak napotkałem na kilka problemów, których nie potrafię ominąć.
1)Dodawanie nowych zdarzeń
Komponent oparty jest o TButton. Chcę dodać 2 nowe zdarzenia, które reagują na zachowanie myszy (najechanie na komponent i opuszczenie jego obszaru). W pliku *.h zamieszczam następujący kod:
__published: MESSAGE void _fastcall onmouseenter(TMessage &Msg); MESSAGE void _fastcall onmouseleave(TMessage &Msg); BEGIN_MESSAGE_MAP MESSAGE_HANDLER(CM_MOUSEENTER,TMessage, onmouseenter) MESSAGE_HANDLER(CM_MOUSELEAVE, TMessage, onmouseleave) END_MESSAGE_MAP(TMButton)
a w pliku *.cpp
void _fastcall TMButton::onmouseleave(TMessage &Msg) { Invalidate(); } void _fastcall TMButton::onmouseenter(TMessage &Msg) { Invalidate(); }
Komponent kompiluje i instaluje się bez problemu. Jednak po umieszczeniu go na formie dostaję komunikat o abym zapisał wszystko i wyłączył Buildera gdyż nastąpiło przepełnienie stosu.
2) Komponent oparty o TShape zawierający Bitmapę
w pliku *.h mam następujące deklaracje
private: Graphics::TBitmap *Bitmapa; void __fastcall SetBitmap(Graphics::TBitmap *Value); protected: void __fastcall TShapeButton::Paint(); public: __fastcall TShapeButton(TComponent* Owner); __published: __property Graphics::TBitmap *pBitmap = {read=Bitmapa, write=SetBitmap,stored=true};//= {write=Bitmap, read = write=Bitmap};
W pliku *.cpp
void __fastcall TShapeButton::Paint() { if (Bitmapa)Canvas->Draw(0,0,Bitmapa); } //--------------------------------------------------------------------------- void __fastcall TShapeButton::SetBitmap(Graphics::TBitmap *Value) { if (Value == NULL)return; else{ if (!Bitmapa)Bitmapa= new Graphics::TBitmap(); Bitmapa->Assign(Value); Invalidate(); } }
Komponent kompiluje się i instaluje bezproblemowo. W fazie projektowania (kiedy położę go na formę ) też wszystko jest OK. Jednka kiedy w Inspektorze obiektów załaduję do niego bitmapę to po kompilacji i próbie uruchomienia dostaję komunikat ""EReadError with message "Invalid Property Path"". Komunikat nie pojawia się kiedy nie załaduję Bitmapy w Inspektorze obiektów.
Ktoś wie co jest przyczyną tych błędów?
//-------
Sorry za błąd w temacie, uciekło mi "w" ;)
Użytkownik DarkCez edytował ten post 11 listopad 2007, 13:11
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
W ostatnim czasie zająłem się przerabianiem istniejących komponentów, jednak napotkałem na kilka problemów, których nie potrafię ominąć.
1)Dodawanie nowych zdarzeń
Komponent oparty jest o TButton. Chcę dodać 2 nowe zdarzenia, które reagują na zachowanie myszy (najechanie na komponent i opuszczenie jego obszaru). W pliku *.h zamieszczam następujący kod:
__published: MESSAGE void _fastcall onmouseenter(TMessage &Msg); MESSAGE void _fastcall onmouseleave(TMessage &Msg); BEGIN_MESSAGE_MAP MESSAGE_HANDLER(CM_MOUSEENTER,TMessage, onmouseenter) MESSAGE_HANDLER(CM_MOUSELEAVE, TMessage, onmouseleave) END_MESSAGE_MAP(TMButton)
a w pliku *.cpp
void _fastcall TMButton::onmouseleave(TMessage &Msg) { Invalidate(); } void _fastcall TMButton::onmouseenter(TMessage &Msg) { Invalidate(); }
Komponent kompiluje i instaluje się bez problemu. Jednak po umieszczeniu go na formie dostaję komunikat o abym zapisał wszystko i wyłączył Buildera gdyż nastąpiło przepełnienie stosu.
2) Komponent oparty o TShape zawierający Bitmapę
w pliku *.h mam następujące deklaracje
private: Graphics::TBitmap *Bitmapa; void __fastcall SetBitmap(Graphics::TBitmap *Value); protected: void __fastcall TShapeButton::Paint(); public: __fastcall TShapeButton(TComponent* Owner); __published: __property Graphics::TBitmap *pBitmap = {read=Bitmapa, write=SetBitmap,stored=true};//= {write=Bitmap, read = write=Bitmap};
W pliku *.cpp
void __fastcall TShapeButton::Paint() { if (Bitmapa)Canvas->Draw(0,0,Bitmapa); } //--------------------------------------------------------------------------- void __fastcall TShapeButton::SetBitmap(Graphics::TBitmap *Value) { if (Value == NULL)return; else{ if (!Bitmapa)Bitmapa= new Graphics::TBitmap(); Bitmapa->Assign(Value); Invalidate(); } }
Komponent kompiluje się i instaluje bezproblemowo. W fazie projektowania (kiedy położę go na formę ) też wszystko jest OK. Jednka kiedy w Inspektorze obiektów załaduję do niego bitmapę to po kompilacji i próbie uruchomienia dostaję komunikat ""EReadError with message "Invalid Property Path"". Komunikat nie pojawia się kiedy nie załaduję Bitmapy w Inspektorze obiektów.
Ktoś wie co jest przyczyną tych błędów?
//-------
Sorry za błąd w temacie, uciekło mi "w" ;)
Użytkownik DarkCez edytował ten post 11 listopad 2007, 13:11