AllocateHWndの処理の記述方法

解決


Fusa  URL  2008-03-20 04:16:15  No: 30218

こんにちは。

socket通信について勉強しようとしてて、いきなりつまづいてます。
ソケット

こける Wired-Winsockを使ってみようぜ
6.Windowが固まっちゃうなぁ
http://www.asahi-net.or.jp/~nk2w-ishr/winsock6.htm

このサイトの内容全体が....ちょっとわけがわからなさすぎて....
まあ、いいや。

ここの内容についてなのですが
下記のようなサンプルソースを書いてみました。

AllocateHWndについては初めて記述しますので疑問があります。

AllocateHWndに指定するWndProcを
自分自身のメソッドとして登録してしまってよいものでしょうか?
TForm1.WndProcを登録させなくていいのかな?

という疑問がひとつ、

もう一つ、
このクラスで確保したハンドルに対して
定期的にWM_TIMERを送信する仕組みを作れると思うのですが
それはどのようにするのでしょうか?

ご存じのかた、おられましたら。
よろしくお願いします。

下記サンプルでは
Button1でカウンターの中身表示して
Button2でメッセージを送ってカウンターを増加させてます。

type
  TAsyncSocketTest = class
    FCounter: Integer;
    FallocateHWndResult: THandle;
    constructor Create;
    destructor Destroy; override;
    procedure WndProc(var Msg:TMessage);
  end;

type
  TForm1 = class...省略
  private
    FAsyncSocketTest1: TAsyncSocketTest;
  end;

const
  WM_MYMESSAGE = WM_USER + 1;

constructor TAsyncSocketTest.Create;
begin
  inherited;

  FCounter := 0;

  Self.FallocateHWndResult :=
    AllocateHWnd(Self.WndProc)
end;

destructor TAsyncSocketTest.Destroy;
begin
  DeallocateHWnd(Self.FallocateHWndResult);
  inherited;
end;

procedure TAsyncSocketTest.WndProc(var Msg:TMessage);
begin
  if Msg.msg=WM_MYMESSAGE then
  begin
    Inc(FCounter);
  end
  else begin
    Msg.Result:=DefWindowProc(FallocateHWndResult,Msg.Msg,Msg.wParam,Msg.lParam);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Self.Caption := IntToStr(
  FAsyncSocketTest1.FCounter );
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  SendMessage(FAsyncSocketTest1.FallocateHWndResult, WM_MYMESSAGE, 0, 0);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  FAsyncSocketTest1 := TAsyncSocketTest.Create;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  FAsyncSocketTest1.Free;
end;


KHE00221  2008-03-20 08:59:10  No: 30219

AllocateHWnd のヘルプと TTimerのソースを見てごらん


Fusa  2008-03-21 23:57:14  No: 30220

ヘルプが壊れているので、AllocateHWndのヘルプは見れなかったのですが、TTimerのソースをみると、上記と全く同じでしたね。

ありがとうございます。


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

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






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