Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
3-1123238066
Sigetta
2005-08-05 14:34
2005.09.18
Lookup поля ADODataSet


4-1122532698
MegaVolt
2005-07-28 10:38
2005.09.18
Какое событие отвечает за изменение размеров колонки ListView?


1-1125238695
_M_I_X_
2005-08-28 18:18
2005.09.18
Сохранение файла с расширением


6-1116785814
Uninstall
2005-05-22 22:16
2005.09.18
В idTCPServer.onExecute узнать IP того...


3-1123074767
FireMan_Alexey
2005-08-03 17:12
2005.09.18
Не подскажите как можно программно установить INTERBASE





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский