イベント ハンドラーの記述
基本クラスに属していない、新しいイベント ハンドラーを定義する必要がある場合は、何をすればよいでしょうか?例として、TfrxEditControl
コモン コントロールを使用して調べてみましょう。
TfrxEditControl = class(TfrxDialogControl)
private
FEdit: TEdit;
{ 新しいイベント }
FOnChange: TfrxNotifyEvent;
procedure DoOnChange(Sender: TObject);
...
public
constructor Create(AOwner: TComponent); override;
...
published
{ 新しいイベント }
property OnChange: TfrxNotifyEvent read FOnChange write FOnChange;
...
end;
constructor TfrxEditControl.Create(AOwner: TComponent);
begin
...
{ ハンドラーに接続する }
FEdit.OnChange := DoOnChange;
InitControl(FEdit);
...
end;
procedure TfrxEditControl.DoOnChange(Sender: TObject);
begin
{ イベント ハンドラーを呼び出す }
if Report <> nil then
Report.DoNotifyEvent(Sender, FOnChange);
end;
重要なのは、FastReport のイベント ハンドラーは、レポート スクリプトで宣言されたプロシージャであることに注目することです。その名前を含んでいる文字列が、ハンドラーへのリンクになります。そのため、Delphi の TNotifyEvent
型を例にとると、これはメソッドのアドレスで、ハンドラーの型ですが、FastReport ではこれは文字列です(TfrxNotifyEvent
型は String[63] として宣言されています)。