• ベストアンサー

 Delphiの”手続き”について。

 とりあえず、作ったプログラム試作第一号を関数化や手続き化しているのですが、手続きや関数の中でCaptionを使いたいのですが未定義となります。 procedure Information( InfoMass : String ); begin   Info.Caption := 'InfoMass' + 'です';   Info2.Caption := 'InfoMass' + 'ます'; end; で、手続きを呼び出すと、複数のCaptionを変更したいのですが。 typeの中で、Info: TLabel と型の宣言をしてるのでは?

質問者が選んだベストアンサー

  • ベストアンサー
  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.2

もう一つの方法も回答しておきます。 同じファイル内にあっても、関数定義でクラス名が付いていなければ、その関数はクラスに無所属として扱われ、クラス内変数は、その属するオブジェクト変数名(下の例ではForm1の方)を明示しなければなりません。 例 type  TForm1 = class(TForm)   info: TLabel;  end; var  Form1: TForm1; implementation procedure Information( InfoMass : String ); begin  Form1.Info.Caption := 'InfoMass' + 'です'; // TForm1 ではないことに注意 end;

noname#17123
質問者

お礼

 私にもなにかなせる事があると思いいろいろな理由でDelphiを勉強しています。 結局はクラスを使わず、関数で対処しました。 回答は、何冊か読んだ本では、直接書いていない事だったので、とても参考になりましたわ。感謝いたします。

その他の回答 (1)

  • takopon
  • ベストアンサー率69% (27/39)
回答No.1

おそらく質問者様の書き方だと 下記の例のように、 procedureがUnitのProcedureになっているために クラスのメンバは参照できないとおもわれます。 UnitA   type TForm1 = Class(TForm)   private     //クラスTForm1のメンバ     Info :TLabel;   end; … //UnitA内でクラスに属さないProcedure procedure Information( InfoMass : String ); begin   //このプロシージャ内では   //クラスTFormのメンバは参照できない→エラー   Info,Caption := InfoMass; end; 以下のように書けば、うまくいくとおもわれます。 UnitA   type TForm1 = Class(TForm)   private     //クラスTForm1のメンバ     Info :TLabel;     procedure Information( InfoMass : String );   end; … //クラスTForm1のProcedure procedure TForm1.Information( InfoMass : String ); begin   //プロシージャInformationは   //クラスTFormのメンバなので   //クラス内のメンバを参照可能である   Info,Caption := InfoMass; end;

関連するQ&A