プログラミング初心者です。
まず、Form上に配置しているコンポーネントなのですが、
・ボタン ・エディット ・ラベル ・ラジオグループ ・リストボックス
・メモ ・コンボボックス等を使用しています。
実行上で、ボタン(自分で作った「保存」ボタン)を押し、エディット内容やチェックが書き込まれたままの状態で、FormまたはUnitごと保存を行いたいのですが、どういうプログラムを組めばいいのかわかりません。
また、プログラム実行上で、その保存したFormをまた開き、更新できるようにする方法も教えていただけないでしょうか?
当方、SaveToFileを使ってMemoの内容をテキストにて保存することはできるレベルです。
どうかよろしくお願いします。
自分が良く使う手法です。
チェックボックスとエディットの内容をMemo1コンポーネントを使って保存します。
Memo1はあらかじめVisibleをFalseにして見えなくしておきます。
うまく動作してない時はTrueにしてMemo1の中身を確認できます。
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
memo1.Lines.Clear;
if CheckBox1.Checked then
memo1.Lines.Add('True')
else
memo1.Lines.Add('False');
memo1.Lines.Add(edit1.Text);
try
memo1.Lines.SaveToFile(changefileext(paramstr(0),'.ini'));
except
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
try
memo1.Lines.LoadFromFile(changefileext(paramstr(0),'.ini'))
except
end;
if memo1.Lines[0] = 'True' then
CheckBox1.Checked := True
else
CheckBox1.Checked := False;
edit1.Text := memo1.Lines[1];
end;
>FormまたはUnitごと保存・読み取り
の方法は、わかりませんが、
>・エディット
や
>・コンボボックス
の値などは、INIファイルかレジストリなどに保存するのも、よいかと思います。
>・リストボックス
や
>・コンボボックス
のリスト
などは、SaveToFileなどでファイルに保存するのは、いかがですか?
小生がかって先輩に教わったコード例です。何か参考になれば。
ざっと抜粋したのでミスがあると思いますが。
TForm1 = class(TForm)
private
{ Private 宣言 }
public
{ Public 宣言 }
end;
const
BandCount=3; //CoolBarを置きその上にToolbarを3個置いているという宣言です。
//たとえば一段目を左右2個、2段目を一個。あるいは3段になったりする。
var
Form1: TForm1;
iniFile: TIniFile; //iniファイルの名前の宣言
AppPath: string; //このプログラムを置いておくフォルダパスを格納する
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
Form1.Position:=poDesigned;
iniFile := TIniFile.Create(AppPath);//iniファイルをオープン
//フォーム形状復元
//最初inifairuganaitoki-100を取得したときインストールして最初の起動だと判断するため
//いろいろな箇所で最初ならファイルを新規作成するため
if IniFile.ReadInteger('Window', 'Top', -100)=-100 then
begin
Form1.Width:= 640;//俺のモニタはVGAだからはみ出すというクレームを食うので
Form1.Height:= 480;
end
else
begin //iniファイルがあるとき
Form1.Top:= IniFile.ReadInteger('Window', 'Top', Form1.Top );
Form1.Left:= IniFile.ReadInteger('Window', 'Left', Form1.Left );
Form1.Width:= IniFile.ReadInteger('Window', 'Width', 640 );
Form1.Height:= IniFile.ReadInteger('Window', 'Height', 480);
//USBメモリーにインストールしている場合開いたモニタのサイズが違うかもしれないから
if IniFile.ReadBool('Window', 'Maxmize', False) then
begin
Form1.WindowState := wsMaximized;
end
else
begin
Form1.WindowState := wsNormal;
end;
end;
//-------------------------CoolBarの左右の長さやフロート状態を復元する-------------------------------------
//CoolBarの上に3個のToolBarがありどんな形になっているかわからないので復元
for i:=0 to BandCount-1 do
begin //Bandの位置とBreakを読込む
BandIDNumber[i]:= IniFile.ReadInteger('CoolBar1','Band'+IntToStr(i)+'ID',i);
BandWidth[i] := IniFile.ReadInteger('CoolBar1','Band'+IntToStr(i)+'Width',452); //452は自分のサイズ
if i=1 then
BandBreak[i] := IniFile.ReadBool('CoolBar1','Band'+IntToStr(i)+'Break',false)
else
BandBreak[i] := IniFile.ReadBool('CoolBar1','Band'+IntToStr(i)+'Break',true);
end;
CoolBar1.Bands.BeginUpdate;
//値の呼び出して復元
Tax :=iniFile.ReadInteger('Tax',%',5); //数値の復元
Edit1.Text :=iniFile.ReadString('Edit1','Text',''); //文字列の復元
DisplayYesNo :=iniFile.ReadBool(DisplayYesNot','Yes',false); //true or falseの復元
iniFile.Free; //iniファイルを閉じる
end;
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
//フォームの状態をiniファイルに書き込みして保存する
iniFile := TIniFile.Create(AppPath );//iniファイルを開く
if Form1.WindowState = wsNormal then//フォームの状態を保存する
begin
IniFile.WriteBool( 'Window', 'Maxmize', False );
IniFile.WriteInteger('Window', 'Top', Form1.Top );
IniFile.WriteInteger('Window', 'Left', Form1.Left );
IniFile.WriteInteger('Window', 'Width', Form1.Width );
IniFile.WriteInteger('Window', 'Height', Form1.Height);
end
else
begin
IniFile.WriteBool('Window', 'Maxmize', True);
end;
//---------------------------CoolBarの上のToolBarの保存------------
for i:=0 to BandCount-1 do
begin //Bandの位置とBreakを書きこむ
iniFile.WriteInteger('CoolBar1','Band'+IntToStr(i) +'ID',CoolBar1.Bands[i].ID);
iniFile.WriteInteger('CoolBar1','Band'+IntToStr(i) +'Width',CoolBar1.Bands[i].Width);
iniFile.WriteBool('CoolBar1','Band'+IntToStr(i) +'Break',CoolBar1.Bands[i].Break);
end;
iniFile.WriteInteger('Tax','%',Tax );//数値の保存
iniFile.WriteString( 'Edit1','Text',Edit1.Text);//文字列の保存
iniFile.WriteBool('DisplayYesNot','Boolean',DisplayYesNo);//true or falseの保存
IniFile.Free;//iniファイルを閉じる
end;
initialization
AppPath := ExtractFilePath(Application.ExeName); //起動時にこのexeファイルのあるフォルダパスを取得しておく
end. // 一番最後のend
自己レスです。
早速ミスがありますので訂正
iniファイル名を任意の名前+.iniでつけてください。
iniFile := TIniFile.Create(AppPath+'AppSetUp.ini');//iniファイルをオープン
では。
iniファイルを使って状態を保存し、呼び出すんですね。
iniを使ったことが無かったので、とりあえずやってみます。
みなさん即レスありがとうございました。
トライしてみて、また詰まりましたら、アドバイスお願いします。
ツイート | ![]() |