Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

что-то типа ShowModal, но иначе :) [D7, Win95/98, WinME, NT4, Win2k, WinXP]


Страницы:   1 2

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]

компонент напиши.
я себе такой написал не так давно.
показываешь окно, лочишь все остальные окна...
и кнопку отмена делаешь...
все не так сложно если пораскинуть мозгами.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо