程序在运行时用户需要对一些控件进行重新移动布局,下次进入界面时显示布局后的
方法1:每移动控件时就把位置写入INI文件中
只需在控件的OnMouseDown事件写如下代码:
procedure TFMain.SpeedButton4MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
const sc_move = $F011;
var
SysFile: TiniFile;
begin
releasecapture;
TSpeedButton(sender).Perform(wm_syscommand, sc_move, 0);
try
SysFile := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'Sys.ini');
sysFile.WriteInteger(TSpeedButton(sender).Name, 'TOP', TSpeedButton(sender).Top);
sysFile.WriteInteger(TSpeedButton(sender).Name, 'Left', TSpeedButton(sender).Left);
finally
SysFile.Free;
end;
end;
方法2:
封装一函数用于实现控件移动,在控件的OnMouseDown事件中调用即可,然后在关闭时遍利所有控件把位置写入INI
procedure MoveControl(Control: TControl; Shift: TShiftState; X, Y, Prec: integer);
begin
if Shift=[ssLeft] then
begin
ReleaseCapture;
Control.Perform(WM_SYSCOMMAND, SC_MANIPULATE, 0);
end;
end;
//关闭写入
SysFile := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'Sys.ini');
Try
for i := 0 to ComponentCount - 1 do
begin
sysFile.WriteString(TControl(Components[i]).Name ,TOP,TControl(Components[i]).TOP );
sysFile.WriteString(TControl(Components[i]).Name ,Left,TControl(Components[i]).Left );
end;
finally
SysFile.Free;
end;