関数F1,F2,F3,...を変数i を変更することによって実行させたいです.
例えば,i=1のときF1を,i=2のときはF2を...実行するにはどうすれば良いでしょうか.
何かFindComponent見たいな関数ないですかね.
FindComponent('F' + IntToStr(i))見たいに使える関数
case文はどうですか?
deldelさん
それが関数が20個もあったら,Case文は効率的ではなく,ループを考えたいですね.
配列を使うのはどうですか?
PublishにしてMethodAddressで引くとか
igyさん
配列って,関数名を命名するとき配列を使うとの意味でしょうか.
例えば,procedure Fonc[10](Sender: TObject)って感じでしょうか.
みふ。さん
初心者なので,おっしゃる意味がよく理解できません.
すいませんが,もうちょっと具体的にご説明できませんか.
>配列って,関数名を命名するとき配列を使うとの意味でしょうか.
手続きポインタ または メソッドポインタ の配列を用意し、
その配列に手続き または メソッド(のアドレス) を格納し、必要に応じて、取り出して使用する
ということです。
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が呼ばれない?
みふ。さん
ありがとうございます.解決です.
ツイート | ![]() |