![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Останавливается информация о ходе выполнения процесса [D7, XP]
kyn66 © (2009-11-06 13:11:00)Добрый день, мастера. Во время загрузки данных в таблицу(процесс занимает определенное время) информирую пользователя о ходе выполнения процесса через ProgressBar и цифровую информацию в процентах http://yurec66.narod.ru/Vopros/proc.jpg. Если не совершать никаких действий, все идет нормально. Вот код обработки:
SL := TStringList.Create;
SL.LoadFromFile(ImportPath + FName);
PB1.Max := SL.Count;
PB1.Position := 0;
Nzap := 0;
NzapV := 0;
NzapC := Trunc(SL.Count/100);
for i := 0 to SL.Count - 1 do
begin
SS := SL[i];
...
// ряд некоторых операций
...
PB1.Position := PB1.Position + 1;
Inc(Nzap);
if Nzap >= NzapC then
begin
Inc(NzapV);
ProcLab.Caption := IntToStr(NzapV) + ' %';
ProcLab.Update;
Nzap := 0;
end;
// еще одна операция некоторая
end;
SL.Destroy;
PB1.Position := 0;
Стоит только перключиться на другое окно или это в фоне сделает любая юругая программа(т.е. окно с прогрессом теряет фокус) - прогресс сразу же замирает, цифры процентов не меняются. СОздается впечатление, что прога зависла, хотя процесс обработки данных выполняется. Как это выличить? ЧТобы и при потере фокуса прогресс с процентами не переставали информировать юзера?
kyn66 (2009-11-08 14:58:00) [1]
> Не требуется никаких ссылок, более того и бросать компонент
> не требуется, достаточно факта самого наличия ресурса в
> программа, его даже и без Дельфи можно подключить к программе,
> практически любым редактором ресурсов.
Можно и так, по разному можно. Однако это не решает первоначальной проблемы(конфликт Tanimate & Manifest).
Anatoly Podgoretsky (2009-11-08 14:30:00) [2]> kyn66 (08.11.2009 14:13:58) [118]
Не требуется никаких ссылок, более того и бросать компонент не требуется, достаточно факта самого наличия ресурса в программа, его даже и без Дельфи можно подключить к программе, практически любым редактором ресурсов.
kyn66 (2009-11-08 14:13:00) [3]
> Anatoly Podgoretsky © (08.11.09 14:06) [117]
>Это ресурс
Так чтобы этот ресурс задействовать, нужно сделать на него сылку...
Anatoly Podgoretsky (2009-11-08 14:06:00) [4]> kyn66 (08.11.2009 13:11:51) [111]
Это ресурс
kyn66 (2009-11-08 14:04:00) [5]Вот нашел обсуждение этого вопроса в Королевстве http://www.delphikingdom.com/asp/answer.asp?IDAnswer=36617.Получается что при взаимодействии с манифестом Animate не воспроизводится в отдельном потоке, согласно доки. Значит может стоит попробывать запустить его через таймер? Ну, как вариант проверки...
kyn66 (2009-11-08 13:38:00) [6]
> Сергей М. © (08.11.09 00:08) [105]
> Проблема с работой TAnimate в XP-приложении,
> использующем манифесты, фигурирует в Гугле. Если это подтвердится
> и у тебя, значит придется отказываться либо от манифестов
> либо от TAnimate (в пользу аналогов типа JvAnimate или иных)
Сергей, ты как всегда прав! Дело в манифесте. Проверил на новом проекте. Значит я думаю проще отказаться от анимации, нежеле разрушать вид программы(XP-шная мягкость фейса). Если не найдется отдельного , не конфликтующего с манифестом компонента анимации, то предется оставить как есть.
kyn66 (2009-11-08 13:31:00) [7]
> {RASkov} © (08.11.09 13:26) [112]
Согласен.
{RASkov} (2009-11-08 13:29:00) [8]Вот его полный код:
unit XPMan;
{$WEAKPACKAGEUNIT ON}
interface
uses SysUtils, Classes;
type TXPManifest = class(TComponent) end;
{$R WindowsXP.res} - Единственная "полезная" строка в коде компонента
implementation
end.
{RASkov} (2009-11-08 13:26:00) [9]> [111] kyn66 © (08.11.09 13:11)
> Кстати, меня всегда интересовал этот компонент. Как он влияет
> на все формы, если установлен только в одной.
У компонента функционала - ноль. Единственное в его коде - это добавление к исполняемому модулю ресурса с этим самым манифестом.
Отсюда следует что сам компонент как таковой вообще не нужен, достаточно в любом uses проекта(хоть в самом *.dpr) указать юнит XPMan.
kyn66 (2009-11-08 13:11:00) [10]
> Anatoly Podgoretsky © (08.11.09 11:09) [109]
> > kyn66 (08.11.2009 00:01:44) [104]Удалять надо со всех
> форм и не только компонент, но и записи во всех uses
Компонент манифеста устанавливает с собою модуль XPMan. Так вот, этот модуль обнаружен только в главном(MainFrm), где он конкретно и был установлен. Dj всех остальных модулях проекта в секциях Uses он не обнаружен. Кстати, меня всегда интересовал этот компонент. Как он влияет на все формы, если установлен только в одной.
> Говорил же, что будет более 100 сообщений, как в воду глядел.
Связано с множеством одиночных наводящих вопросов. Был бы то чат или... другой способ, тема была бы поменьше. А с kheujq стороны на форуме и пытаешься достичь истины. В 75% это удается.
Anatoly Podgoretsky (2009-11-08 11:10:00) [11]> kyn66 (08.11.2009 00:43:47) [107]
Посторонние Супер компоненты.
Anatoly Podgoretsky (2009-11-08 11:09:00) [12]> kyn66 (08.11.2009 00:01:44) [104]
Удалять надо со всех форм и не только компонент, но и записи во всех uses
Anatoly Podgoretsky (2009-11-08 11:08:00) [13]> kyn66 (07.11.2009 23:52:41) [101]
Говорил же, что будет более 100 сообщений, как в воду глядел.
kyn66 (2009-11-08 00:43:00) [14]Уже и в самой винде переключал на Классический стиль - все тоже.
kyn66 (2009-11-08 00:13:00) [15]
> придется выкорчевывать манифесты,
Так вот я и спрашиваю, куда он еще прописывается, если я его положил только на MainFrm, а все формы его "видят" и отвечают... Нужно действительно тогда проверить эту версию
Сергей М. (2009-11-08 00:08:00) [16]
> while true do Application.ProcessMessages; - работает;
Значит либо у тебя на самом деле Animate.Timers = True либо придется выкорчевывать манифесты, так чтобы ими даже не пахло в приложении.
Проблема с работой TAnimate в XP-приложении, использующем манифесты, фигурирует в Гугле. Если это подтвердится и у тебя, значит придется отказываться либо от манифестов либо от TAnimate (в пользу аналогов типа JvAnimate или иных)
kyn66 (2009-11-08 00:01:00) [17]
> Сергей М. © (07.11.09 23:54) [102]
Убрал - разницы нет
while true do; - не работает
while true do Application.ProcessMessages; - работает;
Удалил с главной формы компонент XPManifest1: TXPManifest, моуль XPMan. Но кнопки остались как с манифестом. Он еще куда не записывается?
Сергей М. (2009-11-07 23:54:00) [18]
> В проге да
Убирай.
И пробуй сначала вариант с
while true do;
затем с
while true do Application.ProcessMessages;
kyn66 (2009-11-07 23:54:00) [19]
> Сергей М. © (07.11.09 23:50) [99]
> А вот так SplashFrm := TSplashFrm.Create(Application);
> SplashFrm.Lab1.Caption := 'Выполняется удаление, ожидайте.
> ..'; SplashFrm.Show; while true do Application.ProcessMessages;
> тикают ?
Да, заводятся сразу, даже без задержки.
kyn66 (2009-11-07 23:52:00) [20]
> И никакой XP-манифест тоже не используется ?
В проге да, XPManifest1: TXPManifest;