放到数据库中吧,建立一个专门的表,记录窗体的最大化等状态,以及不是最大化状态时left和top的值,如果还有其他的也相应建立列字段。
给你个思路:
写一个窗体,此窗体作为其他窗体的母板,即其他的窗体都是从本窗体继承的。
在窗体的Show事件中加入自己写的诸如ReadForm(此过程用于读取上次的记录),在CloseQuery事件中加入WriteForm(此过程用于写记录)。简单写一下代码:
procedure ReadForm;
var
sState, sSql: string;
ADOSetTmp: TADODataSet;
begin
//读取对应窗体的信息,用其Caption作为限定条件,表暂且用SaveForms
sSql := ' SELECT * FROM SaveForms WHERE Caption=''' + Caption + '''';
{此处打开数据库,代码略,暂且以在ADOSetTmp打开为例说}
if not ADOSetTmp.IsEmpty then
begin
{下面的字段改成自己的,我只是做个例子说}
sState := ADOSetTmp.FieldByName('State').AsString;
Top := ADOSetTmp.FieldByName('Top').AsInteger;
Left := ADOSetTmp.FieldByName('Left').AsInteger;
if Trim(sState) = 'wsNormal' then
begin
WindowState := wsNormal;
Width := ADOSetTmp.FieldByName('Width').AsInteger;
Height := ADOSetTmp.FieldByName('Height').AsInteger;
end
else
if Trim(sState) = 'wsMaximized' then
WindowState := wsMaximized
else
WindowState := wsMinimized;
end;
end;
procedure WriteForm;
var
sSql, sState: string;
begin
if self.WindowState = wsNormal then
sState := 'wsNormal'
else
if self.WindowState = wsMaximized then
sState := 'wsMaximized'
else
if self.WindowState = wsMinimized then
sState := 'wsMinimized'
else
sState := '';
sSql := ' SELECT * FROM SaveForms WHERE Caption=''' + Caption + '''';
if {判断数据库中是否已经记录过该窗体,若是则修改,不是则添加,代码略} then
sSql := 'INSERT INTO SaveForms ……'
else
begin
if self.WindowState = wsNormal then //当不是最大化状态时
sSql := 'UPDATE SaveForms Set
else //当是最大化状态时
sSql := ' UPDATE SaveForms Set
end;
{执行Sql,进行数据库操作!}
end;