クラスメソッド内でself.Handleを取得するには


tomo  2005-12-15 15:51:26  No: 19250  IP: 192.*.*.*

Delphi2005.NETです。

クラスメソッド内でself.Handleと同等のものを取得する方法がわかりません。
どなたか教えてください。お願いします。

class procedure TfrmMainform.SetXXX(Sender:TObject);
begin
  PostMessage(self.Handle, ..., 0, 0);←こういう感じで使いたい!
end;

編集 削除
Mr.XRAY  URL  2005-12-15 22:17:13  No: 19251  IP: 192.*.*.*

tomoさんは,コード補完機能は使用していなのでしょうか.

>PostMessage(self.Handle, ..., 0, 0);←こういう感じで使いたい!

Handleがどうのこうのという前に,PostMessageというのは候補(リスト)でて
こないはずです.つまり,.NETではWin32APIは VCL for Win32のように使用で
きません.pInvokeを使用します.ネットで検索してみて下さい.

[参考サイトの例]
http://www.ipentec.com/delphi/delphi2005/pinvoke/index.html
http://www.pinvoke.net/

うまく動作したら,この掲示板の他の方のためにもコード例を教えて下さい.
(俺は苦労したものを人になんか教えか,というなら別ですが)

編集 削除
Mr.XRAY  URL  2005-12-15 22:26:47  No: 19252  IP: 192.*.*.*

>.NETではWin32APIは VCL for Win32のように使用できません.

もし,面倒であれば,DelphiがWin64に対応するまで待つことですね.
(WindowsがWinFXが使えるようになるまで)

編集 削除
いい加減にやるなら  2005-12-16 08:54:36  No: 19253  IP: 192.*.*.*

ユニットにはフォームのインスタンスへの参照変数があるのでそれ使う。
ただし、フォームを生成する前にメソッドを呼んだり、
同一フォームを複数生成すると期待した動作にはならないはず。
class procedure TfrmMainform.SetXXX(Sender:TObject);
begin
  Assert(Assigned(frmMainform));
  frmMainform.PostMessage(self.Handle, ..., 0, 0);
end;

文法的なことを言えば、クラスメソッドからSelfは参照不可。

編集 削除
tomo  2005-12-16 12:19:08  No: 19254  IP: 192.*.*.*

みなさま、ありがとうございます。

私も書き込み後にヘルプで「クラスメソッドからSelfは参照不可」と
いうことを知りました。
また、Win32APIをそのまま.NETで使用することは不可能であることも
存じていました。

安易にself.handleを示すためにPostMessage関数を記述してしまいました。

皆様のアドバイスを参考にトライし、結果を後日お知らせしようと思います。
ありがとうございます。

編集 削除