Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Обработка "закрытия" плавающей панельи


Loginov Dmitry ©   (2006-07-01 16:36:00) 

Есть следующий код (можете польностью скопировать его к себе - скомпилится):


unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, ExtCtrls;

type
 TMyFloatingDockSiteClass = class(TCustomDockForm)
 protected
   // Обрабатывает закрытие формы
   procedure WM__CLOSE(var Msg: TMessage); message WM_CLOSE;
 end;

 TMyPanel = class(TPanel)  
 public
   constructor Create(AOwner: TComponent); override;

   // Очевидно здесь следует ловить сообщения о "закрытии" панельки,
   // но что это за сообщения - ХЗ
   procedure WM__WHATCANBEHERE(var Msg: TMessage); message WM_CLOSE;
 end;

 TForm1 = class(TForm)
   procedure FormCreate(Sender: TObject);
 private
   { Private declarations }
   pan1: TPanel;
   pan2: TMyPanel;
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
 pan1 := TPanel.Create(Self);
 with pan1 do
 begin
   Parent := Self;
   SetBounds(50, 50, 200, 200);
   DockSite := True;
 end;

 pan2 := TMyPanel.Create(Self);
 with pan2 do
 begin
   Parent := pan1;
   DragMode := dmAutomatic;
   DragKind := dkDock;
   ManualDock(pan1, nil, alClient);
 end;
end;

{ TMyPanel }

constructor TMyPanel.Create(AOwner: TComponent);
begin
 inherited;
 FloatingDockSiteClass := TMyFloatingDockSiteClass;
end;

procedure TMyPanel.WM__WHATCANBEHERE(var Msg: TMessage);
begin

end;

{ TMyFloatingDockSiteClass }

procedure TMyFloatingDockSiteClass.WM__CLOSE(var Msg: TMessage);
begin
 ShowMessage('Окно закрывается!!!');
 inherited;
end;

end.


Вопрос: как отловить момент закрытия плавающей панельки, прикрепленной к доку pan1, когда пользователь нажимает крестик в правом верхнем углу панельки?


Loginov Dmitry   (2006-07-01 20:50:00) [1]

Wow, работает, спасибо!


Юрий Зотов   (2006-07-01 20:24:00) [2]


type
 TMyDockSite = class(TPanel)
 private
   procedure CMDockNotification(var Message: TCMDockNotification); message CM_DOCKNOTIFICATION;
 public
   constructor Create(AOwner: TComponent); override;
 end;

procedure TMyDockSite.CMDockNotification(var Message: TCMDockNotification);
begin
 inherited;
 with Message.NotifyRec^ do
   if (ClientMsg = CM_VISIBLECHANGED) and not Boolean(MsgWParam) then
     ShowMessage('Wow!')
end;

constructor TMyDockSite.Create(AOwner: TComponent);
begin
 inherited;
 DockSite := True
end;


Loginov Dmitry   (2006-07-01 19:35:00) [3]

> Так ты смотри когда панель начнет уничтожаться!


А она не уничтожается, а просто становиться невидимой, и этот момент ХЗ как отследить...


Phoroon~   (2006-07-01 19:06:00) [4]

Так ты смотри когда панель начнет уничтожаться!


Loginov Dmitry   (2006-07-01 18:45:00) [5]

Решил эту проблему - по таймеру каждый раз выполняю проверку видимых контролов на панели pan1.

А все же кто-нибудь знает, как это делается по-правильному?


Наверх

Титульная страница Поиск, карта сайта Написать письмо