Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Написание своего компонента / 2 сообщений из 2, страница 1 из 1
03.09.2005, 21:06
    #33250021
noligin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написание своего компонента
Вот решил в целях обучения написать свой компонент на основе TImage.
Цель такова сделать обычный TImage, но с двумя дополнительными картинками, чтобы при событии CM_MOUSEENTER и CM_MOUSELEAVE основная картинка менялась на одну или вторую.
В класс включаю 2 TImage. Назначаю процедуры обработки. Вобщем привожу код:
это .h
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
class PACKAGE TRolImage : public TImage
{
private:
        __fastcall TPicture *imTop;
        __fastcall TPicture *imBottom;
protected:

        void __fastcall MouseEnter(TMessage &Msg) {Picture = imBottom;}
        void __fastcall MouseLeave(TMessage &Msg) {Picture = imTop;}
        BEGIN_MESSAGE_MAP
                MESSAGE_HANDLER(CM_MOUSEENTER, TMessage, MouseEnter)
                MESSAGE_HANDLER(CM_MOUSELEAVE, TMessage, MouseLeave)
        END_MESSAGE_MAP(TImage)
        TPicture * __fastcall readImageTop()  {return imTop;}
        void __fastcall writeImageTop(TPicture *pic) {imTop = pic;}
        TPicture * __fastcall readImageBottom() {return imBottom;}
        void __fastcall writeImageBottom(TPicture *pic) {imBottom = pic;}
public:
        __fastcall TRolImage(TComponent* Owner);
__published:
        __property __fastcall TPicture *imageTop  = {read = imTop, write = imTop};
        __property __fastcall TPicture *imageBottom = {read = imBottom, write = imBottom};

};

и .cpp
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
static inline void ValidCtrCheck(TRolImage *)
{
        new TRolImage(NULL);
}
//---------------------------------------------------------------------------
__fastcall TRolImage::TRolImage(TComponent* Owner)
        : TImage(Owner)
{
        imTop = new TPicture();
        imBottom = new TPicture();
}
//---------------------------------------------------------------------------
namespace Rolimage
{
        void __fastcall PACKAGE Register()
        {
                 TComponentClass classes[ 1 ] = {__classid(TRolImage)};
                 RegisterComponents("Standard", classes,  0 );
        }
}

А проблема вот в чем: при помещении этого компонента на форму, пытаюсь назначить какому нить своему новому image значение, вроде бы как обычно загружается из файла, но потом выпадает исключение.
Если делать в run-time, например вот так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
void __fastcall TForm1::Button1Click(TObject *Sender)
{
        if (OpenPictureDialog1->Execute())
        {
                RolImage1->imageTop->LoadFromFile(OpenPictureDialog1->FileName);
                RolImage1->Picture->LoadFromFile(OpenPictureDialog1->FileName);
        }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
        if (OpenPictureDialog1->Execute())
        {
                RolImage1->imageBottom->LoadFromFile(OpenPictureDialog1->FileName);
        }

}

то все работает, но мне надо чтоб в процессе разработки эти картинки поназначть.
Может кто нибудь помочь? Может там какой нибудь редактор свойства нужно сделать или еще чего?
...
Рейтинг: 0 / 0
03.09.2005, 21:13
    #33250025
noligin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написание своего компонента
Фу, блин, совсем зашился
Правильный аш-ник:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
class PACKAGE TRolImage : public TImage
{
private:
        __fastcall TPicture *imTop;
        __fastcall TPicture *imBottom;
protected:

        void __fastcall MouseEnter(TMessage &Msg) {Picture = imBottom;}
        void __fastcall MouseLeave(TMessage &Msg) {Picture = imTop;}
        BEGIN_MESSAGE_MAP
                MESSAGE_HANDLER(CM_MOUSEENTER, TMessage, MouseEnter)
                MESSAGE_HANDLER(CM_MOUSELEAVE, TMessage, MouseLeave)
        END_MESSAGE_MAP(TImage)
        void __fastcall writeImageTop(TPicture *pic) {imTop->Assign(pic);}
        void __fastcall writeImageBottom(TPicture *pic) {imBottom->Assign(pic);}
public:
        __fastcall TRolImage(TComponent* Owner);
__published:
        __property __fastcall TPicture *imageTop  = {read = imTop, write = writeImageTop};
        __property __fastcall TPicture *imageBottom = {read = imBottom, write = writeImageBottom};

};

Теперь все нормально работает. Рано запаниковал
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Написание своего компонента / 2 сообщений из 2, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]