|
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"ドッキング状態の保存・復帰"
みなさんこんにちは
Iniファイルに対して、コントロールのドッキング状態を保存・復帰する
サンプルです。
unit DockUtil;
interface
uses Windows,Classes,Controls,IniFiles,Forms;
procedure DockingControl(DockSite:TWinControl; Client:TControl);
procedure FloatingControl(FloatingControl:TControl);
procedure ReadDockingInfo(Form:TForm; Client:TControl;
IniFile:TCustomIniFile);
procedure WriteDockingInfo(Client:TControl; IniFile:TCustomIniFile);
implementation
uses RsizDock;
// ClientをDockSiteにドッキングさせる
procedure DockingControl(DockSite:TWinControl; Client:TControl);
var DockingRect:TRect;
begin
with Client do
begin
DockingRect:=Bounds(Left,Top,LRDockWidth,TBDockHeight);
DockingRect.TopLeft:=ClientToScreen(DockingRect.TopLeft);
DockingRect.BottomRight:=ClientToScreen(DockingRect.BottomRight);
ManualFloat(DockingRect);
ManualDock(DockSite);
end;
end;
// FloatingControlをフローティング状態にする
procedure FloatingControl(FloatingControl:TControl);
var FloatingRect:TRect;
begin
with FloatingControl do
begin
FloatingRect:=Bounds(Left,Top,UndockWidth,UndockHeight);
ManualFloat(FloatingRect);
end;
end;
{
IniFileからClientの状態を復元する
Form ResizeDockSiteの乗っているTForm
}
procedure ReadDockingInfo(Form:TForm; Client:TControl;
IniFile:TCustomIniFile);
var Section,DockSiteName:string;
Docking:boolean;
DockSite:TWinControl;
begin
with Client do
begin
Section :=Name;
Visible :=false;
Left :=IniFile.ReadInteger(Section,'Left',0);
Top :=IniFile.ReadInteger(Section,'Top' ,0);
UndockWidth :=IniFile.ReadInteger(Section,'UndockWidth',100);
UndockHeight:=IniFile.ReadInteger(Section,'UndockHeight',100);
LRDockWidth :=IniFile.ReadInteger(Section,'LRDockWidth',100);
TBDockHeight:=IniFile.ReadInteger(Section,'TBDockHeight',100);
Docking:=IniFile.ReadBool(Section,'Docking',false);
if Docking then
begin
DockSiteName:=IniFile.ReadString(Section,'DockSite','');
if DockSiteName<>'' then
begin
DockSite:=Form.FindComponent(DockSiteName) as TWinControl;
DockingControl(DockSite,Client);
end
else Docking:=false;
end;
if not Docking then FloatingControl(Client);
Visible:=IniFile.ReadBool(Section,'Visible',true);
end;
end;
// IniFileにClientの状態を保存する
procedure WriteDockingInfo(Client:TControl; IniFile:TCustomIniFile);
var ScreenPos:TPoint;
Section:string;
begin
with Client do
begin
Section:=Name;
IniFile.WriteBool(Section,'Visible',Visible);
if Floating then
begin
ScreenPos.x:=Left;
ScreenPos.y:=Top;
ScreenPos:=ClientToScreen(ScreenPos);
IniFile.WriteInteger(Section,'Left' ,ScreenPos.x);
IniFile.WriteInteger(Section,'Top' ,ScreenPos.y);
IniFile.WriteBool( Section,'Docking',false);
end
else
begin
IniFile.WriteInteger(Section,'Left' ,Left);
IniFile.WriteInteger(Section,'Top' ,Top);
IniFile.WriteBool( Section,'Docking' ,true);
IniFile.WriteString( Section,'DockSite',Parent.Name);
end;
IniFile.WriteInteger(Section,'UndockWidth' ,UndockWidth);
IniFile.WriteInteger(Section,'UndockHeight',UndockHeight);
IniFile.WriteInteger(Section,'LRDockWidth' ,LRDockWidth);
IniFile.WriteInteger(Section,'TBDockHeight',TBDockHeight);
end;
end;
end.
99/01/10(日) 00:19 貞広 賢三(YRL00044)
Original document by 貞広 賢三 氏 ID:(YRL00044)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|