Rambler's Top100
"Knowledge itself is power"
F.Bacon
Поиск | Карта сайта | Помощь | О проекте | ТТХ  
 Сокровищница
  
 

Фильтр по датам

 
 К н и г и
 
Книжная полка
 
 
Библиотека
 
  
  
 


Поиск
 
Поиск по КС
Поиск в статьях
Яndex© + Google©
Поиск книг

 
  
Тематический каталог
Все манускрипты

 
  
Карта VCL
ОШИБКИ
Сообщения системы

 
Форумы
 
Круглый стол
Новые вопросы

 
  
Базарная площадь
Городская площадь

 
   
С Л С

 
Летопись
 
Королевские Хроники
Рыцарский Зал
Глас народа!

 
  
ТТХ
Конкурсы
Королевская клюква

 
Разделы
 
Hello, World!
Лицей

Квинтана

 
  
Сокровищница
Подземелье Магов
Подводные камни
Свитки

 
  
Школа ОБЕРОНА

 
  
Арсенальная башня
Фолианты
Полигон

 
  
Книга Песка
Дальние земли

 
  
АРХИВЫ

 
 

Сейчас на сайте присутствуют:
 
  
 
Во Флориде и в Королевстве сейчас  17:57[Войти] | [Зарегистрироваться]

Обсуждение материала
Сам загружу, сам покажу
Полный текст материала


Другие публикации автора: George Judkin

Цитата или краткий комментарий:

«... Использование модальной формы для отображения хода выполнения длительного процесса. ...»


Важно:
  • Страница предназначена для обсуждения материала, его содержания, полезности, соответствия действительности и так далее. Смысл не в разборке, а в приближении к истине :о) и пользе для всех.
  • Любые другие сообщения или вопросы, а так же личные эмоции в адрес авторов и полемика, не относящаяся к теме обсуждаемого материала, будут удаляться без предупреждения авторов, дабы не мешать жителям нормально общаться.
  • При голосовании учитывайте уровень, на который расчитан материал. "Интересность и полезность" имеет смысл оценивать относительно того, кому именно предназначался материал.
  • Размер одного сообщений не должен превышать 5К. Если Вам нужно сказать больше, сделайте это за два раза. Или, что в данной ситуации правильнее, напишите свою статью.
Всегда легче осудить сделанное, нежели сделать самому. Поэтому, пожалуйста, соблюдайте правила Королевства и уважайте друг друга.



Добавить свое мнение.

Результаты голосования
Оценка содержания

  Содержит полезные и(или) интересные сведения
[1]5100%
 
  Ничего особенно нового и интересного
[2]00%
 
  Написано неверно (обязательно укажите почему)
[3]00%
 
Всего проголосовали: 5

Оценка стиля изложения

  Все понятно, материал читается легко
[1]375%
 
  Есть неясности в изложении
[2]125%
 
  Непонятно написано, трудно читается
[3]00%
 
Всего проголосовали: 4




Смотрите также материалы по темам:
[Модальные формы (режим ShowModal)] [Обработка длительных процессов (отображение/реакция и т.п.)]

Комментарии жителей
Отслеживать это обсуждение

Всего сообщений: 15

28-04-2012 10:58
Здравствуйте, уважаемые рыцари!
Как уже говорилось ранее, делать наследников, для каждой отдельной операции не удобно.

А что, если использовать такой вариант:

Создаем класс формы, с нужными компонентами для отображения прогресса выполнения длительных операций, а также их пояснения.
Перед началом длительной операции, создаем форму, вместо ShowModal делаем просто Show, если нужно блокируем окно текущей формы. В процессе выполнений длительной операции изменяем значения прогресса на форме, а в конце закрываем и освобождаем ее.

Плюсом такому классу-форме можно написать удобные методы по увеличению прогресса, изменению пояснений, добавить возможность создавать "многоуровневый" прогресс, к примеру для ситуаций, когда нужно обрабатывать вложенные циклы.
 Egen


