関数の宣言と定義について

解決


IU  2004-12-03 19:20:23  No: 12055

現在、メインフォームにButtonとEditを1つずつ置き、
Buttonが押されたらEditボックスの内容を変更するようにしています。

procedure TForm1.Button1Click(Sender: TObject);
begin
Edit1.Text:='TEST';
end;

このプロジェクトにユニットを1つ追加(Unit2)し、関数の中身を
そちらに移したいのですが、どのようにすれば良いでしょうか?

Unit1では関数の宣言だけを行い、定義はUnit2で行いたいのです。
(今後、メインフォームに順次ボタンを配置していくので、Unit1は出来るだけ短くスッキリさせたいのです)

よろしくお願いします。


にしの  2004-12-03 19:31:52  No: 12056

OnClickイベントは、TNotifyEvent型で、これはfunction(Sender:TObject) of object;となっていると思います。
function 〜 of objectというのは、「オブジェクトのメンバ関数」ということですので、次のようになります。

unit Unit2

interface
uses
(適当に足りないユニットを追加);

type
  TEventManager = class(TObject)
  private
    { Private 宣言 }
  public
    { Public 宣言 }
    function Form1Button1Click(Sender: TObject);//Form1のButton1のOnClickイベント
  end;

var
  EventManager: TEventManager;

implementation

uses
  Unit1;

function TEventManager.Form1Button1Click(Sender: TObject);
begin
  Form1.Edit1.Text := 'Test';
end;

//usesした時点で作成、終了時に破棄したいなら以下2つ。
initialization
  EventManager := TEventManager.Create;

finalization
  if Assigned(EventManager) then EventManager.Free;

end.

として、例えばForm1のOnCreateで、
Button1.OnClick := EventManager.Form1Button1Click;
とすればイベントを割り当てられます。


にしの  2004-12-03 19:33:27  No: 12057

訂正です。
誤:function(Sender:TObject) of object
正:procedure(Sender:TObject) of object;


IU  2004-12-03 22:22:49  No: 12058

にしの様
プログラムまで書いてくださり、ありがとうございます。
今後の参考にさせて頂きます。

にしの様をはじめ、プログラマーの皆さんは
実際のところ、定義と宣言を分けて書かれているのでしょうか?

それとも、1つのユニットにどんどん書き込んでいってるのでしょうか?


りおりお  2004-12-03 23:23:00  No: 12059

基本的にはどんどん書き込んでいってます。

処理内容によっては他の処理にも使えるようなロジックがありますので、その場合は
関数や手続きにして別ユニットに分けます。そうすると別のプログラムからも使えます。

上記のようにイベントハンドラ全体を別ユニットに移すことはありません。


IU  2004-12-04 03:02:36  No: 12060

りおりお様

ご返信、ありがとうございます。

手間などを考慮し、今後どうするか決めていきたいと思います。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加