Bir sürü panelim var. Panellerin üstünde içeriği değiştirilebilen bir ton nesnem var. (Check box, EditBox, Combo box vs)
Programdan çıkarken bunların hepsinin konumunu saklamak, programı çalıştırırken de saklanmış verilerden bu nesnelerin otomatik değer almasını istiyorum.
Çok pratik yolu varmı?
Formdan çıkmadan önce, Formun OnCloseQuery olayında WriteControlPlacement ile konumları kaydederiz.
Form OnShow olayında ReadControlPlacement ile geri yükleriz
Uses kısmına inifiles eklemeyi unutmayalım
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, inifiles;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
Button6: TButton;
Button7: TButton;
Button8: TButton;
Button9: TButton;
Button10: TButton;
procedure Button10Click(Sender: TObject);
procedure WriteControlPlacement;
procedure ReadControlPlacement;
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
WriteControlPlacement;
end;
procedure TForm1.FormShow(Sender: TObject);
begin
ReadControlPlacement;
end;
procedure TForm1.WriteControlPlacement;
var
iniFile: TIniFile;
idx: integer;
ctrl: TControl;
begin
iniFile := TIniFile.Create(ChangeFileExt(Application.ExeName, '.ini'));
try
for idx := 0 to -1 + Self.ComponentCount do
begin
if Components[idx] is TControl then
begin
ctrl := TControl(Components[idx]);
iniFile.WriteInteger(ctrl.Name, 'Top', ctrl.Top);
iniFile.WriteInteger(ctrl.Name, 'Left', ctrl.Left);
iniFile.WriteInteger(ctrl.Name, 'Width', ctrl.Width);
iniFile.WriteInteger(ctrl.Name, 'Height', ctrl.Height);
end;
end;
finally
FreeAndNil(iniFile);
end;
end; (*WriteControlPlacement*)
procedure TForm1.ReadControlPlacement;
var
iniFile: TIniFile;
idx: integer;
ctrl: TControl;
begin
iniFile := TIniFile.Create(ChangeFileExt(Application.ExeName, '.ini'));
try
for idx := 0 to -1 + Self.ComponentCount do
begin
if Components[idx] is TControl then
begin
ctrl := TControl(Components[idx]);
ctrl.Top := iniFile.ReadInteger(ctrl.Name, 'Top', ctrl.Top);
ctrl.Left := iniFile.ReadInteger(ctrl.Name, 'Left', ctrl.Left);
ctrl.Width := iniFile.ReadInteger(ctrl.Name, 'Width', ctrl.Width);
ctrl.Height := iniFile.ReadInteger(ctrl.Name, 'Height', ctrl.Height);
end;
end;
finally
FreeAndNil(iniFile);
end;
end; (*ReadControlPlacement*)
procedure TForm1.Button10Click(Sender: TObject);
begin
Button1.Left := Button1.Left + 50;
end;
end.
alıntıdır.
Yaklaşık 613.000 sonuç bulundu (0,42 saniye)
"control location save delphi" şeklinde aradım.
http://delphi.about.com/od/adptips2005/qt/storecontrolpos.htm (http://delphi.about.com/od/adptips2005/qt/storecontrolpos.htm)
Ben kapatırken bir .dat dosyasına kaydediyorum.