![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Добавить новое событие [D7, WinXP]
kyn66 © (2005-08-24 16:07:00)Многие компоненты, в частности меня интересует TPanel, не имеют события MouseLeave. Каким образом его можно добавить для своих панелей на форме? Спасибо.
kyn66 (2005-08-25 10:54:00) [1]Всем спасибо, заработало как и хотел !
Leonid Troyanovsky (2005-08-25 08:56:00) [2]
> Юрий Зотов © (24.08.05 18:09) [9]
> СМ_MOUSEENTER/LEAVE транслируются форме, поэтому можно
Если форма - парент.
--
Regards, LVT.
Юрий Зотов (2005-08-24 18:09:00) [3]СМ_MOUSEENTER/LEAVE транслируются форме, поэтому можно обрабатывать прямо в ней, без порождения компонентов.
kyn66 (2005-08-24 17:19:00) [4]Всем спасибо конечно..., но я никак не въеду..(да пора идти в отпуск, совсем голова не варит), событие мы опишем, пропишем. А как потом его конкретно на все панели, требующие этой обработки подвесить?
sniknik (2005-08-24 16:49:00) [5]просто положи описание компонента (ниже), до формы, методы в код как обычно.
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;
Leonid Troyanovsky (2005-08-24 16:47:00) [6]
> kyn66 © (24.08.05 16:19) [3]
> А без дополнительного компонента никак?
http://groups.google.com/group/fido7.ru.delphi/msg/3569462a494a2eae
--
Regards, LVT.
Яся (2005-08-24 16:30:00) [7]WindowProc подменить
begin...end (2005-08-24 16:28:00) [8]> 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
kyn66 (2005-08-24 16:19:00) [9]>> begin...end
Каким способом?
>> Stakan
А без дополнительного компонента никак?
Stakan (2005-08-24 16:16:00) [10]Вот нарисовал компонент
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.
begin...end (2005-08-24 16:14:00) [11]CM_MOUSELEAVE обрабатывать?