Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.11.04;
Скачать: CL | DM;

Вниз

ProgressBar   Найти похожие ветки 

 
de.   (2007-10-03 10:40) [0]

Мне необходимо реализовать визуализацию процесса конекта к БД, создания форм... и т.д.
Нужно реализовать через ProgressBar, но мне неизвестно конечное число шагов в моей программе поэтому Максимальное значение позиции в ПБаре должно постоянно приращиватся, а в конце реализации процесса вызывается закрывающая процедура котороя бы отчищал ПБар...

Как это реализовать и как в токих ситуациях поступают.?


 
Sergey13 ©   (2007-10-03 10:43) [1]

Картинку рисуй анимированную - самое простое и правильное.


 
DVM ©   (2007-10-03 10:45) [2]


> но мне неизвестно конечное число шагов в моей программе
> поэтому Максимальное значение позиции в ПБаре должно постоянно
> приращиватся, а в конце реализации процесса вызывается закрывающая
> процедура котороя бы отчищал ПБар...

MS тоже вот решила не заморачиваться и сделал в XP прогресс с бегающим по кругу индикатором.


 
Рамиль ©   (2007-10-03 10:48) [3]

Сделай наращивание прогресса функцией типа
lim f(t) = MaxProgress
(t->inf)


 
homm ©   (2007-10-03 10:52) [4]

> [2] DVM ©   (03.10.07 10:45)
> MS тоже вот решила не заморачиваться и сделал в XP прогресс
> с бегающим по кругу индикатором.

В ХР? Что-то я не помню такого, в висте где-то видел.


 
DVM ©   (2007-10-03 10:53) [5]


> Сделай наращивание прогресса функцией типа

Не лучше решение. Представляю картину сидит себе пользователь сидит, смотрит на прогресс, который подошел к 99% и тут прогресс скачет обратно на 1 %. Такое поведение прогресса, мягко говоря, раздражает. Зачем нужен прогресс, который показывает лабуду какую то. Лучше просто отобразить песочные часы или прогресс бегающий по кругу.


 
Вася Правильный   (2007-10-03 10:53) [6]

а ты че, все формы одним махом создаешь?


 
DVM ©   (2007-10-03 10:55) [7]


> Что-то я не помню такого

Да есть там такой, тот же с зелеными делениями только он не фиксированное значение показывает, а несколько полосочек бегают. Его через API создать можно, там стили еще какие то дополнительные у стандартного прогресса появились.


 
Anatoly Podgoretsky ©   (2007-10-03 10:55) [8]

> de.  (03.10.2007 10:40:00)  [0]

И что непонятно?
Справку конечно ты тоже смотрел?


 
de.   (2007-10-03 10:58) [9]


> Вася Правильный   (03.10.07 10:53) [6]

Да вроде как нет... 8-)
Ладно всем спас. я понял...


 
DVM ©   (2007-10-03 11:02) [10]


> homm ©   (03.10.07 10:52) [4]

PBS_MARQUEE
Version 6.0 or later. The progress bar moves like a marquee.
Note  Comctl32.dll version 6 is not redistributable but it is included in Microsoft Windows XP or later. To use Comctl32.dll version 6, specify it in a manifest. For more information on manifests, see Using Windows XP Visual Styles.


 
DVM ©   (2007-10-03 11:08) [11]

Вот бегающий Progress:


unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, ComCtrls, XPMan;

