0

メインフォームが 1 つあるとします。メイン フォームには 2 つのボタン ( OpenClose ) があり、各ボタンをクリックすると、メイン フォームを親/所有者とするフレームが作成されます。フレームには、以下のサンプル コードを含む 3 つのボタン (追加、編集、および削除) が含まれています。

フレームコード:

unit UntFrame;

...

  type
  TFmeMain = class(TFrame)
    procedure AddClick(Sender: TObject);
    procedure EditClick(Sender: TObject);
    procedure DeleteClick(Sender: TObject);
  private ...
  public ...
  end;

implementation

{$R *.dfm}

uses ...

procedure TFmeMain.AddClick(Sender: TObject);
begin
   AddBtnClick;
end;

procedure TFmeMain.EditClick(Sender: TObject);
begin
   EditBtnClick;
end;

procedure TFmeMain.DeleteClick(Sender: TObject);
begin
   DelBtnClick;
end;

end.

フレームで使用される3 つのメソッド ( AddBtnClickEditBtnClickDelBtnClick ) は、UntOpen と UntClose という 2 つの異なるユニットに存在しますが、作成されたフレームによって動作が異なります。UntOpen は、[開く] ボタンがクリックされたときにフレームで使用する必要があります。UntClose は、メイン メニューから [閉じる] ボタンをクリックしたときに使用します。

UntOpen コード:

unit UntOpen;

...

procedure AddBtnClick;
procedure EditBtnClick;
procedure DelBtnClick;

implementation

procedure AddBtnClick;
begin
    ShowMessage('add open');
end;

procedure EditBtnClick;
begin
   ShowMessage('edit open');
end;

procedure DelBtnClick;
begin
   ShowMessage('delete open');
end;
end.

UntClose コード:

unit UntClose;

...

procedure AddBtnClick;
procedure EditBtnClick;
procedure DelBtnClick;

implementation

procedure AddBtnClick;
begin
    ShowMessage('add close');
end;

procedure EditBtnClick;
begin
   ShowMessage('edit close');
end;

procedure DelBtnClick;
begin
   ShowMessage('delete close');
end;
end.

フレームの追加、編集、または削除ボタンをクリックすると正しいメソッドが起動されるように、ユニットが作成されるたびにフレームの uses 句に (可能であれば) 動的に追加したい (開くボタンがクリックされた場合の UntOpen のメソッド)または [閉じる] ボタンがクリックされた場合は UntClose のメソッド)。

または、これを行うより効率的な方法はありますか?

ありがとう。

4

3 に答える 3

0

代わりに、次のようなことを試してください。

unit UntFrame;

...

type
  TFmeMain = class(TFrame)
    procedure AddClick(Sender: TObject);
    procedure EditClick(Sender: TObject);
    procedure DeleteClick(Sender: TObject);
  public
    OnAdd: procedure;
    OnEdit: procedure;
    OnDelete: procedure;
  end;

implementation

{$R *.dfm}

procedure TFmeMain.AddClick(Sender: TObject);
begin
  if Assigned(OnAdd) then OnAdd;
end;

procedure TFmeMain.EditClick(Sender: TObject);
begin
  if Assigned(OnEdit) then OnEdit;
end;

procedure TFmeMain.DeleteClick(Sender: TObject);
begin
  if Assigned(OnDelete) then OnDelete;
end;

end.

unit MainForm;

...

uses
  ..., UntFrame, UntOpen, UntClose;

...

procedure TFormMain.OpenClick(Sender: TObject);
begin
  with TFmeMain.Create(Self) do
  begin
    Parent := ...;
    OnAdd := Addr(UntOpen.AddBtnClick);
    OnEdit := Addr(UntOpen.EditBtnClick);
    OnDelete := Addr(UntOpen.DelBtnClick);
  end;
end;

procedure TFormMain.CloseClick(Sender: TObject);
begin
  with TFmeMain.Create(Self) do
  begin
    Parent := ...;
    OnAdd := Addr(UntClose.AddBtnClick);
    OnEdit := Addr(UntClose.EditBtnClick);
    OnDelete := Addr(UntClose.DelBtnClick);
  end;
end;

end.
于 2013-09-05T05:15:44.613 に答える