現在、メインフォームにButtonとEditを1つずつ置き、
Buttonが押されたらEditボックスの内容を変更するようにしています。
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit1.Text:='TEST';
end;
このプロジェクトにユニットを1つ追加(Unit2)し、関数の中身を
そちらに移したいのですが、どのようにすれば良いでしょうか?
Unit1では関数の宣言だけを行い、定義はUnit2で行いたいのです。
(今後、メインフォームに順次ボタンを配置していくので、Unit1は出来るだけ短くスッキリさせたいのです)
よろしくお願いします。
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;
とすればイベントを割り当てられます。
訂正です。
誤:function(Sender:TObject) of object
正:procedure(Sender:TObject) of object;
にしの様
プログラムまで書いてくださり、ありがとうございます。
今後の参考にさせて頂きます。
にしの様をはじめ、プログラマーの皆さんは
実際のところ、定義と宣言を分けて書かれているのでしょうか?
それとも、1つのユニットにどんどん書き込んでいってるのでしょうか?
基本的にはどんどん書き込んでいってます。
処理内容によっては他の処理にも使えるようなロジックがありますので、その場合は
関数や手続きにして別ユニットに分けます。そうすると別のプログラムからも使えます。
上記のようにイベントハンドラ全体を別ユニットに移すことはありません。
りおりお様
ご返信、ありがとうございます。
手間などを考慮し、今後どうするか決めていきたいと思います。