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

Вниз

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

 
Loginov Dmitry ©   (2006-07-01 16:36) [0]

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


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 18:45) [1]

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

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


 
Phoroon~ ©   (2006-07-01 19:06) [2]

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


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

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


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


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


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 20:50) [5]

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



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

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

Наверх




Память: 0.48 MB
Время: 0.041 c
2-1153197410
S46E
2006-07-18 08:36
2006.08.13
Потоки и пинг


2-1153655617
vain
2006-07-23 15:53
2006.08.13
Сливание вспомогательных файлов


4-1144918903
Sour Smile
2006-04-13 13:01
2006.08.13
Как узнать размеры разделов винчестеров?


15-1153375938
Лысов
2006-07-20 10:12
2006.08.13
Вызов методов из dll


1-1151743737
mrAld
2006-07-01 12:48
2006.08.13
сборка через консоль