![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
что-то типа ShowModal, но иначе :) [D7, Win95/98, WinME, NT4, Win2k, WinXP]
dUM © (2005-06-24 17:24:00)Пока в программе выполняются какие-то действия, пользователю нужно показать какое-нибуть окошко с прогресс баром, или просто с надписью вроде "ожидайте". Я делаю примерно вот так:
form1.Enabled:=false;
form2.show;
.....
.....
form2.close;
form2.Enabled:=true;
Но данный вариант мне очень не по душе. Подскажите, если ли альтернативы? Грубо говоря нужно чтобы во время отображения form2, у пользователя небыло доступа ни к каким функциям form1. Ну что-то типа SHowModal, только чтобы ещё и мой код паралельно выполнялся)
Юрий Зотов (2005-06-25 16:54:00) [21]> jack128
Жень, а если эта самая DoSomething выполняется полчаса?
Defunct (2005-06-25 14:17:00) [22]> jack128
вот я и говорю. интересный код. ;)
jack128 (2005-06-25 12:31:00) [23]Defunct © (25.06.05 0:49) [6]
гм.. интересный код ;)
код абсолютно коректен..
jack128 © (24.06.05 19:48) [3]
CancelForm := nil;
try
Поручик (2005-06-25 11:16:00) [24]F := TForm.Create(nil);
try
F.FormStyle := fsStayOnTop;
F.Show;
while ... do
begin
...
F.Caption := 'Обработано ХХХ%';
F.Refresh;
Appication.ProcessMessages;
...
end;
finally
F.Free;
end;
Defunct (2005-06-25 00:49:00) [25]> jack128
try
CancelForm := TCancelForm.Create(nil);
..
finally
CancelForm.Free;
..
гм.. интересный код ;)
uny (2005-06-24 22:35:00) [26]:) на окошке лучше написать "Пожалуйста ждите", "Please Wait", звучит лучше:)
dUM (2005-06-24 21:43:00) [27]Всем спасибо за идеи :)
jack128 (2005-06-24 19:48:00) [28]Не, я не люблю потоки постоянно делать.. Что то типа токого использую..
var
WndList: Pointer;
CancelForm: TCancelForm;
begin
WndList := DisableTaskWindows(0);
CancelForm := nil;
try
CancelForm := TCancelForm.Create(nil);
CancelForm.Show;
while (CancelForm.ModalResult = mrNone) and NeedDoWork do
DoSamething;
finally
CancelForm.Free;
EnableTaskWindows(WndList);
end;
end;
Юрий Зотов (2005-06-24 17:41:00) [29]> dUM © (24.06.05 17:24)
Показываете форму с прогрессбаром модально, а код выполняете в отдельном потоке, вот и все проблемы. Стандартное, миллион раз проверенное решение.
liver (2005-06-24 17:26:00) [30]компонент напиши.
я себе такой написал не так давно.
показываешь окно, лочишь все остальные окна...
и кнопку отмена делаешь...
все не так сложно если пораскинуть мозгами.