Форум: "Основная";
Текущий архив: 2003.07.24;
Скачать: [xml.tar.bz2];
Внизскрыть всплывающее меню 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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.008 c