こんにちは。
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;
AllocateHWnd のヘルプと TTimerのソースを見てごらん
ヘルプが壊れているので、AllocateHWndのヘルプは見れなかったのですが、TTimerのソースをみると、上記と全く同じでしたね。
ありがとうございます。
ツイート | ![]() |