Robert, You have to check for Msg.hwnd = 0 otherwise your custom message IDs will probably conflict which TWSocket's own messages like:
while GetMessage(MsgRec, 0, 0, 0) do begin if MsgRec.hwnd = 0 then {<== ** VERY IMPORTANT ** } begin Handle messages posted to this thread through PostThreadMessage() end else begin // Other messages posted to some window handle in this thread // TranslateMessage(MsgRec); DispatchMessage(MsgRec); end; Also if you overrode TWSocket's WndProc method to handle own, custom messages posted to TWSocket's window handle those custom messages MUST be allocated by overriding three more methods in ICSv6+, here's an example: {* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *} function TCustomFtpCli.MsgHandlersCount : Integer; begin Result := 3 + inherited MsgHandlersCount; end; {* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *} procedure TCustomFtpCli.AllocateMsgHandlers; begin inherited AllocateMsgHandlers; FMsg_WM_FTP_REQUEST_DONE := FWndHandler.AllocateMsgHandler(Self); FMsg_WM_FTP_SENDDATA := FWndHandler.AllocateMsgHandler(Self); FMsg_WM_FTP_CLOSEDOWN := FWndHandler.AllocateMsgHandler(Self); end; {* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *} procedure TCustomFtpCli.FreeMsgHandlers; begin if Assigned(FWndHandler) then begin FWndHandler.UnregisterMessage(FMsg_WM_FTP_REQUEST_DONE); FWndHandler.UnregisterMessage(FMsg_WM_FTP_SENDDATA); FWndHandler.UnregisterMessage(FMsg_WM_FTP_CLOSEDOWN); end; inherited FreeMsgHandlers; end; {* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *} BTW: Method PutDataInSendBuffer() actually _is thread-safe, so there is no need to copy data a second time to a custom buffer. -- Arno Garrels -- To unsubscribe or change your settings for TWSocket mailing list please goto http://lists.elists.org/cgi-bin/mailman/listinfo/twsocket Visit our website at http://www.overbyte.be