お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル

"メソッド名を指定して実行"






アプリケーション内で使用する種々のオブジェクトに対して共通のメソッド
を持たせるには,それらオブジェクトに共通の基底クラスにpublicなメソッド
を宣言できれば簡単ですが,共通の基底クラスを作れない場合でも
  「同じ名前,型のメソッドをpublishedに宣言」
することで,そのメソッドを持つ異なるクラスのインスタンス
に対して共通の手続きでアクセスすることが可能です.

------ 呼び出す人のコード --------
type
  TGetFunction =
    function(const Index: integer): string of object;

// そのインスタンスに'GetString'という名前の関数があれば実行する
function GetString( Inst: TPersistent; Index: integer ): string;
var
  Method: TMethod;
begin
  Method.Data := Inst;
  Method.Code := Inst.MethodAddress( 'GetString' );
  if Method.Code <> nil then
    Result := TGetFunction( Method )( Index )
  else
    Result := '';
end;

------- 参照されるインスタンスのクラス宣言 -----------
type
  TMyClass2 = class( TPanel );
  published
    function GetString( Index: integer ): string; // TGetFunction型
  end;

  TMyClass3 = class( TShape );
  published
    function GetString( Index: integer ): string;
  end;

implementation

function TMyClass2.GetString( Index: integer ): string;
begin
  Result := '私はTPanel派生のTMyClass2です';
end;

function TMyClass3.GetString( Index: integer ): string;
begin
  Result := '私はTShape派生のTMyClass3です';
end;


                                                  TN(CQJ01721)
 


- FDELPHI  MES(16):玉石混淆みんなで作るSample蔵【見本蓄積】 00/10/12 -

Original document by TN            氏 ID:(CQJ01721)


ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。

Copyright 1996-2002 Delphi Users' Forum