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

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

Останавливается информация о ходе выполнения процесса [D7, XP]


Страницы:   1 2 3 4 5 6

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;


Страницы:   1 2 3 4 5 6

Наверх

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