Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2007.11.04;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.52 MB
Время: 0.046 c
3-1182841606
ambhtr
2007-06-26 11:06
2007.11.04
SELECT .... IN


1-1187636613
EHOT
2007-08-20 23:03
2007.11.04
Master Boot Record


15-1190945751
Slider007
2007-09-28 06:15
2007.11.04
С днем рождения ! 28 сентября 2007 пятница


15-1190814358
Галинка
2007-09-26 17:45
2007.11.04
что почитать про VMWare


2-1192379027
Инжинер
2007-10-14 20:23
2007.11.04
Работа с USB





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