毎度毎度お世話になっています。またわからない問題が起こりましたので質問させていただきます。
今、フォーム上にあるラベルのプロパティ情報をファイルに保存したいと思っています。(一部ですが)
Left,Top,Visible等は保存できましたが、どうしてもFontが保存できません。
どうすれば保存できるのでしょうか?
ラベルは複数個ありそれらの情報は1つのファイルにまとめて保存するつもりです。
因みに、私はこれを作るとき、次のサイトを参考に作りました。
http://www.miyabi-vs.co.jp/~c-works/tips/Lafie/adv08.html
ご教授お願いします。
IniFileの方が良いと思います。
アドベンチャーゲームサイトがリンクされてましたので
別の視点から・・
フォントの情報保存は、
TFontに画面プロパティのフォント部分をコピーし
保存する仕組みを盛り込めばよろしいかと・・
(例)
procedure TForm1.FormCreate(Sender: TObject);
var
test: TFont;
begin
test := TFont.Create;
test := Form1.Font;
//ここにフォントオブジェクトの内容をファイルへ落とす部分を作成
ShowMessage('test');
test.Destroy;
end;
Createした後なら、他のコントロールFontプロパティを
上記のように参照できます。
上記サンプルは、Delphi Ver5 Pro版にてコンパイルしました
単純にフォントのそれぞれのプロパティをそれぞれ設定として保存してはどうでしょう?
[FONT]
NAME = 'MS ゴシック'
SIZE = 9
とこんな感じで
返答ありがとう御座います。
IniFileの使い方ついて自分なりに調べてみましたが、なんとなくわかった程度でフォントを保存する方法がまだわかりません。
具体的にはどうすれば良いのでしょうか?サンプルプログラムなどがあれば有り難いです。
Label1.Font.Nameはstringです
procedure TForm1.Button1Click(Sender: TObject);
var
IniFile:TIniFile;
begin
IniFile:=TIniFile.Create('ファイル名');
try
//書き込み
IniFile.WriteString('設定','フォント',Label1.Font.Name);
//読み込んで表示
ShowMessage(IniFile.ReadString('設定','フォント','読み込みに失敗'));
finally
IniFile.Free;
end;
end;
ファイル名は指定してください
IniFile:=TIniFile.Create(ExtractFilePath(Application.ExeName)+'設定.ini')
みたいに
少してこずっていましたができました。ラベルを配列にしていたので
Labels[0].Font.Size := ReadInteger('Labels[0]', 'Size', Labels[0].Font.Size);
としていたら読み込めなかったですが、第1引数のSectionを
'Labels[0]'から'Labels(0)'にすればうまくいきました。
ありがとう御座いました。
ここで問題解決とさせて頂きますが、もう少し教えていただきたいことがあります。
ふじっこさんの方法なのですが、この方法がよくわかりませんでした。
もう少し具体的に説明していただければ幸いです。何分、知識不足の私ですが、ご教授お願いします。
私の方法は、TFontオブジェクトにある
各プロパティを抜き出してきて
(サンプルでは、間接的ですが)
Ugaさんがご自身で用意された構造体他にいったん保存されるのかと考え
サンプルを書いた次第です。
すみません。駄目です。うまくいきません。
AVGのサイトとふじっこさんのサンプルを手本にしてプログラムを作りましたが、エラーになってしまいます。
プログラムの一部を以下に示します。
TSaveData = record
Font: TFont;
end;
//Label1のフォントを保存
procedure TForm1.Button1Click(Sender: TObject);
var
f: file;
SaveData: TSaveData;
test: TFont;
begin
SaveData.Font := TFont.Create;
test := TFont.Create;
test := Label1.Font;
SaveData.Font.Color := test.Color;
SaveData.Font.Name := test.Name;
SaveData.Font.Size := test.Size;
AssignFile(f, 'C:\JIYUU2004\Delphi\Jikken.sav');
Rewrite(f,1);
BlockWrite(f, savedata, sizeof(TSaveData));
CloseFile(f);
SaveData.Font.Destroy;
test.Destroy;
end;
//Label1に保存したフォントを設定
procedure TForm1.Button2Click(Sender: TObject);
var
f: file;
LoadData: TSaveData;
test: TFont;
begin
LoadData.Font := TFont.Create;
test := TFont.Create;
AssignFile(f, 'C:\JIYUU2004\Delphi\Jikken.sav');
Reset(f,1);
BlockRead(f, LoadData, sizeof(TSaveData));
CloseFile(f);
test.Color := LoadData.Font.Color;
test.Name := LoadData.Font.Name;
test.Size := LoadData.Font.Size;
Label1.Font := test;
LoadData.Font.Destroy;
test.Destroy;
end;
どこが間違っているのでしょうか?ご教授お願いします。
>どこが間違っているのでしょうか?ご教授お願いします。
例えば以下のコードでできます.複数のラベルということですので,3つの
例としました.後は適当に...
ちなみに,私自身は,ファイルへの保存を伴う形でレコード型を使用するこ
とはまずないですね.またほとんどTFileStreamを使用しています.(^_^)
implementation
type
//レコード型の保存読出しテスト用
TSaveData = packed record
FontColor: TColor;
FontName : String[32];
FontSize : Integer;
end;
var
ASaveData : array[0..2] of TSaveData;
{$R *.DFM}
//====================================================================
// Writeメソッドで保存
//====================================================================
procedure TForm1.Button1Click(Sender: TObject);
var
AFile : String;
F : file of TSaveData;
i : Integer;
begin
//保存前にプロパティを変更(これを保存)
Label1.Font.Name :='MS ゴシック';
Label1.Font.Color :=clGray;
Label1.Font.Size :=20;
Label2.Font.Name :='MS ゴシック';
Label2.Font.Color :=clRed;
Label2.Font.Size :=25;
Label3.Font.Name :='MS P明朝';
Label3.Font.Color :=clBlue;
Label3.Font.Size :=30;
//保存データをSavedataに代入
ASavedata[0].FontName :=Label1.Font.Name;
ASavedata[0].FontColor:=Label1.Font.Color;
ASavedata[0].FontSize :=Label1.Font.Size;
ASavedata[1].FontName :=Label2.Font.Name;
ASavedata[1].FontColor:=Label2.Font.Color;
ASavedata[1].FontSize :=Label2.Font.Size;
ASavedata[2].FontName :=Label3.Font.Name;
ASavedata[2].FontColor:=Label3.Font.Color;
ASavedata[2].FontSize :=Label3.Font.Size;
//保存
AFile := ChangeFileExt(Application.ExeName,'.sav');
try
AssignFile(F, AFile);
Rewrite(F);
for i:=0 to 2 do begin
Write(F, ASavedata[i]);
end;
finally
CloseFile(F);
end;
end;
//====================================================================
// Readメソッドで読出す
//====================================================================
procedure TForm1.Button2Click(Sender: TObject);
var
AFile : String;
F : file of TSaveData;
i : Integer;
begin
//保存したデータを読出す
AFile := ChangeFileExt(Application.ExeName,'.sav');
try
AssignFile(F, AFile);
Reset(F);
for i:=0 to 2 do begin
Read(F, ASavedata[i]);
end;
finally
CloseFile(F);
end;
//読出した値でLabelのプロパティ変更
Label1.Font.Name := ASavedata[0].FontName;
Label1.Font.Color:= ASavedata[0].FontColor;
Label1.Font.Size := ASavedata[0].FontSize;
Label2.Font.Name := ASavedata[1].FontName;
Label2.Font.Color:= ASavedata[1].FontColor;
Label2.Font.Size := ASavedata[1].FontSize;
Label3.Font.Name := ASavedata[2].FontName;
Label3.Font.Color:= ASavedata[2].FontColor;
Label3.Font.Size := ASavedata[2].FontSize;
end;
end.
Mr.XRAYさん。わざわざサンプルをありがとう御座います。
参考にさせて頂きまして、うまく保存、読込みができました。
皆様、初心者の長々とした質問に答えて頂きましてどうもありがとう御座いました。
ツイート | ![]() |