お世話になっております。
ちょっと調べる方法が思いつかないので質問させてください。
オブジェクトインスペクタで記述するデフォルト値のことですが
このデフォルト値をユーザー側の操作により他の値に変更して記憶させる方法はないのでしょうか?
iniファイルなどに記憶させ、起動時に読み込む方法は思いつきますが、外部のファイルなどを利用することなく、EXEファイルのみで記憶させたいのですが。よろしくお願いいたします。
OnCreateで、その値を記述すれば?
iniファイルなんかより手間いらずだと思うけど。
早速の回答ありがとうございます。
iniファイルはユーザーが記した値は記憶できますが
OnCreateではどうも
iniファイルやレジストリなど、何かに記憶する以外に
ありえないんじゃないかと思いますが・・・。
[ローダを使った方法]
1.デフォルト値をリソースで持っておく。
2.リソースを改変し、目的のEXEを起動するだけのローダを作成する。
[NTFS-FSを使った方法]
IniファイルをEXEのファイルストリームとして生成する。但しNTFS限定。
http://www.microsoft.com/japan/msdn/windows/windows2000/ntfs5.aspx#ntfs5_topic4
無理矢理やるならこの2点しか思いつきません。
なるほど、確かに無理やりって感じですね。
オブジェクトインスペクタに直接反映させるコードがあるのかなぁと思って
いたんですが(.caption:='abc';ではその場限りですもんねぇ)
どうも難しいみたいですね。
回答ありがとうございました。
出来上がったexeの初期値をexe本体に書き込みたいということでいいんですか?Delphiでオブジェクトインスペクタと書かれるとコンパイル前の状況を想像しちゃうんですが。
レスありがとうございます。
説明が足らないようで申し訳ない。
ユーザー側にラベルの表示を変更してもらうと仮定します。
procedure TForm1.Button1Click(Sender: TObject);
begin
label1.Caption:=edit1.Text;
end;
普通はこうですが、これですとこの場限りでEXEファイルを再起動
するとオブジェクトインスペクタで記述した値が初期値になります。
このedit1.Textでうちこんだ内容を外部ファイルを参照せずに初期値に
することは出来ないのかなぁと言うところです。
なんで外部ファイル保存をいやがるのかな。
記録したデータを見られるのがイヤなら暗号化でもしたら?
できるかは分かりませんが,
exeのプロパティ → 概要タブ
に情報の読み書きが出来る関数があれば実現できるかもしれませんね。
実行ファイルのプロパティの書き込む方法は知りませんがリンクファイルなら少しだけありました。
http://www2.big.or.jp/~osamu/Delphi/Tips/key.cgi?key=6#0099.txt
http://yokohama.cool.ne.jp/chokuto/urawaza/interface/IShellLink/
リンクファイルのコメントの読み書きはしたことがありますが,
ここまでするならiniファイル、レジストリ扱う方がお手軽ですよ。
この操作は実現可能ですが、難しいです。
そもそも、実行されたexeファイルはその本体がwindowsによってロックされるためにたとえexe本体であってもディスク上の自分自身(exeファイル)の書き換えは認められません。(メモリー内しか認められません)
つまり、礼儀正しく動作するアプリケーションではこの操作はできません。
ではどのように実現するかですが、
私が考えつくのは2種類です。
方法1
まず、新規exeを作成、起動、待機させます。
本体exeを終了
新規exeに本体exeの書き換えを行わせる
新規exeに自殺コードを実行させる。
方法2
本体exeのロックを解除
書き込みを行う
方法1の方が現実的だと思いますが、いろいろな例外に備える必要があります。方法2はデバッグ系のAPIでも使えば何とかなるのかも知れませんが、具体的な方法、実現可能かは調べてみないとわかりませんし、Vistaだと間違いなく管理者権限が必要になると思います。1なら具体例も作れそうです、面倒そうなので希望しだいですが。(自殺プログラムはMr.Xrayさんが公開していましたよね?)
皆様たくさんのご返答ありがとうございました。
難しいながらもいろいろ検討してくださった。
DEKO様、Ru様、もにゃ様には感謝です。
いくつか試してみようかと思いますが、やはり外部ファイルから
読み込むことにしようかなぁ。
ツイート | ![]() |