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

Вниз

Добавить новое событие   Найти похожие ветки 

 
kyn66 ©   (2005-08-24 16:07) [0]

Многие компоненты, в частности меня интересует TPanel, не имеют события MouseLeave. Каким образом его можно добавить для своих панелей на форме? Спасибо.


 
begin...end ©   (2005-08-24 16:14) [1]

CM_MOUSELEAVE обрабатывать?


 
Stakan ©   (2005-08-24 16:16) [2]

Вот нарисовал компонент

unit LeoPanel;

interface

uses
 Windows, Messages, SysUtils, Classes, Controls, ExtCtrls;

type
 TLeoPanel = 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 Register;

implementation

procedure Register;
begin
 RegisterComponents("Leo", [TLeoPanel]);
end;

{ TLeoPanel }

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;

end.


 
kyn66 ©   (2005-08-24 16:19) [3]

>> begin...end
Каким способом?

>> Stakan
А без дополнительного компонента никак?


 
begin...end ©   (2005-08-24 16:28) [4]

> kyn66 ©   (24.08.05 16:19) [3]

> Каким способом?

Например, способом [2].

> А без дополнительного компонента никак?

Можно и без дополнительного.

type
 TMyForm = class(TForm)
   Panel: TPanel;
   procedure FormCreate(Sender: TObject);
 private
   FOldWndProc: TWndMethod;
   procedure NewWndProc(var Message: TMessage);
 end;

...

procedure TMyForm.FormCreate(Sender: TObject);
begin
 FOldWndProc := Panel.WindowProc;
 Panel.WindowProc := NewWndProc
end;

procedure TMyForm.NewWndProc(var Message: TMessage);
begin
 if Message.Msg = CM_MOUSELEAVE then
   Beep;  // <-- Код обработки сообщения
 FOldWndProc(Message)
end


 
Яся   (2005-08-24 16:30) [5]

WindowProc подменить


 
Leonid Troyanovsky ©   (2005-08-24 16:47) [6]


> kyn66 ©   (24.08.05 16:19) [3]

> А без дополнительного компонента никак?


http://groups.google.com/group/fido7.ru.delphi/msg/3569462a494a2eae

--
Regards, LVT.


 
sniknik ©   (2005-08-24 16:49) [7]

просто положи описание компонента (ниже), до формы, методы в код как обычно.

type
 TPanel = class(TCustomPanel)
 private
  procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
  procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
 public
   property DockManager;
 published
   property Align;
   property Alignment;
   property Anchors;
   property AutoSize;
   property BevelInner;
   property BevelOuter;
   property BevelWidth;
   property BiDiMode;
   property BorderWidth;
   property BorderStyle;
   property Caption;
   property Color;
   property Constraints;
   property Ctl3D;
   property UseDockManager default True;
   property DockSite;
   property DragCursor;
   property DragKind;
   property DragMode;
   property Enabled;
   property FullRepaint;
   property Font;
   property Locked;
   property ParentBiDiMode;
   property ParentBackground;
   property ParentColor;
   property ParentCtl3D;
   property ParentFont;
   property ParentShowHint;
   property PopupMenu;
   property ShowHint;
   property TabOrder;
   property TabStop;
   property Visible;
   property OnCanResize;
   property OnClick;
   property OnConstrainedResize;
   property OnContextPopup;
   property OnDockDrop;
   property OnDockOver;
   property OnDblClick;
   property OnDragDrop;
   property OnDragOver;
   property OnEndDock;
   property OnEndDrag;
   property OnEnter;
   property OnExit;
   property OnGetSiteInfo;
   property OnMouseDown;
   property OnMouseMove;
   property OnMouseUp;
   property OnResize;
   property OnStartDock;
   property OnStartDrag;
   property OnUnDock;
 end;

 TForm1 = class(TForm)
 ....

procedure TPanel.CMMouseEnter(var Message: TMessage);
begin
 Caption:= "Enter";
end;

procedure TPanel.CMMouseLeave(var Message: TMessage);
begin
 Caption:= "Leave";
end;


 
kyn66 ©   (2005-08-24 17:19) [8]

Всем спасибо конечно..., но я никак не въеду..(да пора идти в отпуск, совсем голова не варит), событие мы опишем, пропишем. А как потом его конкретно на все панели, требующие этой обработки подвесить?


 
Юрий Зотов ©   (2005-08-24 18:09) [9]

СМ_MOUSEENTER/LEAVE транслируются форме, поэтому можно обрабатывать прямо в ней, без порождения компонентов.


 
Leonid Troyanovsky ©   (2005-08-25 08:56) [10]


> Юрий Зотов ©   (24.08.05 18:09) [9]
> СМ_MOUSEENTER/LEAVE транслируются форме, поэтому можно


Если форма - парент.

--
Regards, LVT.


 
kyn66 ©   (2005-08-25 10:54) [11]

Всем спасибо, заработало как и хотел !



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

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

Наверх




Память: 0.49 MB
Время: 0.035 c
1-1125300062
Cherrex
2005-08-29 11:21
2005.09.18
Рамка ячейки EXCEL


8-1114532632
vic_774N
2005-04-26 20:23
2005.09.18
алгоритм сравнения двух изображений ...


3-1123151958
mvalera
2005-08-04 14:39
2005.09.18
Сортировка данных в завязаных базах.


1-1125061020
Scorpio
2005-08-26 16:57
2005.09.18
Копирование файлов


2-1123769274
Гость22
2005-08-11 18:07
2005.09.18
Как при запуске DBNavigator скрыть некоторые кнопки?