Форум: "Прочее";
Текущий архив: 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.51 MB
Время: 0.044 c