Главная страница
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.051 c
1-1151311964
zdm
2006-06-26 12:52
2006.08.13
Работа с ККМ


15-1152786620
Igor_
2006-07-13 14:30
2006.08.13
Система документации для Delphi


8-1139485976
DelphiLexx
2006-02-09 14:52
2006.08.13
Цифровая радиосвязь(DRM) и Delphi


1-1150557104
leonidus
2006-06-17 19:11
2006.08.13
Как скопировать из любого приложения выделенный текст в буфер?


2-1153821432
Wolferio
2006-07-25 13:57
2006.08.13
Поиск папки по первым буквам