関数群の実行

解決


イルカ  2007-11-02 11:44:41  No: 28197  IP: 192.*.*.*

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

編集 削除
deldel  2007-11-02 12:47:26  No: 28198  IP: 192.*.*.*

case文はどうですか?

編集 削除
イルカ  2007-11-02 13:44:26  No: 28199  IP: 192.*.*.*

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

編集 削除
igy  2007-11-02 14:34:02  No: 28200  IP: 192.*.*.*

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

編集 削除
みふ。  2007-11-02 15:26:08  No: 28201  IP: 192.*.*.*

PublishにしてMethodAddressで引くとか

編集 削除
イルカ  2007-11-02 16:47:39  No: 28202  IP: 192.*.*.*

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

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

編集 削除
igy  2007-11-02 17:03:16  No: 28203  IP: 192.*.*.*

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

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

ということです。

編集 削除
みふ。  2007-11-02 17:50:39  No: 28204  IP: 192.*.*.*

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-06 17:44:39  No: 28205  IP: 192.*.*.*

みふ。さん

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

編集 削除