26-01-2012 23:11
сообщение от автора материала
>>> Нафиг этот ваш FireMonkey, я до сих пор в Дельфи 6 сижу и не вижу никаких причин для кроссплатформенности.
Нафиг все эти ваши станки с ЧПУ. И вообще ГАП — фигня. Я как точил болты на токарном станке, так и точу.

Рассуждения о том, нужна ли кроссплатформенность или нет в данном обсуждении являются офф-топиком. Здесь статья обсуждается. Идите на Базарную Площадь. Если хотите поговорить о кроссплатформенности вообще, давайте создадим там новую тему. Но не здесь. Ага?
 Geo


26-01-2012 17:05
> . Кабы ты это сделал в FireMonkey,

Нафиг этот ваш FireMonkey, я до сих пор в Дельфи 6 сижу и не вижу никаких причин для кроссплатформенности.


15-11-2011 12:30
сообщение от автора материала
>>> Как передать этой "градусной" форме что ей делать? Получается, что сколько типов "зависаний" - столько же потомков (не экземпляров) этой формы
В данный момент именно так дело и обстоит. Это уже Сергей Перовский отметил. Были "гениальные" идеи попытаться сделать, например, события, обработчики которых задавать в Object Inspector. Были и еще задумки разные. Но все они постепенно обломились. Скорее всего, я больше это направление развивать не буду, поэтому решил отдать, что есть. Собственно, отдать идею с посылкой сообщения самому себе и занозу в мозги, что лучше сделать это дело гибким и настраиваемым.

>>> давно привык генерить формы через некую функцию, которая объявлена в интерфейсной части модуля формы
Я тоже люблю делать так же. Но вот делать некую универсальную функцию MessageDlg что-то не захотелось. Почему-то это показалось коряво.

>>> и еще про "оставшееся время"
Тут не настаиваю. Это на любителя. Но мне почему-то кажется нечестным, когда мне говорят "до завершения операции осталось 5 минут", а эти пять минут не имеют никакого отношения к тому, сколько времени осталось реально до завершения операции. С таким же успехом можно вообще ничего не вычислять и не корректировать, а до последнего момента писать, что до завершения операции осталось 30 секунд. Резульатты по качестыву будут такими же, а трудозатраты существенно меньше ;-)

Если же я пишу, что загружено 5 объектов из 12, то я ни капельки не вру. Их действительно загружено 5. А всего их действительно 12.
 Geo


14-11-2011 19:12
Да и еще про "оставшееся время"... Я в параметрах указываю некую величину, которой инициализируется обратный отсчет. А вот в процессе обработки записей идет коррекция обратного отсчета по принципу среднее время обработки записи умножить на кол-во оставшихся записей.. Да, вначале он "прыгает" - работаю с Экселем и количество вызовов его методов различно, но к "середине градусника" (его макс - количество записей) уже достаточно достоверное время получается. Вывожу его отдельной лэйбой.


14-11-2011 19:01
Не совсем понятно как эта модальная форма в процессе своего "модала" создает некую форму, генерит какие-то компоненты, да и еще обрабатывает некие записи по-строчно. Ну ладно, пусть это реализуется в некоем XXXStepIt и код остался за кадром, но... Как же все-таки получить ссылку на вновь созданную форму, результаты пошаговой оьработки записей? Как передать этой "градусной" форме что ей делать? Получается, что сколько типов "зависаний" - столько же потомков (не экземпляров) этой формы.
Я тоже сталкивался с такой проблемой, но поскольку уже давно привык генерить формы через некую функцию, которая объявлена в интерфейсной части модуля формы, то сделать такой "градусник" оказалось просто заменить Show на ShowModal (проблема с "активацией" решена точно также). Вот только уже имея в функции параметры вызова - никаких проблем в том, чтобы иметь кучу "возможных решаемых задач" и возвращении результатов.


