Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-1080594387
Pavel
2004-03-30 01:06
2004.04.18
Timer


14-1080339459
Mr.BiZONe
2004-03-27 01:17
2004.04.18
WWW.MISHABOG.NAROD.RU


1-1080505135
Diver
2004-03-29 00:18
2004.04.18
ComboBox


3-1079891555
neVIP
2004-03-21 20:52
2004.04.18
Эксклюзивный доступ к базе


1-1080459979
Neep
2004-03-28 11:46
2004.04.18
Помогите разобраться с CallBack





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский