Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2003.12.04;
Скачать: [xml.tar.bz2];

Вниз

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 вся ветка

Форум: "WinAPI";
Текущий архив: 2003.12.04;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.003 c
14-11699
alex134
2003-11-12 23:18
2003.12.04
Microsoft Project


1-11602
greenrul
2003-11-26 03:31
2003.12.04
Проблемы с File of TMyType


3-11594
Bart
2003-11-15 19:21
2003.12.04
GUID в MYSQL


4-11753
Евгешка
2003-10-10 20:16
2003.12.04
ListView_GetItemPosition рабочего стола


6-11668
DenKop
2003-10-07 16:00
2003.12.04
Как подставить куки к посылаемому post запросу





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский