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