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