Главная страница
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.024 c
3-77713
boka
2003-06-30 07:35
2003.07.24
Как сохранить файл отчета (*.qrp).


3-77783
OlkaGTS
2003-07-01 17:22
2003.07.24
Delphi + поля объекта OLE в MS Access


1-77901
EvgeniyR
2003-07-14 07:48
2003.07.24
Отключение


14-78099
Dmitriy O.
2003-07-08 10:28
2003.07.24
Как качественно


14-78057
Andryk
2003-07-09 15:22
2003.07.24
Письмо Пьера Безухова :о)))