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


まいく  2006-05-29 10:19:55  No: 21888  IP: 192.*.*.*

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

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

編集 削除
igy  2006-05-29 10:27:06  No: 21889  IP: 192.*.*.*

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

OnKeyup := DoSomething;

では、どうですか?

編集 削除
igy  2006-05-29 10:36:42  No: 21890  IP: 192.*.*.*

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

編集 削除
まいく  2006-05-29 10:44:58  No: 21891  IP: 192.*.*.*

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

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

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


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

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

編集 削除
補足  2006-05-29 10:45:50  No: 21892  IP: 192.*.*.*

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

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

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

編集 削除
 2006-05-29 10:48:08  No: 21893  IP: 192.*.*.*

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

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

編集 削除
 2006-05-29 11:00:51  No: 21894  IP: 192.*.*.*

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


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 11:51:21  No: 21895  IP: 192.*.*.*

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

編集 削除
えーと  2006-05-29 13:13:06  No: 21896  IP: 192.*.*.*

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

編集 削除