Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Написать свое OnMouseDown. / 9 сообщений из 9, страница 1 из 1
13.10.2003, 10:21
    #32290983
Cauchy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написать свое OnMouseDown.
Подскажите как в C++Builder 6 написать свою функцию для события OnMouseMove и OnMouseDown. Т. е. у меня динамически создаются компоненты TImage, у всех должно быть одинаковые события OnMouseMove и OnMouseDown.
Пытался сделать так:
Код: plaintext
1.
2.
3.
4.
void __fastcall MyMouseMove(TObject *Sender, TShiftState Shift,
      int X, int Y)
{

}

А потом
Код: plaintext
Im->OnMouseMove = MyMouseMove;

Выдает ошибку: Cannot convert ...

Создал невидимый TImage, для него написал MouseMove и сделал
Код: plaintext
Im->OnMouseMove = Image1->OnMouseMove;


Но все же хотелось бы обойтись без лишнего Image.
Подскажите как описать MyMouseMove и MyMouseDown чтобы можно было сделать
Код: plaintext
Im->OnMouseMove = MyMouseMove;
...
Рейтинг: 0 / 0
13.10.2003, 11:17
    #32291020
ZrenBy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написать свое OnMouseDown.
void __fastcall TForm1:: MyMouseMove(TObject *Sender, TShiftState Shift,
int X, int Y)
...
Рейтинг: 0 / 0
13.10.2003, 12:44
    #32291143
Cauchy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написать свое OnMouseDown.
Спасибо, ZrenBy.
А нельзя ли сделать MyMouseMove без привязки к какому либо конкретному компоненту при проектировании?
Ведь
Код: plaintext
1.
void __fastcall TForm1::MyMouseMove(TObject *Sender, TShiftState Shift, 
int X, int Y)

все равно привязывается к компоненту Form1.
Мне бы хотелось написать процедурку обработки этого события, а при создании компонента просто указывать, что при OnMouseMove выполняется такая-то процедура.
Проблема в том что я не знаю как описать тип этой процедуры, чтобы была совместимость типов.

Конечно можно сделать как предложил ZrenBy, но все же хотелось бы сделать процедуру без привязки к конкретному компоненту. Помогите, кто знает.
...
Рейтинг: 0 / 0
13.10.2003, 13:04
    #32291171
ZrenBy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написать свое OnMouseDown.
Метод здесь\r
\r
TMethod Mth;\r
Mth.Data = this \r
Mth.Code = MyMouseMove\r
\r
/topic/50734
...
Рейтинг: 0 / 0
13.10.2003, 13:25
    #32291193
Cauchy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написать свое OnMouseDown.
Что-то не работает...
Написал
Код: plaintext
1.
2.
3.
TMethod Mth; 
    Mth.Data = this;
    Mth.Code = MyMouseMove;
    Im->OnMouseMove = *(TNotifyEvent*)&Mth;

Пишет ошибку: Cannot convert 'void (__fastcall * (__closure)(TObject *))(TObject *)' to 'void (__fastcall * (__closure)(TObject *,TShiftState,int,int))(TObject *,TShiftState,int,int)'
хотя MyMouseMove:
Код: plaintext
1.
2.
3.
4.
void __fastcall MyMouseMove(TObject *Sender, TShiftState Shift,
      int X, int Y)
{
   //jkjhjhj
}

Что-то не понял в чем дело?
...
Рейтинг: 0 / 0
13.10.2003, 13:48
    #32291225
ZrenBy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написать свое OnMouseDown.
>>MyMouseMove(TObject *Sender, TShiftState Shift,int X, int Y)

MyMouseMove(TObject *AFake,TObject *Sender, TShiftState Shift,
int X, int Y)

В AFake передается Mth.Data = this
...
Рейтинг: 0 / 0
13.10.2003, 13:57
    #32291239
ZrenBy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написать свое OnMouseDown.
//void __fastcall MyMouseMove(TObject *Sender, TShiftState Shift, int X, int Y);

void __fastcall (__closure *TMouseEvent)(System::TObject* Sender, TMouseButton
Button, Classes::TShiftState Shift, int X, int Y);

void __fastcall MyMouseMove(TObject *AFake,TObject *Sender, TShiftState Shift,int X, int Y){
Form1->ListBox1->Items->Add(IntToStr(X));
}

void __fastcall TForm1::Button2Click(TObject *Sender){
TMethod Mth;
Mth.Data = this;
Mth.Code = MyMouseMove;
Form1->OnMouseMove = *(TMouseMoveEvent*)&Mth;
}
...
Рейтинг: 0 / 0
13.10.2003, 14:01
    #32291245
ZrenBy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написать свое OnMouseDown.
Покрасивше

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
void __fastcall MyMouseMove(TObject *AFake,TObject *Sender, TShiftState Shift,int X, int Y){
  Form1->ListBox1->Items->Add(IntToStr((Integer)AFake));
}

void __fastcall TForm1::Button2Click(TObject *Sender){
TMethod Mth;
  Mth.Data = this;
  Mth.Code = MyMouseMove;
  Form1->OnMouseMove = *(TMouseMoveEvent*)&Mth;
}
...
Рейтинг: 0 / 0
13.10.2003, 14:26
    #32291271
Cauchy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написать свое OnMouseDown.
Работает!!!!!!
Оказывается дело было в AFake и TMouseMoveEvent (я то по неопытности писал TNotifyEvent).

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


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