Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.015 c
3-77732
dimonka
2003-06-30 22:55
2003.07.24
Fast Report


14-78123
vizier
2003-07-08 20:43
2003.07.24
grid to be?


1-77833
Checist [root]
2003-07-12 02:26
2003.07.24
Свойства компонента


7-78159
Still Swamp
2003-05-12 20:36
2003.07.24
Проблема с RS232


1-77884
Александр М.
2003-07-14 02:23
2003.07.24
Картинка на рабочем столе




   Наверх