01-11-2011 03:24
сообщение от автора материала
Тэк-с... Господа, я, кажется, был неверно понят. Поясняю еще раз...
Я всю жизнь предпочитал разрабатывать маленький и быстрый код. Это достигается, в основном, только за счет разработки нативного кода. Зачастую, не просто под винду или никсы, а под конкретную версию. И тут мне предлагается сделать некое кроссплатформенное решение, которое заведомо будет больше и медленнее. Именно это я называл в своих сообщениях "кроссплатформенным монстром".

Причем, умом понимаю, что так надо. Что разрабатывать десять решений под десять разных платформ — это намного дороже, чем разработать одно кроссплатформенное решение, но душа к этому не лежит :(

Ну и это... у меня сейчас очень-очень мало остается на программирование. Решению, которое я опубликовал в этой статье, уже года два. И вот только сейчас оно дозрело до публикации.
 Geo


01-11-2011 03:05
Юра! XE2 - это не кроссплатформенный монстр.
Там просто заместо VCL используется FireMonkey для кроссплатформы. Ничего монстроидального нет в этом.

Кстати, раз уже на джинсу меня потянуло:
где-то в начале февраля 2-3 будет конференция для Delphi-программистов силами Delphi-программистов.
Не пропустите! Планируйте отпуска/командировки.

И по FireMonkey - сейчас я готовлю большую красивую онлайн-интервью с Евгением Крюковым (ex. ksdev), одним из главных идеологов FireMonkey. Там попсы будет мало, а архитектуры много.

P.S. Я про кроссплатформу почему заикнулся - если делать что-то для кроссплатформенного кода (на FireMonkey, например), то нужно от механаизма (платформенно-зависимого) посылки сообщений Windows уходить. Собственно, Юра, если ты сделаешь "без сообщений", но на VCL, то обязуюсь (со ссылкой на тебя) перепахать на FireMonkey с тестированием под родную MacOS.


31-10-2011 15:44
..., а ты мне предлагаешь некоего кроссплатформенного монстра. Вроде бы про Delphi XE2 на халяву речь не шла :o)
 Cep


31-10-2011 14:21
Отлично. Просто и по делу. Спасибо за материал, возьму на заметку - в хозяйстве пригодится.


31-10-2011 13:41
сообщение от автора материала
>>> А если в задаче потребуется несколько разных запросов, для каждого делать свою форму - наследник?
Обломился я дальше обобщать *смущенно уставился себе под ноги*

>>> Форма одна и сколько угодно компонент для управления, имеющие обработчики OnCalcStepCount и OnProceedStep
Да, именно это вариант напрашивается в первую очередь. Но там сразу идеи начинают фонтанировать. Например, текст сообщения тоже хочется сделать кастомизируемым. Далее, возможно, имеет смысл включать значение счетчика в текст сообщения (что-то вроде Загружается модуль 5 из 12.). Ну и так далее, и тому подобное. У меня очень богатая фантазия ;-)

Поэтому, решил сейчас подать именно так. Основной упор, все же, на то: как можно вообще использовать модальные окна в данной ситуации (трюк с посылкой сообщения самому себе). А если потом будет время, то можно и еще что-то доизобретать.
 Geo


31-10-2011 13:32
сообщение от автора материала
Сева, ну ты сказал!

Я же всю жизнь любил писать маленький шустрый код, а ты мне предлагаешь некоего кроссплатформенного монстра. Это мне, у которого на стене висит высказывание про то, что амфибия — это хре... э-э-э... плохой автомобиль и плохой катер ;-)

А что касается этого материала... Не надо в нем искать какой-то глубокий смысл. Это просто маленькое техническое решение. Когда-то я в этом месте споткнулся и нашел, как мне показалось, оригинальное решение. Которым я и решил поделиться. Ну и еще, наверное, был один побудительный мотив. Очень уж мне хочется донести до программистов, что программирование — это не только визуальное проектирование и прописывание обработчиков событий. Раньше я уже пытался показать, что разработка собственных классов, например, это тоже программирование. Причем, доступное любому. А не только каким-то супер-мега-гуру. Сейчас вот добрался до механизма сообщений. Показал, что их тоже можно использовать простым смертным. Более того, без них иногда задачу решить затруднительно.

