実行ファイルにテキストファイルを取り込んでから、フォームにMemo
コンポーネントとButtonコンポーネントとを貼り付けて、
procedure TForm1.Button1Click(Sender: TObject);
var
RS:TResourceStream;
begin
RS := TResourceStream.Create(hInstance,'test','TXT');
try
Memo1.Lines.LoadFromStream(RS);
finally
RS.Free;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
RS:TResourceStream;
begin
RS := TResourceStream.Create(hInstance,'test','TXT');
try
Memo1.Lines.SaveToStream(RS);
finally
RS.Free;
end;
end;
と記述してButton2をクリックしたところ、
プロジェクト Project2.exe が EStreamError クラスの例外を生成しました。
'読み込み専用リソース ストリームには書き込めません'
プロセスは停止しています。再開するにはステップ実行または実行を選択してください。
と言われてしまいました。SaveToStream()というものが用意されているのだからこれで保存
できそうだと思ったんですが、リソースを上書きすることは不可能なのでしょうか?
>リソースを上書きすることは不可能なのでしょうか?
リソースはexeファイルの一部。自分の実行中に自分のファイルに書き込むことはできません。
うーむ さん返答ありがとうございます。
リソースに上書きすることはできない、となると、実行ファイルの設定を
保存したければ、iniファイルのようなものを実行ファイルの外に用意する
以外に手段は無い、ということなのでしょうか?
そうです。そのために ini やレジストリがあるんですね。
うーむ さんこんな真夜中にわざわざ返答していただきありがとうございます。
やはりiniファイルに書き込む必要があるのですね。
DelphiでSaveDialog付きの実行ファイルを作ると、前回ファイルを保存した
場所を実行ファイル自体が記憶しているようなので、これはきっと実行ファイル
内のデータを上書きしているのだろう、ならばリソースでも文字列ぐらいなら
上書きできるのではなかろうか、と思ったのですが間違いでした。
iniファイルを使うことにします。
SaveDialog はウィンドウズのコモンダイアログであり、アプリごとにレジストリに記録しているようです。
なるほど、同じ実行ファイルを別々のフォルダに用意して、片方のファイル
を実行して終了した後、他方のファイルを実行すると、なぜか先程実行して
いたファイルの設定が反映されていて、不思議に思ったことがありますが、
実はwindows側で設定を外部に記録しているからだったわけですね。
勉強になりました。
うーむ さんありがとうございます。
ツイート | ![]() |