Ne var ne yok save etsin

Başlatan z, 09 Aralık 2015, 16:38:22

z

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ı?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

t2

#1
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

OG

Ben kapatırken bir .dat dosyasına kaydediyorum.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.