А про "метафору FlashGet" (чувствую, что я перестаю понимать современную терминологию ;-))... Знаешь, есть напимер, простенькие программы, в которых многопоточность и параллельность просто не нужны. Как бы не совершенствовался Photoshop, всегда останется место для простенького Paint. А еще есть, например, инициализация системы. Там что-то похожее тоже может пригодиться.
 Geo


31-10-2011 13:15
Кстати, не очень ясно, почему нет такого стандартного компонента. Задача распространенная и очевидная.


31-10-2011 13:05
А если в задаче потребуется несколько разных запросов, для каждого делать свою форму - наследник?
Мне, почему-то, никогда не нравилась идея создания нового класса, ради единственного экземпляра.
Поэтому для подобных случаев я бы сделал нечто похожее на компоненты - диалоги.
Форма одна и сколько угодно компонент для управления, имеющие обработчики OnCalcStepCount и OnProceedStep.


31-10-2011 04:54
Юра, люблю тебя как родного.
Но хочу творчески покритиковать.
1. Не хочу, чтобы код был платформенно-зависимым. Кабы ты это сделал в FireMonkey, я бы воспел твой талант. А так могу лишь сказать, что нужно диверсифицировать свои инвестиции в исходный код.
2. Метафора с оконным подпрыгом в фейс юзеру не может считаться новой и, следовательно, перспективной. Более современно - список задач и кнопки "пуск/стоп/пауза" на тулбаре. Выбрал задачу - и изменил статус её выполнения.
3. Не хочу показаться невежливым, но метафора FlashGet-а - хороша.

Вот бы нам фреймворк, где что-то типа MVC с презумпцией выполнения задачи во вторичном потоке.
Раскатал губы? :)


Добавьте свое cообщение

Вашe имя:  [Войти]
Ваш адрес (e-mail):На Королевстве все адреса защищаются от спам-роботов
контрольный вопрос:
Жили у бабуси два веселых гуся. Один белый, другой КАКОЙ?
в качестве ответа на вопрос или загадку следует давать только одно слово в именительном падеже и именно в такой форме, как оно используется в оригинале.
Надоело отвечать на странные вопросы? Зарегистрируйтесь на сайте.

Оценка содержания
 
Содержит полезные и(или) интересные сведения
 
Ничего особенно нового и интересного
 
Написано неверно (обязательно укажите почему)


Оценка стиля изложения
 
Все понятно, материал читается легко
 
Есть неясности в изложении
 
Непонятно написано, трудно читается

Текст:
Жирный шрифт  Наклонный шрифт  Подчеркнутый шрифт  Выравнивание по центру  Список  Заголовок  Разделительная линия  Код  Маленький шрифт  Крупный шрифт  Цитирование блока текста  Строчное цитирование
  • вопрос Круглого стола № XXX

  • вопрос № YYY в тесте № XXX Рыцарской Квинтаны

  • сообщение № YYY в теме № XXX Базарной площади
  • обсуждение темы № YYY Базарной площади
  •  
     Правила оформления сообщений на Королевстве
      
    Время на сайте: GMT минус 5 часов

    Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
    Функция может не работать в некоторых версиях броузеров.

    Web hosting for this web site provided by DotNetPark (ASP.NET, SharePoint, MS SQL hosting)  
    Software for IIS, Hyper-V, MS SQL. Tools for Windows server administrators. Server migration utilities  

     
    © При использовании любых материалов «Королевства Delphi» необходимо указывать источник информации. Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта.
    Все используемые на сайте торговые марки являются собственностью их производителей.

    Яндекс цитирования