> Can you please help me? Something like below,
> or do I still haven't got it fully?

Looks partially good.
The problem, if I understand your code correctly, is that for the new 
window, the message numbers have not the same numbers. You must map old 
message numbers to the new message numbers before posting them to the new 
window.

--
[EMAIL PROTECTED]
http://www.overbyte.be


----- Original Message ----- 
From: "Arno Garrels" <[EMAIL PROTECTED]>
To: "ICS support mailing" <twsocket@elists.org>
Sent: Sunday, June 11, 2006 3:18 PM
Subject: Re: [twsocket] Enhancements for Thread Attach/Detach methods


> Francois PIETTE wrote:
>>> In V6, how can I extract messages of the to be detached socket only?
>>> Is it Peekmessage(Msg, OldHWnd, MsgLow, MsgLow + MsgCnt, PM_REMOVE)?
>>
>> No. This would retrieve all messages for all component sharing the
>> same TIcsWndHandler.
>> It is necessary to iterate thru FMsgMap to find all occurence of self
>> and get the corresponding message numbers (see
>> TIcsWndHandler.AllocateMsgHandler) to use in PeekMessage. It is not
>> guaranteed that all messages numbers for a given component are
>> contiguous altough it will most of the time.
>>
>> The problem is to retrieve all message from the old queue and post
>> them in the new queue in the same order. This can be solved by
>> examining the time member in TMsg record.
>
> Can you please help me? Something like below, or do I still haven't
> got it fully?
>
> procedure TIcsWndControl.MoveQueuedMessages(NewHwnd: HWND);
> var
>    I   : UINT;
>    Idx : Integer;
>    Msg : tagMsg;
>    P   : PMsg;
>    L   : TList;
>
>    function CmpFunc(Item1: Pointer; Item2: Pointer): Integer;
>    begin
>        if PMsg(Item1)^.time = PMsg(Item2)^.time then
>            Result := 0
>        else if PMsg(Item1)^.time > PMsg(Item2)^.time then
>            Result := 1
>        else
>            Result := -1;
>    end;
>
> begin
>    L := TList.Create;
>    try
>        I := 0;
>        while I < WH_MAX_MSG do
>        begin
>            if FWndHandler.FMsgMap[I] = Self then
>            begin
>                while PeekMessage(Msg, Handle, I + FWndHandler.FMsgLow,
>                                  I + FWndHandler.FMsgLow, PM_REMOVE) do
>                begin
>                    New(P);
>                    //P^.hwnd      := Msg.hwnd;
>                    P^.message   := Msg.message;
>                    P^.wParam    := Msg.wParam;
>                    P^.lParam    := Msg.lParam;
>                    P^.time      := Msg.time;
>                    L.Add(P);
>                end;
>            end;
>            Inc(I);
>        end;
>        L.Sort(@CmpFunc);
>        for Idx := 0 to L.Count - 1 do
>            PostMessage(NewHwnd, PMsg(L[Idx])^.message, 
> PMsg(L[Idx])^.wParam,
>                        PMsg(L[Idx])^.lParam);
>    finally
>        for Idx := 0 to L.Count - 1 do
>            System.Dispose(L[IDX]);
>        L.Free;
>    end;
> end;
>
>
>
>
>> --
>> [EMAIL PROTECTED]
>> http://www.overbyte.be
>>
>>
>>
>> ----- Original Message -----
>> From: "Arno Garrels" <[EMAIL PROTECTED]>
>> To: "ICS support mailing" <twsocket@elists.org>
>> Sent: Sunday, June 11, 2006 9:49 AM
>> Subject: Re: [twsocket] Enhancements for Thread Attach/Detach methods
>>
>>
>>> Francois PIETTE wrote:
>>>>> AFAIK winsock API function WSAAsyncSelect() is a common, blocking
>>>>> function. In this case it's called to disable winsock
>>>>> notifications. Because the window is detached/destroyed in
>>>>> subsequent lines. BTW: Same is done in V5.
>>>>> So for a short while the detached socket is windowless, that's
>>>>> why I suggested to wait w/o processing messages until it is
>>>>> attached again (not nice but worked for me).
>>>>
>>>> To be safe, the order should be:
>>>> 1) Stop notifications from winsock (WSAAsyncSelect) to the current
>>>> (old) hidden window
>>>> 2) Create the new hidden window
>>>> 3) Extract all messages from old hidden window queue and push them
>>>> to the new queue
>>>
>>> In V6, how can I extract messages of the to be detached socket only?
>>> Is it Peekmessage(Msg, OldHWnd, MsgLow, MsgLow + MsgCnt, PM_REMOVE)?
>>>
>>> ---
>>> Arno Garrels [TeamICS]
>>> http://www.overbyte.be/eng/overbyte/teamics.html
>>>
>>>
>>>
>>>> 4) Restart notifications from winsock to the new hidden window
>>>>
>>>> Probably a good idea to post a FD_READ message in the new queue
>>>> between 3 and 4 above. Because it may happend that data has been
>>>> received during the time interval when notifications have been
>>>> disabled.
>>>>
>>>> --
>>>> [EMAIL PROTECTED]
>>>> http://www.overbyte.be
>>> --
>>> To unsubscribe or change your settings for TWSocket mailing list
>>> please goto http://www.elists.org/mailman/listinfo/twsocket
>>> Visit our website at http://www.overbyte.be
> -- 
> To unsubscribe or change your settings for TWSocket mailing list
> please goto http://www.elists.org/mailman/listinfo/twsocket
> Visit our website at http://www.overbyte.be 

-- 
To unsubscribe or change your settings for TWSocket mailing list
please goto http://www.elists.org/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be

Reply via email to