Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++ Builder] Добавить событие OnMouseLeave кнопке 
:(
    Опции темы
Vorona
  Дата 27.12.2006, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 12.10.2004
Где: Украина, Днепропе тровск

Репутация: нет
Всего: 2



Прошу помощи в написании события OnMouseLeave для кнопки))) Новый компонет на основе кнопки создала, догадываюсь, что далее должен последовать код после 
__published:
тут

Код

class PACKAGE TButtonMy : public TButton
{
private:
protected:
public:
        __fastcall TButtonMy(TComponent* Owner);
__published:
};


Еще предполагаю, что разрабатывать это событие надо на основе OnMouseMove... Но бог не наделил знаниями написать сам код...)
Может можно достать как-то его из других компонентов, где есть такое событие? Если да, то как его достать?))

Это сообщение отредактировал(а) Vorona - 27.12.2006, 22:56
PM MAIL WWW   Вверх
Rockie
Дата 28.12.2006, 06:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

Репутация: 13
Всего: 31



Vorona, Здесь задавал вопрос про Label со свойствами ссылки, SenkraD приводил похожий пример. Не совсем то что надо но должно помочь.

[недоглядел, исправил]

Это сообщение отредактировал(а) Rockie - 28.12.2006, 07:06


--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
Vorona
Дата 28.12.2006, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 12.10.2004
Где: Украина, Днепропе тровск

Репутация: нет
Всего: 2



Rockie, 
Поможет 100 процентов, в крайнем случае его же и использую)))
Можно только вопросиков пару -
1) Наш эдит в данной ситуации - наследник от кого?
2) Что такое TWndMethod,  Messages::TMessage??

Приведу код для ясности 

Код

//Headerfile
private:
   TWndMethod OldLabelProc;
   void __fastcall NewLabelProc(Messages::TMessage &Message);

//CppFile
__fastcall TForm1::TForm1(TComponent *Owner)
    :TForm(Owner)
{
   OldLabelMethod         = Label1->WindowProc;
   Label1->WindowProc = NewLabelProc;
}

void __fastcall TForm1::NewLabelProc(Messages::TMessage &Message)
{
    if(Message.Msg == CM_MOUSEENTER)//Мышь вошла в пределы лабли
    {
       Label1->Font->Color = clBlue;
       Cursor = crHandPoint;
    }
    else
    {
        if(Message.Msg == CM_MOUSELEAVE)//Мышь вышла за пределы лабли
       {
          Label1->Font->Color = clBlack;
          Cursor = crDefault;
       }
    } 
    OldLabelMethod(Message);//остальные месаги обрабатывает по умолчанию
}

PM MAIL WWW   Вверх
Alexeis
Дата 29.12.2006, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 23
Всего: 459



Хочу немного уточнить. Сообщение CM_MOUSELEAVE не виндовое и генерится в VCL. У него есть проблемка, к сожалению часто при резких движениях мыши оно не срабатывает. Единственный надежный способ это перехват мышки вне формы, по всему экрану. Т.е. как только координаты ее вне указанного прямоугольника, то нужно генерить  CM_MOUSELEAVE самостоятельно. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Rockie
Дата 29.12.2006, 18:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

Репутация: 13
Всего: 31



Vorona, какой именно эдит? Посмотреть, от чего отнаследован компонент, можно нажав f1 на компоненте на форме, а затем Hierarchy. 

Цитата(Vorona @  28.12.2006,  22:52 Найти цитируемый пост)
2) Что такое TWndMethod,  Messages::TMessage??

Для активного окна в Windows обрабатывается куча сообщений(например "перерисовывать окно", "проверить, не изменила ли местоположение мышь" и тд.) В VCL можно получить очередь сообщений отдельно для каждого контрола:
Код
OldLabelMethod      = Label1->WindowProc;

 "Встраиваемся" в эту очередь сообщений, проверяем, находится ли мышь в поле метки, если надо обрабатываем и возвращаем контроль Windows. Кстати здесь очепятка, вместо OldLabelMethod должен быть OldLabelProc.


--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
Vorona
Дата 30.12.2006, 00:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 12.10.2004
Где: Украина, Днепропе тровск

Репутация: нет
Всего: 2



Rockie, 
Ок спасибо за инфу, буду пытаться разобраться, возможно (скорее всего) возникнет еще куча вопросов....)))

Цитата

Vorona, какой именно эдит?

Я имела в виду кнопка  smile 


alexeis1, 
Я чувствую, что настоялько плохо в этом всем разбираюсь, что не понимаю ваш пост  smile 
Т.е. приведенный и обсуждаемый код может не всегда срабатывать?
Надо перехватывать не те сообщения??... Не понимаю  smile 
PM MAIL WWW   Вверх
Alexeis
Дата 30.12.2006, 01:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 23
Всего: 459



Цитата(Vorona @  30.12.2006,  00:52 Найти цитируемый пост)
Т.е. приведенный и обсуждаемый код может не всегда срабатывать?

Попробуйте поставить компонент, у которого вы хотите перехватывать сообщение, на самый край формы. А в обработчике поставьте бряк. И еще желательно в настройках мыши поставить максимальную скорость. После этого наведите мышь на компонент и резко дергайте мышь, так чтобы она вышла за пределы формы. При таких условиях событие может и не наступить вообще. Это было замечено в делфи, но поскольку VCL у них общая, то и проблема должна быть общая.




--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Vorona
Дата 30.12.2006, 23:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 12.10.2004
Где: Украина, Днепропе тровск

Репутация: нет
Всего: 2



alexeis1, 

Ну у меня ситуация на самом деле проще - это же не коммерческий проект, а всего-навсего лаба...) Поэтому лишь бы как-нибудь работало...)
PM MAIL WWW   Вверх
Vorona
Дата 1.1.2007, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 12.10.2004
Где: Украина, Днепропе тровск

Репутация: нет
Всего: 2



Стоп,я чего-то не понимаю..))) А разве этот код - это вообще код нового компонента??
Причем там форма вообще??? 

Мне надобно написать свой компонент, в палитру добавить... Форма - это ж уже потом...
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0557 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.