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

解決


IU  2004-12-03 10:20:23  No: 12055  IP: 192.*.*.*

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

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

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

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

よろしくお願いします。

編集 削除
にしの  2004-12-03 10:31:52  No: 12056  IP: 192.*.*.*

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 10:33:27  No: 12057  IP: 192.*.*.*

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

編集 削除
IU  2004-12-03 13:22:49  No: 12058  IP: 192.*.*.*

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

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

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

編集 削除
りおりお  2004-12-03 14:23:00  No: 12059  IP: 192.*.*.*

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

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

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

編集 削除
IU  2004-12-03 18:02:36  No: 12060  IP: 192.*.*.*

りおりお様

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

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

編集 削除