Antananarivu
Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Все это у меня есть... видимо какой то специфический глюк. То есть, когда программа уже работает во втором потоке, менюшка прекрасно всплывает. А виснет она только в момент ухода в параллельный поток (при открытом menu) . Вот процедура обработки мыши и popupmenu. Код: procedure TForm1.IconMouse(var Msg:TMessage); Var p:tpoint; begin GetCursorPos(p); Case Msg.LParam OF WM_LBUTTONUP,WM_LBUTTONDBLCLK: Begin Ic(2,Application.Icon); ShowWindow(Application.Handle,SW_SHOW); ShowWindow(Handle,SW_SHOW); End; WM_RBUTTONUP: Begin SetForegroundWindow(Handle); PopupMenu1.Popup(p.X,p.Y); PostMessage(Handle,WM_NULL,0,0); end; End; end; | Вот что происходит когда срабатывает таймер: Код: procedure TForm1.Timer1Timer(Sender: TObject); begin Timer1.Enabled:=false; EnterWorkerThread; try Dm.LoadMsg; finally LeaveWorkerThread; end; if (i_t=0) and (status= -25) then Timer1.Interval:=600000; Timer1.Enabled:=true; t:=incMillisecond(time,timer1.interval); end; | Вот что делает процедура LoadMsg (упрощенный вариант): Код: procedure TDM.LoadMsg; var mailcicl: integer; partstr: integer; s: string; addr, addr2, addr3, addr4: string; FN, FN1: string; stroka1, stroka2, stroka3, stroka4: string; stroka, sstroka, rv: string; tt, ing:integer; SS,ss2:char; begin try POP3.Connect; except on e:Exception do begin exit; end; end; tt:=POP3.CheckMessages; for mailcicl:=1 to tt do begin IdMessage.Clear; Main.Form1.Memo1.Clear; IdMessage.NoDecode:=false; ing:=0; POP3.Retrieve(mailcicl,IdMessage); ....... // обработка ....... // обработка end; ... ... end; | А проблему все-таки как-то надо решить... очень критично.. |