Форум: "Основная";
Текущий архив: 2004.04.18;
Скачать: [xml.tar.bz2];
ВнизПоказ модального окна на время большого цикла Найти похожие ветки
← →
Layner © (2004-03-30 09:21) [0]Приложение без потоков. Показываю fpause.ShowModal; перед началом цикла.. Пока форму fpause не закроешь, цикл не запускается. Подскажите, возможно ли без потоков такое реализовать, чтобы юзер видел модальное окно над программой (на нем надпись "Не трожь мышку!"), которая долго работает (большой цикл).
← →
Рамиль © (2004-03-30 09:23) [1]Запускай цикл в модальной форме.
← →
Layner © (2004-03-30 09:32) [2]Рамиль, спасибо,
... понятно ... но все ф-и и пр-ры уже сделанны в основной форме... И много навесных элементов от этой формы.. перенести то можно, а ещё есть вариант? Кроме потоков?
← →
Рамиль © (2004-03-30 09:36) [3]Нет, если только окно немодальным сделать.
← →
Layner © (2004-03-30 09:38) [4]А не модальное легко скрывается кликом на не его область... Хотя можно по таймеру его возвращать на место... Кажись так и сделаю, не красиво, но для информативности сойдет..
← →
Piople © (2004-03-30 09:43) [5]Дык ты не шоу-модал делай!!!! А просто Form1.Show!!!!!
← →
Erik © (2004-03-30 09:44) [6]Можеш ему top поставить и обрабатывать события деактивации для Application.
← →
Вованчик © (2004-03-30 09:52) [7]
> Layner © (30.03.04 09:32) [2]
> Рамиль, спасибо,
> ... понятно ... но все ф-и и пр-ры уже сделанны в основной
> форме... И много навесных элементов от этой формы.. перенести
> то можно, а ещё есть вариант? Кроме потоков?
так зачем же переносить - просто в модальной форме вызови нужную тебе функцию из основной формы и все.
← →
KSergey © (2004-03-30 09:53) [8]Вот, что у меня получилось, когда решал для себя проблему отображения аналогичного индикатора, при этом не хотелось уходить в доп. поток.
Убранный код значения не имеет, это просто настройка визуальных элементов формы индикатора. Праматры ф-ций так же не важны - на их основе настраивается этот самый вид.// отобразить индикатор
procedure TProgressForm.InitializeProgress(...);
begin
// проверка - индикатор уже инициализирован?
if Visible then Exit; // уже и так индикатор активен - выход
// настраиваем параметры отображения
..............
//--- дальнейший код взят из TCustomForm.ShowModal и несколько урезан
CancelDrag;
if GetCapture <> 0 then SendMessage(GetCapture, WM_CANCELMODE, 0, 0);
ReleaseCapture;
Include(FFormState, fsModal);
FActiveWindow := GetActiveWindow;
FSaveCursor := Screen.Cursor;
Screen.Cursor := crDefault;
FWindowList := DisableTaskWindows(0);
Show;
SendMessage(Handle, CM_ACTIVATE, 0, 0);
//-- конец кода из TCustomFirm.ShowModal
Application.ProcessMessages;
end;
// скрытие индикатора
procedure TProgressForm.EndProgress(...);
begin
// установить индикатор на максимум
.............
//--- дальнейший код взят из TCustomForm.ShowModal и несколько урезан
if GetActiveWindow <> Handle then FActiveWindow := (0);
Hide;
Screen.Cursor := FSaveCursor;
EnableTaskWindows(FWindowList);
if FActiveWindow <> 0 then SetActiveWindow(FActiveWindow);
Exclude(FFormState, fsModal);
//--- конец кода, взятого из TCustomForm.ShowModal
end;
В результате получаем поводение полностью аналогичное для модальной формы (сверху приложения, другие окна приложения не активизируются), но отображение/скрытие разнесено по разным методам.
Не забываем внутри долгого цикла изредка (но не слишком часто!) вызывать Application.ProcessMessages.
← →
Романов Р.В. © (2004-03-30 10:28) [9]Вместо того чтоб по нормальному через поток сделать мы будем огороды городить :/
← →
KSergey © (2004-03-30 11:08) [10]Во только не надо про "нормальные"
Помнится тогда я уже не раз писал свое мнение.
Но повторюсь.
Есть разные категории софта, есть различные по продолжительности операции, есть в конце концов стоимость разработки того или иного модуля.
Я настаиваю на том, что вынести функционал в поток - несколько сложнее, сложнее и поддреживать такой код. На сколько - другой вопрос, но сложнее - однозначно!! А потому - не всегда целесооборазно.
И если есть некая операция, которая происходит сравнтельно долго и, в принципе, пользователь все равно ждет ее завершения (по технологии так) - то зачем тратить лишние усилия на то, что все равно не будет использовано, но потребует доп. ресурсов разработчика??
← →
Layner © (2004-03-30 11:19) [11]Да, KSergey © прав, мне например много не надо, надо лишь юзеру сказать, чтобы ничего не жал из визуальных компонет. А прога не для распространения... для одного человека, на пару месяцев..
← →
Романов Р.В. © (2004-03-30 11:24) [12]Дык сделай Form1.Enabled := False и все
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.04.18;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.041 c