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


tomo  2005-12-16 00:51:26  No: 19250

Delphi2005.NETです。

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

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


Mr.XRAY  URL  2005-12-16 07:17:13  No: 19251

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-16 07:26:47  No: 19252

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

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


いい加減にやるなら  2005-12-16 17:54:36  No: 19253

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

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


tomo  2005-12-16 21:19:08  No: 19254

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

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

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

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


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

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






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