On〜に手動でイベントをコーディングするには?


まいく  2006-05-29 19:19:55  No: 21888

On〜と始まるイベント等に、オブジェクトインスペクタを使用せずにイベントをアサインするプログラムの書き方ってどうするんでしょうか?
例えば、TForm1のOnKeyUpに、DoSomethingというイベントをアサインする方法なのですが、
procedure DoSomething(Sender: TObject);
OnKeyup := DoSomething;
では、コンパイラエラーです。

すみませんが、教えていただけますでしょうか?


igy  2006-05-29 19:27:06  No: 21889

procedure TForm1.DoSomething(var Key: Word; Shift: TShiftState);

OnKeyup := DoSomething;

では、どうですか?


igy  2006-05-29 19:36:42  No: 21890

>procedure TForm1.DoSomething(var Key: Word; Shift: TShiftState);
訂正です。
procedure TForm1.DoSomething(Sender: TObject; var Key: Word; Shift: TShiftState);


まいく  2006-05-29 19:44:58  No: 21891

igyさん。
すみません、私が書いたコードは適当にサンプルで書きました。
実際は下記のようなコードになります。
尚、書き忘れていましたがDLLのプログラムを作成しています。

procedure ErrorHandle(Sender : TObject);
begin
    Error Handling
end;

Prt.OnPrinterError := ここにどうアサインするか?

OnPrinterError(Sender : TObject)は、Prt内の
property OnPrinterError:TNotifyEvent になります。

情報不足ですみませんでした。


補足  2006-05-29 19:45:50  No: 21892

イベントにも様々な型があり、

procedure DoSomething(Sender: TObject) は、
OnKeyUp のパラメータリストとは異なるので利用できません。

型を調べるには、
OnKeyUpのあたりにカーソルを置いて F1 キーでヘルプを
表示させてみれば分かります。


  2006-05-29 19:48:08  No: 21893

>procedure ErrorHandle(Sender : TObject);
オブジェクトで無いからではないでしょうか。

コレはやり方があった気がするけど
ちょっと忘れました。実験して調べてみます。


  2006-05-29 20:00:51  No: 21894

私は この方法しか分かりません。
@ や ^ を駆使して、出来たような気もするんですが、
今は思いつかない・・・。

procedure NonObjHandlerProc( paramators)
begin
  Handling;
end;

を利用するには

どこかのクラスのメンバーに
type
  //オブジェクトじゃない 関数型か手続き型の宣言をし
  TNonObjectHandler = procedure( ***);

  //それをクラス内部から呼び出すようにする
  TSomeClass
  private
    FNonObjectHandler = TNonObjectHandler;
  public
    略
  end;

constructor TSomeClass.Create()
begin
  //オブジェクトじゃないハンドラのアサイン
  FNonObjectHandler= TNonObjectHandler(NonObjHandlerProc);
end;

procedure TSomeClass.ObjectOfSomeEventHandler( paramators)
begin
  //オブジェクトじゃないハンドラを呼び出す
  FNonObjectHandler( parametors)
end;

オブジェクトであるハンドラは、オブジェクトであるハンドラにアサイン
Ptr.OnPainterError:= ObjectOfSomeEventHandler;

Ptr.OnPainterErrorの of object を外すという荒業も
考えられますが・・・。やったことは無いですね。

継承して of objectを外して しまうのはアリなのかな・・・。


まいく  2006-05-29 20:51:21  No: 21895

む  さん
ありがとうございます。
非常に難しいそうですが、頑張ってみます。


えーと  2006-05-29 22:13:06  No: 21896

難しいことはないですよ。
イベントは、メソッドポインタを一つ設定・取得できるプロパティーです。
だから、たんに型を合わせたメソッド・関数などを代入するだけ。


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

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






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