Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Изменение компонента RichEdit


Автор: Uch3nik 26.5.2007, 17:04
Подскажите, как при работе с RichEdit создать для него события: OnMouseLeave и OnMouseEnter!? пробовал под RichEdit сунуть Label, где такое событие обрабатывавется, но не выходит =). Может можно как то сам компонент изменить??? Если можно... скажите как это сделать!?

Автор: Klin 26.5.2007, 17:46
Цитата(Uch3nik @  26.5.2007,  18:04 Найти цитируемый пост)
 OnMouseLeave и OnMouseEnter!?

Uch3nik, имхо таких событий нет есть OnMouseMove - движение мыши на объекте, OnMouseDown - нажатие мыши и OnMouseUp - кнопка мыши отпущена. 

Цитата(Uch3nik @  26.5.2007,  18:04 Найти цитируемый пост)
ь Label, где такое событие обрабатывавется, но не выходит =)

Да откуда это событие вы взяли?


Цитата(Uch3nik @  26.5.2007,  18:04 Найти цитируемый пост)
Может можно как то сам компонент изменить??? Если можно... скажите как это сделать!?

А может сам компилятор переделаем?

Автор: Uch3nik 27.5.2007, 10:17
Klin,  OnMouseLeave и OnMouseEnter - это события Label! Хочу сделать то же самое для RichEdit! 
Цитата
А может сам компилятор переделаем?
 - =)))) идея конечно не плохая... как тогда реализовать  событие, когда мыша находится над RichEdit!? Ну ведь как то это ж должно реализовываться?  smile 

Автор: Klin 27.5.2007, 11:20
Че-то я ступил smile Ну OnMouseEnter - имхо аналог OnMouseMove, ну а второй можно эмулировать расположим действие OnMouseMove - на компоненте окружаещем RichEdit.

p.s. еще можно поискать компонент - с этими действиями (похожим на RIchEdit), но я такого не знаю :( Переделка компонента дела радикальное. Ну а идея про Label - посмотрим, что можно сделать smile

Автор: Uch3nik 27.5.2007, 11:38
бывает!  smile  Кстати, прошу обращаться на ты, а то слишком официально! Не, Label не реагирует, когда на нём ещё и RichEdit )) а всё ж, как изменить встроеный компонент Builder`а =), так для расширения кругозора...

Автор: Klin 27.5.2007, 11:59
Цитата(Uch3nik @  27.5.2007,  12:38 Найти цитируемый пост)
Кстати, прошу обращаться на ты, 

Многол экзаменов, входит в привычку smile 


Цитата(Uch3nik @  27.5.2007,  12:38 Найти цитируемый пост)
встроеный компонент Builder`а =), так для расширения кругозора...

Имхо легче свой создать.

p.s. а еще легче работать с функцией GetCursorPos(TPoint*)

Код

 TPoint mouse;
 GetCursorPos (&mouse);

Автор: Uch3nik 27.5.2007, 12:24
Цитата(Klin @  27.5.2007,  11:59 Найти цитируемый пост)
p.s. а еще легче работать с функцией GetCursorPos(TPoint*)

 
это ты по поводу OnMouseMove?

ты прав OnMouseMove - практически идентично OnMouseEnter, осталось тока немного доработать код, спасибо! я как то это пропустил)))

Автор: Klin 27.5.2007, 13:16
Вот, что у меня пока получилось:

Дополнение к RichEdit
Код

class TRichEditPlus: public TRichEdit
{
public:
       //Событие OnMouseEnter
       virtual void __fastcall OnMouseEnter(TMessage &msg){
               Text = "1";
       }
       //Событие OnMouseLeave
       virtual void __fastcall OnMouseLeave(TMessage &msg){
                Text = "2";
       }
      _fastcall TRichEditPlus::TRichEditPlus(TRichEdit *rParent, TComponent*Owner):TRichEdit(Owner){
               Left = rParent->Left;
               Top = rParent->Top;
               OnMouseDown = rParent->OnMouseDown;
               OnMouseUp = rParent->OnMouseUp;
               Text = rParent->Text;
      }
BEGIN_MESSAGE_MAP
       VCL_MESSAGE_HANDLER(CM_MOUSEENTER,TMessage,OnMouseEnter);
       VCL_MESSAGE_HANDLER(CM_MOUSELEAVE,TMessage,OnMouseLeave);
END_MESSAGE_MAP(TRichEdit)
};


Вызов (к примеру на FormCreate
Код

 TRichEditPlus *my = new TRichEditPlus(RichEdit1,this);
 my->Parent = this;


Минус в том, что действия статистические. Но еще подумаю smile

Автор: Uch3nik 27.5.2007, 13:28
вот спасибо! мне ещё знаний не хватает такое писать...=) но о нечто таком я думал!

Автор: Klin 27.5.2007, 16:27
Динамики, пока не получилось, но немного упростил операции.

Для добавления действий, "входа и выхода" курсора мыши, на определенный объект используйте код

Создаем новый класс
Код

class TMouseEx: public TRichEdit
{
  void __fastcall OnMouseEnter(TMessage &msg) {
   // действие над объектом при наведении мыши на объект
  };
  void __fastcall OnMouseExit(TMessage &msg) {
   // действие над объектом при выводе мыши с объект
  };
 public:
  __fastcall TMouseEx::TMouseEx(TComponent*Owner):TRichEdit(Owner) {
  };
BEGIN_MESSAGE_MAP
 VCL_MESSAGE_HANDLER(CM_MOUSEENTER,TMessage,OnMouseEnter);
 VCL_MESSAGE_HANDLER(CM_MOUSELEAVE,TMessage,OnMouseExit);
END_MESSAGE_MAP(TRichEdit)
};


Используем в программе
Код

 TMouseEx *my = new TMouseEx(this);
 my->Parent = this;
 // далее указываем по своему желанию и остальные свойства (Left, Top и т.п.)


* для использования дополнительных действий мыши для любого компонента, замените TRichEdit на класс вашего компонента (в код #1) 

Автор: Uch3nik 27.5.2007, 16:32
спасибо! буду разбираться  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)