type
 TForm1 = class(TForm)
   ProgressBar1: TProgressBar;
   XPManifest1: TXPManifest;
   procedure FormCreate(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
 Windows.SetWindowLong(ProgressBar1.Handle, GWL_STYLE,
                       Windows.GetWindowLong(Progressbar1.Handle, GWL_STYLE) or $08);
 SendMessage(ProgressBar1.handle, WM_USER + 10, WPARAM(True), 40);
end;

end.


 
Рамиль ©   (2007-10-03 11:12) [12]


> Не лучше решение. Представляю картину сидит себе пользователь
> сидит, смотрит на прогресс, который подошел к 99% и тут
> прогресс скачет обратно на 1 %.

Где он скачет при такой функции? Он просто до конца никогда не дойдет.


 
Anatoly Podgoretsky ©   (2007-10-03 11:24) [13]

> DVM  (03.10.2007 10:45:02)  [2]

Это не прогрес бар, поскольку не отображает прогресса, это просто анимация.


 
DVM ©   (2007-10-03 11:37) [14]


> Это не прогрес бар

Это вы MS скажите, не мне.


 
korneley ©   (2007-10-03 11:47) [15]

А как вообще можно говорить о линейном прогрессе при "неизвестном конечном числе шагов"? Только выдавать ожидаемое (на данный момент) время до окончания операции. Вот тут и возможны варианты, когда 1 сек. будет длится вечно. Просто анимация, имхо, здесь уместнее, так пользователь хоть видит, что процесс идет.


 
KSergey ©   (2007-10-03 13:40) [16]

> korneley ©   (03.10.07 11:47) [15]
> Просто анимация,
>  имхо, здесь уместнее, так пользователь хоть видит, что
> процесс идет.

Ага, идет, видали...
Просто анимашка крутится отдельным потоком при том, что основной может уже и вовсе завис, да и приложение давно не отвечает системе. Впрочем, уже и не собирается отвечать.

Давно уже у меня мечта - просто время сохрянять предыдущих запусков и усреднять. + эмпирический процент "на всякий случай". ну и, конечно, без методики "бесконечно расширяющий границы оставшихся секунд" - тоже, увы, не обойтись.


 
DVM ©   (2007-10-03 14:25) [17]


> Просто анимашка крутится отдельным потоком при том, что
> основной может уже и вовсе завис, да и приложение давно
> не отвечает системе. Впрочем, уже и не собирается отвечать.
>

Обновление окна прогресса всегда происходит в основном потоке, между прочим.


 
homm ©   (2007-10-03 14:37) [18]

> [17] DVM ©   (03.10.07 14:25)
> Обновление окна прогресса всегда происходит в основном потоке,
> между прочим.

Прошу прощения за любопытство, я правда не в курсе, есть такое понятие как «основной поток»? Насколько я себе представляю, люой поток можно убить, а процесс прекращает выполнение когда все потоки завершены.


 
DVM ©   (2007-10-03 14:43) [19]


> Прошу прощения за любопытство, я правда не в курсе, есть
> такое понятие как «основной поток»? Насколько я себе представляю,
>  люой поток можно убить, а процесс прекращает выполнение
> когда все потоки завершены.

Ты прав, конечно. Я под основным потоком понимаю тот поток, который обслуживает пользовательский интерфейс.


 
homm ©   (2007-10-03 14:44) [20]

> [19] DVM ©   (03.10.07 14:43)
> Я под основным потоком понимаю тот поток, который обслуживает
> пользовательский интерфейс.

Я так понимаю, любой поток может создать окон, и именно он и будет им управлять, и именно в кго контексте бцдет происходить отработка сообщений?


 
DVM ©   (2007-10-03 14:46) [21]


> Я так понимаю, любой поток может создать окон, и именно
> он и будет им управлять, и именно в кго контексте бцдет
> происходить отработка сообщений?

Если там есть цикл выборки сообщений.

Рихтер называет первичным еще тот поток. что был создан системой автоматически при старте процесса.


 
DVM ©   (2007-10-03 14:49) [22]


> homm ©   (03.10.07 14:44) [20]

Но ты же сам понимаешь, что обычно весь пользовательский интерфейс стараются разместить в одном (первичном) потоке, чтобы не искать на свою задницу приключений с синхронизацией.


 
homm ©   (2007-10-03 14:55) [23]

> [22] DVM ©   (03.10.07 14:49)

Я к тому, что в [16] видимо поток назван основным не по тому признаку, как ты привык, а так он прав, конечно :)


 
DVM ©   (2007-10-03 15:02) [24]


> homm ©   (03.10.07 14:55) [23]

Я то вообще говорил о прогрессбаре от MS. И логично было предположить, что он находится и обновляется (перерисовывается) в основном потоке.
Если основной поток что-то делает и повисает, то этот прогрессбар перестанет обновляться и пользователь по застывшему прогрессу поймет, что программа повисла. Я так понял.


 
KSergey ©   (2007-10-03 16:41) [25]

> DVM ©   (03.10.07 15:02) [24]
> Я то вообще говорил о прогрессбаре от MS.

Нет, прогресс бар тут ни при чем.
Ведь речь заводили именно про анимашки, а я (быть может по недалекости своей) под ними всегда автоматически понимаю какой-то avi, который те же продукты от MS крутят отдельным потоком. Вспомним про копирование файлов, например.

А вообще, быть может опять же в силу ограниченности, я что-то ен могу представить ситуацию, когда "мне неизвестно конечное число шагов в моей программе". Может кто-то подскажет мне как такое может быть?
Другое дело, что разбить на этапы с одинаковой длительность трудно (чтобы индикатор плавно полз) - это да, но чтобы совсем не было известно... это как?

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


 
DVM ©   (2007-10-03 16:49) [26]


> который те же продукты от MS крутят отдельным потоком

Анимашки другое дело. Если основной поток повиснет, то анимашка будет продолжать перерисовываться.


 
0259CB0F   (2007-10-07 22:24) [27]

Защитное поле СДФ отбросило наглую тварь, и ее рев заглох в непроницаемой стене.



Страницы: 1 вся ветка

Текущий архив: 2007.11.04;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.016 c
3-1182619806
vegarulez
2007-06-23 21:30
2007.11.04
Ошибка при записи в БД (ругань на ; в конце строки)


15-1191417801
Azize
2007-10-03 17:23
2007.11.04
Microsoft становится бесплатным


15-1191656118
dr_craigan
2007-10-06 11:35
2007.11.04
начинающему


2-1190792821
zzzz
2007-09-26 11:47
2007.11.04
Значение null


2-1192290530
неугомонный
2007-10-13 19:48
2007.11.04
scroll у гридров