![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
как узнать что мышка ушла с объекта - Panel1? [D6]
starlit © (2005-03-02 23:23:00)чтобы скрыть эту панель.
необходимо сделать что то походее на выпадающие меню.
Knight (2005-03-06 00:07:00) [1]А можно так... при перемещении мыши над панелью, проверять её на начальный размер, если так, то разворачивать и запускать таймер проверки положения курсора. Если он вышел за область панели, останавливать таймер и схлопывать панель...
procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if Panel1.Width=10 then begin
Panel1.Width:=300;
Timer1.Enabled:=True;
end;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if not PtInRect(Panel1.BoundsRect,Panel1.ScreenToClient(Mouse.CursorPos)) then begin
Timer1.Enabled:=False;
Panel1.Width:=10;
end;
end;
StarLit (2005-03-05 23:40:00) [2]Ozone, при ЗАЕЗДЕ мышки на поле панели отраб. процедура клика по этой панели
РшЕус (2005-03-04 15:50:00) [3]Можно использовать системный обьект Mouse:
If Mouse.CursorPos.X >Panel1.Width...
Ozone (2005-03-04 07:55:00) [4]
> [13] StarLit (04.03.05 00:09)
Скажи мне, пожалуйста, что ты хотел этим получить.
StarLit (2005-03-04 00:09:00) [5]procedure TForm1.FormCreate(Sender: TObject);
begin
TMyPanel(Panel1).OnMouseEnter:=Panel1Click;
end;
сделал так, но ни какой реакции....
Gero (2005-03-03 22:34:00) [6]В [7] посте ошибка —
TMyPanel= class(TPanel)
procedure TLeoPanel.CMMouseEnter(var Message: TMessage);
Естественно, это один класс.
Sun bittern (2005-03-03 22:29:00) [7]А ты все-все сделал как в stakan © (03.03.05 12:43) [7] ?
Нас терзают смутные сомненья :)
StarLit (2005-03-03 22:20:00) [8]CMMouseEnter - это компилятор не признает...
нет не работает
Gero (2005-03-03 20:36:00) [9]
> StarLit (03.03.05 20:03)
> что нибудь есть более менее рабочее?
А, что [7] не работает?
StarLit (2005-03-03 20:03:00) [10]stakan, sorry но что то я не понял....
CMMouseEnter - это откуда?
что нибудь есть более менее рабочее? (если не сложно конечно)
stakan (2005-03-03 12:43:00) [11]
TMyPanel = class(TPanel)
private
FOnMouseLeave: TNotifyEvent;
FOnMouseEnter: TNotifyEvent;
procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
published
property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter;
property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave;
end;
...
procedure TLeoPanel.CMMouseEnter(var Message: TMessage);
begin
inherited;
if Assigned(FOnMouseEnter) then
FOnMouseEnter(Self);
end;
procedure TLeoPanel.CMMouseLeave(var Message: TMessage);
begin
inherited;
if Assigned(FOnMouseLeave) then
FOnMouseLeave(Self);
end;
Что - то вроде этого
Gero (2005-03-03 12:39:00) [12]
> StarLit (03.03.05 12:06)
Наследника компонента написать сумеешь?
StarLit (2005-03-03 12:06:00) [13]А пример можно?
Ozone (2005-03-03 08:47:00) [14]
> [3] Gero © (03.03.05 08:29)
Да, я ошибся. Нужно CM_MOUSEENTER, CM_MOUSELEAVE
Gero (2005-03-03 08:29:00) [15]Нет, WM_MOUSEENTER здесь ни при чем.
Ozone (2005-03-03 06:44:00) [16]WM_MOUSELEAVE + WM_MOUSEENTER
default (2005-03-03 00:34:00) [17]можно через OnMouseMove панели и её родителя