Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.12.04;
Скачать: CL | DM;

Вниз

TThread CreateWindow and DestroyWindow   Найти похожие ветки 

 
vova_d   (2003-10-10 18:07) [0]

есть следующий код Execute в THread

procedure TWaitThread.Execute;
var Progress:Integer; Start:DWORD;
WClass: TWndClass;
Handle: HWND;
Msg: TMsg;
Result: Integer;
begin
with WClass do begin
style := CS_VREDRAW or CS_HREDRAW;
lpfnWndProc := @WndProc;
cbClsExtra := 0;
cbWndExtra := 0;
hInstance := SysInit.HInstance;
hIcon := LoadIcon(HInstance,IDI_APPLICATION);
hCursor := LoadCursor(HInstance,IDC_WAIT);
hbrBackground := GetStockObject(LTGRAY_BRUSH);
lpszMenuName := nil;
lpszClassName:= AppName;
end;
windows.RegisterClass(WClass);
Handle := CreateWindowEx(
WS_EX_OVERLAPPEDWINDOW ,
AppName,"Progress",
WS_OVERLAPPED ,
(Screen.Width - 260) div 2, (Screen.height - 80) div 2,
260,80,
0,0, HInstance, nil);
ShowWindow(Handle,SW_SHOW);
UpdateWindow(Handle);
SetFocus(Handle);
while GetMessage(Msg,0,0,0) do begin
if Terminated then begin
ShowWindow(Handle,SW_HIDE);
DestroyWindow(Handle);
end;
TranslateMessage(Msg);
DispatchMessage(Msg);
Inc(Count);
end;
Handle:=0;
end;

Wndproc:

function WndProc(HWnd: HWND; Msg: UINT;
wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
begin
case Msg of
WM_DESTROY:
begin
PostQuitMessage(0);
Result := 0;
end
else
Result := DefWindowProc(HWnd,Msg,WParam,LParam);
end;
end;

Вопрос - из главного приложения создаю тред - появляеться окно- все как положено, когда вызываю Terminate тред как и положено по закругляеться - т е выходит.
однако созданное окно висит на экране пока на него как то не поместить фокус (мышкой навести )
почему так и как поступить дабы это окно грохнуть и освободить ?
а то создаеться впечатление что оно не получает сообщений совсем.
Пытаюсь сделать прогресс барчик через АПИ тк надо вызывать долго отрабатывающую функцию в главном приложении


 
clickmaker ©   (2003-10-10 18:25) [1]

А где у тебя DestroyWindow в конце потока ?


 
l2t_guest   (2003-10-10 18:29) [2]

нашел в чем суть проблемы, peekMessage меня спасло ну и соответсвенно вынес DestroyWindow в конец потока


 
clickmaker ©   (2003-10-10 18:30) [3]

Сорри, не заметил, есть DestroyWindow

Скорей всего у тебя не доходит до
if Terminated then begin

когда делаешь Terminate, поскольку поток висит на while GetMessage. А когда фокусируешь, GetMessage срабатывает и if Terminated срабатывает. Попробуй ему послать сообщение PostThreadMessage вместо Terminate



Страницы: 1 вся ветка

Текущий архив: 2003.12.04;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.007 c
6-11640
Recruit
2003-10-10 12:16
2003.12.04
Как узнать SMTP-сервер?


6-11664
Stas
2003-10-08 09:26
2003.12.04
Документация по TCP/IP


6-11648
Lam
2003-10-09 16:49
2003.12.04
Порты


14-11701
Vinni
2003-11-13 08:35
2003.12.04
как положить на панель лэйблы, эдиты и тд


4-11750
lamorg
2003-10-10 17:31
2003.12.04
Как установить ani-курсор