ども、Norimakiです。
ネットには色々と有益な情報を提供してくれるサイトが多数あります。
そんなサイトをNorimaki基準でピックアップしてみました。
今回のお役立ち情報はこちら。
山本隆さんの「山本隆の開発日誌」より
Delphiのメソッドをメソッド名から実行する方法
http://www.gesource.jp/weblog/?p=642
そもそも、メソッドを呼び出すには、
ObjectName.MethodName;
みたいなソースコードになります。
これを
ExecMethod(ObjectName,’MethodName‘);
みたいな感じで呼び出したいと。
そんな使い方をするようです。
そもそも、何でこんなのが必要なのか?
なんて思ったりするとは思います。
何も文字列で呼び出さずとも直接呼び出せばいいじゃん。
って思ったりしません?
僕はそう思っていたんですよ。
ですが、今作っているツールにスクリプト(マクロ)機能があるわけで、
文字列でメソッドが呼べるとなれば、そのスクリプトからツール本体を操作する
という事が可能になるわけですよ。
まぁ、この機能がなくても可能なことは可能ですが、
個別のメソッド毎に対応しなければいけないので非常に面倒です。
それをこの機能があれば、文字列を渡すだけでメソッドの実行が可能になるので
本体側の機能が追加したりした際にも修正する必要がないってことになります。
個別のメソッド毎に対応するとなると、
修正毎にスクリプト側も修正しないといけないので非常に面倒。
その点で文字列でメソッドを呼べるというのはとても便利ということになります。
コード部分を引用させて頂きます。
procedure ExecMethod(OnObject: TObject; MethodName: string); type TExec = procedure of object; var Routine: TMethod; Exec: TExec; begin Routine.Data := Pointer(OnObject); Routine.Code := OnObject.MethodAddress(MethodName); if NOT Assigned(Routine.Code) then Exit; Exec := TExec(Routine); Exec; end;
ExecMethod(Form1, ‘Button1Click’);
という感じで呼ぶんだそうです。
呼び出すメソッドは Method(sender:TObject) って感じの
メソッドに限られるんでしょうかね。
操作対象となるオブジェクトも文字列で呼び出せたら便利ですね。
ここら辺は確か FindComponent ってのがあったはず。
あるいは、全てのメソッドをアクションリストで管理するというのであれば、
それはそれで良いのかも。
現時点ではまだ思いつきの段階ではありますが、
必要になったら実装しようかと思います。
ではでは。
Norimakiでした。