Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.07.24;
Скачать: CL | DM;

Вниз

скрыть всплывающее меню TPopupMenu   Найти похожие ветки 

 
Dyuzhev ©   (2003-07-11 11:32) [0]

Возникла следующая проблема: необходимо сделать меню в
некоторой части формы (не вверху). Нужно чтобы при наведении курсора
на некоторый текст ниже этого текста всплывало несколько пунтктов меню.
А при уползании курсора с текста оно _автоматически_ (а не после нажатия
клавиши мыши) исчезало.

Сделал следующее: у метки TLabel есть обработчик OnMouseMove:
Popupmenu1.Popup(x+10,y+20);

Как убрать теперь это меню ?


Может быть есть уже готовая компонента, которая позволяет делать меню в
любом
месте формы, а не только вверху ?

Или как-то все это по другому делается ?


 
Song ©   (2003-07-11 12:18) [1]

ClientToScreen()


 
VMcL ©   (2003-07-11 13:20) [2]

>Dyuzhev © (11.07.03 11:32)

Лучше OnMouseEnter, OnMouseLeave


 
Dyuzhev ©   (2003-07-11 20:08) [3]

>Song © (11.07.03 12:18)
>ClientToScreen()


Как изменение координат может мне помочь скрыть меню ?


 
Dyuzhev ©   (2003-07-11 20:12) [4]

>VMcL © (11.07.03 13:20)

>Лучше OnMouseEnter, OnMouseLeave

Привожу код новой компоненты:
...
type
TPopupMenuEx = class (TPopupMenu)
private
{ Private declarations }
FOnMouseLeave: TNotifyEvent;
FOnMouseEnter: TNotifyEvent;
procedure CMMouseEnter(var msg: TMessage); message CM_MOUSEENTER;
procedure CMMouseLeave(var msg: TMessage); message CM_MOUSELEAVE;
protected
{ Protected declarations }
procedure DoMouseEnter; dynamic;
procedure DoMouseLeave; dynamic;
public
{ Public declarations }
published
{ Published declarations }
property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter;
property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave;
end;

procedure Register;

implementation

procedure Register;
begin
RegisterComponents("Additional", [TPopupMenuEx]);
end;

{ TPopupMenuEx }

procedure TPopupMenuEx.CMMouseEnter(var msg: TMessage);
begin
DoMouseEnter;
end;

procedure TPopupMenuEx.CMMouseLeave(var msg: TMessage);
begin
DoMouseLeave;
end;

procedure TPopupMenuEx.DoMouseEnter;
begin
if Assigned(FOnMouseEnter) then FOnMouseEnter(Self);
end;

procedure TPopupMenuEx.DoMouseLeave;
begin
if Assigned(FOnMouseLeave) then FOnMouseLeave(Self);
end;
end.
-------------------------------------------------

В самой программе в обработчике сведения курсора мыши с раскрытого меню пишу:

procedure TForm1.PopupMenuEx1MouseLeave(Sender: TObject);

begin
messagedlg("test",mtError,[mbOK],0);
end;


И ничего не происходит ! :( Тоже самое с MouseEnter.

Что делаю не так ?

Заранее спасибо.



 
Spawn ©   (2003-07-11 21:15) [5]

А може нужно ето делать для TMenuItem?


 
Dyuzhev ©   (2003-07-12 20:26) [6]

>Spawn © (11.07.03 21:15)
>А може нужно ето делать для TMenuItem?

Каким образом ?
Пример кода можешь привести ?



Страницы: 1 вся ветка

Текущий архив: 2003.07.24;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.022 c
14-78114
Peon
2003-07-06 15:38
2003.07.24
Подскажите решение простенькой задачи по математике


7-78179
dim-
2003-05-14 21:28
2003.07.24
Как отследить из какой программы была послана печать и сколько ко


3-77715
Nady
2003-06-30 15:44
2003.07.24
ADO+QReport =странный отчет


1-77849
Checist [root]
2003-07-12 19:37
2003.07.24
Сортировка в FileListBox е


3-77794
BoxTer
2003-07-02 12:42
2003.07.24
ADO запрос из таблиц,нах. в разных местах