Bad Lamer
Зарегистрирован: 23.09.2004 Сообщения: 61
|
Добавлено: Вс Июл 15 2007 16:00 Заголовок сообщения: Работа с окном из треда |
|
|
Здравствуйте!
Мы сами не местные, поможите чем можете, люди добрые....
Среда разработки BDS 2006
По щелчку на пункте меню создаётся тред функцией CreateThread, в нём запускается процедура, производящая некоторые вычисления, и показывающая окошко с прогресс-баром для отображения течения процесса.
procedure TMainForm.Action8Execute(Sender: TObject);
var
x: Cardinal;
pr: Pointer;
begin
pr := @TMainForm.anythread;
CreateThread(nil, 0, pr, nil, 0, x);
end;
/////////////
procedure TMainForm.anythread;
var
i: integer;
count: integer;
begin
FormProgress.Show;
count:= 10000;
FormProgress.ProgressBar1.Max := count;
for i := 0 to count do
begin
FormProgress.ProgressBar1.StepIt;
end;
FormProgress.Close;
end;
создание окна с прогрессбаром происходит на стадии запуска приложения...
begin
Application.Initialize;
Application.CreateForm(TMainForm, MainForm);
Application.CreateForm(TFormProgress, FormProgress);
Application.Run;
end.
Проблема следующая:
при закрытии главной формы приложения происходит ошибка
Exception EOSError in module _____.exe at ______
System Error. Code: 1400.
Недопустимый дескриптор окна.
Если то же самое делать прямо из процедуры вызова меню (без треда) - такой ошибки не возникает... Т.е. после открытия-закрытия окна из треда окно меняет дескриптор?.. Как его сохранить перед вызовом треда, чтобы потом корректно освободить? |
|