Форум: "Основная";
Текущий архив: 2005.09.18;
Скачать: [xml.tar.bz2];
ВнизДобавить новое событие Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.011 c