Delphiのメソッドをメソッド名から実行する方法

Delphiのメソッドをメソッド名から実行する方法。

元ネタは「Execute a Delphi Method (Procedure/Function) by Name」より。
ヘルプの「System.TObject.MethodAddress」にも同じことが書かれていました。

次のような関数を用意します。

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;

あとはこの関数を使って、目的のメソッドを実行します。

# Form1.Button1Clickを実行する
ExecMethod(Form1, 'Button1Click');

追記

実行できるメソッドは可視性がpublishedでなければならないようです。

DELPHI 2009 HANDBOOK

DELPHI 2009 HANDBOOKを読みました。
この本を読むまでは、Delphi2009はDelphi2007からUnicodeのサポートと小さな修正が行われただけだと思っていました。
実際には、多くの新しい機能が追加された優れた開発環境だったことがわかりました。

DELPHI 2009 HANDBOOKは、Delphi 2007 HANDBOOK(日本語未翻訳)の続編という位置づけになっています。
そのため、本書の内容はDelphi2009の新機能と変更点に絞られています。
Delphi2009で新たに追加された機能だけで400ページ以上の本になったわけです。

本書のターゲットは、旧バージョンのDelphiからDelphi2009へ移行する開発者です。
これからDelphiを始める初心者には難しすぎると思います。
C++Builder2009ユーザーもObject Pascalの新機能以外は参考になります。

本書の内容を大きく分けると次の4つに分けられます。

  • Unicode
  • IDEの新機能
  • Object Pascalの新機能
  • VCLの新機能

Delphi2009の一番の目玉であるUnicodeについては、多くのページが割かれています。
次の3つに分けられます。

  • Unicodeについての解説
  • UnicodeString型の説明
  • 旧バージョンからの移行方法

たくさんのサンプルコードが掲載されており、実際に動作を確認しながら読み進めることができるようになっています。
サンプルコードはこちらからダウンロードできるようです。

IDEにも、いくつもの新機能が追加されています。
便利になった新しい機能を上手に使い、効率よく開発したいものです。

  • 新しく追加されたプロジェクトオプションの項目について
  • リソース管理の機能
  • ツールパレット検索ボックス
  • プロジェクトマネージャビュー
  • その他いろいろ

Object Pascalの新機能として、2つの機能が説明されています。

  • ジェネリクス
  • 無名メソッド

ジェネリクスと無名メソッドによって、Object Pascalがより生産性の高いプログラミング言語になったことがわかります。
無名メソッドはC++Builderにはない機能ですから、とても羨ましいです。

それから、242~243ページの「オーバーロードにおける変更」は注意が必要です。
特に「あるメソッドを呼び出していたコードが、以前と異なるメソッドを呼び出すようになってしまう」は気がつきにくいだけに問題です。
ただし状況が限られているので、問題を理解していれば何とかなりそうです。

VCLの新機能で説明されているコンポーネント

  • 新しいコンポーネント
    • バルーンヒント
    • ButtonedEdit
    • CategoryPanelGroup
    • Ribbon
  • コモンコントロールの新機能
    • Button
    • Label
    • RadioGroup
    • Edit
    • ComboBox
    • ListView
    • ProgressBar
    • HeaderControl
    • RichEdit

VCLの新機能ですが、4つの新しいコンポーネントとリボンのサポートに加えて、
Windows XPやWindows Vistaで追加されたコモンコントロールの新機能がサポートされました。
リボンコントロールについては、1つの章をまるまる使って説明しています。

# 古いOSで新機能を使用するとどうなるのか、検証しました。
# => C++Builder2009でコモンコントロールに追加された新機能の検証

他にも、COMサポートやdbExpress、DataSnap2009についての解説もあります。

と、盛りだくさんの内容でした。

本書では、Delphi2009の新機能・変更点に内容が絞られています。
Delphi7からDelphi2007までの間に追加された機能、例えばクラスヘルパーなどについては、説明がありません。
Delphi 2007 HANDBOOKの日本語訳も出版してほしいです。