関数群の実行

解決


イルカ  2007-11-02 20:44:41  No: 28197

関数F1,F2,F3,...を変数i を変更することによって実行させたいです.
例えば,i=1のときF1を,i=2のときはF2を...実行するにはどうすれば良いでしょうか.
何かFindComponent見たいな関数ないですかね.
FindComponent('F' + IntToStr(i))見たいに使える関数


deldel  2007-11-02 21:47:26  No: 28198

case文はどうですか?


イルカ  2007-11-02 22:44:26  No: 28199

deldelさん
それが関数が20個もあったら,Case文は効率的ではなく,ループを考えたいですね.


igy  2007-11-02 23:34:02  No: 28200

配列を使うのはどうですか?


みふ。  2007-11-03 00:26:08  No: 28201

PublishにしてMethodAddressで引くとか


イルカ  2007-11-03 01:47:39  No: 28202

igyさん
配列って,関数名を命名するとき配列を使うとの意味でしょうか.
例えば,procedure Fonc[10](Sender: TObject)って感じでしょうか.

みふ。さん
初心者なので,おっしゃる意味がよく理解できません.
すいませんが,もうちょっと具体的にご説明できませんか.


igy  2007-11-03 02:03:16  No: 28203

>配列って,関数名を命名するとき配列を使うとの意味でしょうか.

手続きポインタ または メソッドポインタ の配列を用意し、
その配列に手続き または メソッド(のアドレス) を格納し、必要に応じて、取り出して使用する 

ということです。


みふ。  2007-11-03 02:50:39  No: 28204

FormのPublishedに
procedure F1(i:integer);
procedure F2(i:integer);
みたいに通番定義されてれば?
TFProc = procedure(i :integer) of object;
procedure TForm1.CallProc(i:Integer);
var
  Proc :TFProc;
  m :TMethod;
  szA :String;
begin 
  szA := ('F' + IntToStr(i))
  TMethod(Proc).Code := Self.MethodAddress(szA);
  TMethod(Proc).Data := Self;
  Proc(i);
end;
これで各Procが呼ばれない?


イルカ  2007-11-07 02:44:39  No: 28205

みふ。さん

ありがとうございます.解決です.


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加