コンテンツ
Home
Delphi Tips集
ダウンロード
書籍紹介
リンク
サイト
  Delphi Tips集

Delphi Tips集
〜Delphiプログラミングの記録〜

呼び出されたときに自動でCreateする

 

グローバルなオブジェクトを作成する場合、以下のように初期化部でCreateを行えば作成できますが、

unit Tips003_0;

interface
uses

Classes,Forms;

var
gData:TComponent;

implementation

initialization
gData:=TComponent.Create(Application);

finalization

end.

この場合、必要無くても必ず作成されるため、その分余計にリソースを消費し、起動時の動作も遅くなります。

これは、最初に呼び出す時に作成すれば良いのですが、その分のコードを呼び出す側で毎回書くと大変なので、以下のようにすれば呼び出された側で初期化部を使わずに処理できます。

unit Unit1;

interface
uses
 Classes,Forms;


 //最初の呼び出し時にインスタンスを作成する命令
 //初期化部を使わないようにあらかじめ宣言する

 function Create_Component:TComponent;

var
 //変数をfunctionとして宣言する

 pData:function :TComponent=Create_Component;
 //Create_Componentをあらかじめ宣言してあるので
 //初期値として入力できる


implementation


var
 //作成したインスタンスを保持する変数
 pData_Self:TComponent;


//二回目以降の呼び出し命令

function OutComponent:TComponent;
begin
 Result := Component_Self;
end;

//最初の呼び出し時にインスタンスを作成する命令
function Create_Component:TComponent;
begin

 //インスタンスの作成
 pData_Self := TComponent.Create(Application);

 //作成したインスタンスを返す
 Result := Component_Self;

 //二回目以降の呼び出し用にfunctionを変える
 pData:=OutComponent;

end;


end.

TComponentは自由に変更することが出来ます。

この場合、TCommponent以下のクラスならばApplicationの終了時に破棄されますが、TObjectなど親のいないオブジェクトの破棄をする場合は、「親のいないコンポーネントに自動でFreeをかける」で紹介します。

 

 

 

 

 

Copyright © 2004 Sin dpg_sin@yahoo.co.jp