Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Наведении мыши на объект

2.1K
15 октября 2004 года
ADanilov
33 / / 15.10.2004
У объекта Label есть событие OnMouseMove, OnMouseEnter и т.д. по которому можно настроить любое действие.

Меня же интересует есть ли такое подобие этих действий у ComboBox, т.к. этого действия я там не нашел.
243
16 октября 2004 года
pacific_7
1.9K / / 06.09.2004
Цитата:
Originally posted by ADanilov
У объекта Label есть событие OnMouseMove, OnMouseEnter и т.д. по которому можно настроить любое действие.

Меня же интересует есть ли такое подобие этих действий у ComboBox, т.к. этого действия я там не нашел.


Самое простое (хотя, наверно и самое корявое) решение - при наведении мыши на форму начиинать сравнивать через определенные интервалы времени координаты курсора с координатами ComboBox. На всякий случай, взятие координат курсора:
TPoint CurrPos;//структура для хранения координат
GetCursorPos(&CurrPos);//Теперь в CurrPos.x - координаты Х, а в CurrPos.y - координаты У.

2.1K
16 октября 2004 года
ADanilov
33 / / 15.10.2004
Цитата:
Originally posted by pacific_7

Самое простое (хотя, наверно и самое корявое) решение - при наведении мыши на форму начиинать сравнивать через определенные интервалы времени координаты курсора с координатами ComboBox. На всякий случай, взятие координат курсора:
TPoint CurrPos;//структура для хранения координат
GetCursorPos(&CurrPos);//Теперь в CurrPos.x - координаты Х, а в CurrPos.y - координаты У.




А если посложнее решение, можно ли создать самомтоятельно событие для любого элемента. Ну, например, OnMouseMove?

1
16 октября 2004 года
kot_
7.3K / / 20.01.2000
Цитата:
Originally posted by ADanilov

А если посложнее решение, можно ли создать самомтоятельно событие для любого элемента. Ну, например, OnMouseMove?


Самое простое решение - обрабатывать сообщения винды:

Код:
switch(Msg.LParam)
    {
        case WM_RBUTTONUP:
            if (GetCursorPos(&MousePos))
            {
             //Твой код
            }
            break;
        case WM_LBUTTONUP:
         if (GetCursorPos(&MousePos))
            {
             //Твой код
            }
            break;
         
         case WM_MOUSEMOVE:{
           if (GetCursorPos(&MousePos))
            {
           //Твой код
           }
         
          }
        default:
            break;
    }

Естественно для этого необходимо зарегестрировать карту сообщений конкретному компоненту
 
Код:
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_DRAWITEM,TMessage,DrawItem)
MESSAGE_HANDLER(MYWM_NOTIFY,TMessage,MyNotify)
END_MESSAGE_MAP(TComboBox)

И установить функцию обработчик. И всех делов. Или вариант второй - наследовать от нужного компонента свой компонент - определив в нем нужные события. Если это события в компоненте для тебя жизненно важно - второй путь предпочтительней.
246
18 октября 2004 года
GIZMO
1.8K / / 30.07.2004
Цитата:
Originally posted by ADanilov

А если посложнее решение, можно ли создать самомтоятельно событие для любого элемента. Ну, например, OnMouseMove?



Общая схема сабклассирования какого-либо контрола:
В хедере...

 
Код:
private:    // User declarations
    TWndMethod OldControlWP; //это адрес "старой" оконной процедуры контрола
    void __fastcall SubClassControlWP(Messages::TMessage &Message);//это наша оконная процедура

в cpp
Код:
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
    //сохраняем адрес оконной проц. контрола
    OldControlWP = Control1->WindowProc;
    //устанавливаем нашу ок. проц.
    Control1->WindowProc = SubClassControlWP;
}
//------------------------------------------------
void __fastcall TForm1::SubClassControlWP(Messages::TMessage &Message)

{
  if (Message.Msg == code/*код сообщения WM_ и т. д.*/) {
    /*обрабатываем сообщение*/
    ...
    OldControlWP(Message);//незабываем вызвать старую оконную проц.
  }
  else
    OldControlWP(Message);//тоже самое
}
2.1K
19 октября 2004 года
ADanilov
33 / / 15.10.2004
[QUOTE]Originally posted by GIZMO


Возник еще один вопрос. В том случае если у элемента установлено свойствой Enabled = false , то у него не всплывает подсказка которая настроена по событию MouseMove. Можно ли это как то исправить?
246
19 октября 2004 года
GIZMO
1.8K / / 30.07.2004
Цитата:
Originally posted by ADanilov
[QUOTE]Originally posted by GIZMO


Возник еще один вопрос. В том случае если у элемента установлено свойствой Enabled = false , то у него не всплывает подсказка которая настроена по событию MouseMove. Можно ли это как то исправить?


Enabled = false -> вызывается EnableWindow(Handle, false)->MouseMove нет.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог