Delphi2005.NETです。
クラスメソッド内でself.Handleと同等のものを取得する方法がわかりません。
どなたか教えてください。お願いします。
class procedure TfrmMainform.SetXXX(Sender:TObject);
begin
PostMessage(self.Handle, ..., 0, 0);←こういう感じで使いたい!
end;
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/
うまく動作したら,この掲示板の他の方のためにもコード例を教えて下さい.
(俺は苦労したものを人になんか教えか,というなら別ですが)
>.NETではWin32APIは VCL for Win32のように使用できません.
もし,面倒であれば,DelphiがWin64に対応するまで待つことですね.
(WindowsがWinFXが使えるようになるまで)
ユニットにはフォームのインスタンスへの参照変数があるのでそれ使う。
ただし、フォームを生成する前にメソッドを呼んだり、
同一フォームを複数生成すると期待した動作にはならないはず。
class procedure TfrmMainform.SetXXX(Sender:TObject);
begin
Assert(Assigned(frmMainform));
frmMainform.PostMessage(self.Handle, ..., 0, 0);
end;
文法的なことを言えば、クラスメソッドからSelfは参照不可。
みなさま、ありがとうございます。
私も書き込み後にヘルプで「クラスメソッドからSelfは参照不可」と
いうことを知りました。
また、Win32APIをそのまま.NETで使用することは不可能であることも
存じていました。
安易にself.handleを示すためにPostMessage関数を記述してしまいました。
皆様のアドバイスを参考にトライし、結果を後日お知らせしようと思います。
ありがとうございます。
ツイート | ![]() |