Текущий архив: 2006.09.10;
Скачать: CL | DM;
ВнизProgressBar1 Найти похожие ветки
← →
Chort © (2006-08-22 22:07) [0]Вопрос таков.
Нужно чтоб по таймеру, кот. выставлен на 5 секунд происходило заполнение прогресс бара. или может без таймера. Короче говоря как сделать чтоб за пять секунд заполнился компонент ProgressBar1 таблетками?Спасибо.
← →
Ketmar © (2006-08-22 22:09) [1]а-а-а! мой бедный моск! господа, плиз, срочно поясните и мне, как заполнить progress bar таблетками!
← →
Chort © (2006-08-22 22:21) [2]Да при чем тут...
Про Position я понимаю, но как сделать чтоб это плавно заполнялось, и в течении 5 секунд.
← →
Ketmar © (2006-08-22 22:23) [3]нет, не так. скажите мне, как заполнить progress bar колёсами! а то от простых таблеток уже не так прёт...
← →
Chort © (2006-08-22 22:27) [4]Да ну тебя . Или не понимаешь что за таблетки?:Синие прямоугольники :o<
← →
GeLLeR © (2006-08-23 00:11) [5]Послушай пузырьки! Fanta подскажет :)))))) (c) Bamboocha
← →
ArtemESC © (2006-08-23 00:42) [6]Timer.interval := 1000;
В OnTimer"e
PB.Position := PB.Position + 1;
← →
Ketmar © (2006-08-23 00:45) [7]> [6] ArtemESC © (23.08.06 00:42)
авотфиг. доставка события WM_TIMER в точное время (более того, даже просто доставка) виндой не гарантируется.
← →
Германн © (2006-08-23 01:20) [8]
> Chort © (22.08.06 22:07)
>
> Вопрос таков.
> Нужно чтоб по таймеру, кот. выставлен на 5 секунд происходило
> заполнение прогресс бара. или может без таймера. Короче
> говоря как сделать чтоб за пять секунд заполнился компонент
> ProgressBar1 таблетками?Спасибо.
>
Не надо было его ставить на 5 секунд. Поставь его на 5000/((Max-Min)/Step).
Это приближенный вариант реализации сабжа. Лучший ответ можно дать после более осмысленной постановки задачи.
P.S. K Ketmar. Кирпичи не кидать! Я Знаю, что Земля не круглая! Она имеет форму "геоида". :-)
← →
Vovan#1 (2006-08-23 01:39) [9]Ketmar"у посвящается:
unit unitTest;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls;
type
TformTest = class(TForm)
ProgressBar: TProgressBar;
Button: TButton;
procedure ButtonClick(Sender: TObject);
private
public
{ Public declarations }
end;
type
TTimerThread = class (TThread)
FPB: TProgressBar;
FTickCount: Cardinal;
FTickCount2: Cardinal;
FUpdateTime: Cardinal;
FFullTime: Cardinal;
FMin: Integer;
FMax: Integer;
FDelta: Cardinal;
FFinished: Boolean;
procedure VisualWork;
protected
procedure Execute; override;
public
constructor Create(UpdateTime, FullTime: Cardinal; PB: TProgressBar);
end;
var
formTest: TformTest;
implementation
{$R *.dfm}
procedure TTimerThread.VisualWork;
begin
If FFinished then
begin
FPB.Position := FMax;
end
else
begin
FPB.StepBy(FDelta);
end;
end;
constructor TTimerThread.Create(UpdateTime, FullTime: Cardinal; PB: TProgressBar);
begin
FPB := PB;
FTickCount := GetTickCount;
FTickCount2 := FTickCount;
FUpdateTime := UpdateTime;
FFullTime := FullTime;
FMin := FPB.Min;
FMax := FPB.Max;
FDelta := Round(Abs(FMax - FMin) / FFullTime * FUpdateTime);
FFinished := False;
FreeOnTerminate := True;
inherited Create(False);
end;
procedure TTimerThread.Execute;
var t: Cardinal;
begin
while ((GetTickCount-FTickCount) < FFullTime) do
begin
t := GetTickCount;
If t-FTickCount2 > FUpdateTime then
begin
FTickCount2 := t;
Synchronize(VisualWork);
end;
end;
FFinished := True;
Synchronize(VisualWork);
end;
procedure TformTest.ButtonClick(Sender: TObject);
var T: TTimerThread;
begin
Button.Enabled := False;
TTimerThread.Create(100, 5000, ProgressBar);
end;
end.
← →
Ketmar © (2006-08-23 01:51) [10]> [9] Vovan#1 (23.08.06 01:39)
зачем такой огород -- совершенно неясно. multimedia timers ещё никто не отменял.
← →
Пусик © (2006-08-23 02:56) [11]
> Ketmar © (23.08.06 01:51) [10]
> > [9] Vovan#1 (23.08.06 01:39)зачем такой огород -- совершенно
> неясно. multimedia timers ещё никто не отменял.
И зачем ресурсоемкие мультимедийные таймеры использовать для интервалов в 50 миллисекунд?
← →
хм... (2006-08-23 07:19) [12]о каких ресурсах может идти речь???
вы что тут все на 386 сидите???
если так то меняйте железо, а то прямо мазохисты какие-то...
← →
Chort © (2006-08-23 09:50) [13]Уточняю(или дополняю) вопрос.
По закрытию главной формы у меня идет сохранение конфигурации в .ini файл . Это занимает около 5 секунд. Вот чтоб не было так скучно я и решил сделать заставку на закрытие. В главной форме написалprocedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
CloseForm.showModal;
end;
На формочку CloseForm кинул таймер , поставил 5000procedure TCloseform.Timer1Timer(Sender: TObject);
begin
close
end;
И бросил на эту форму ProgressBar.
Теперь по закрытию главной формы показывается CloseForm на пять секунд и закрывается(вместе с главной). Так вот как добавить к этому и ProgressBar.
← →
PSPF2003 © (2006-08-23 09:57) [14]
> По закрытию главной формы у меня идет сохранение конфигурации
> в .ini файл
Ни фига себе конфиг!
← →
Наиль © (2006-08-23 10:08) [15]
> procedure TCloseform.Timer1Timer(Sender: TObject);
> begin
> close
> end;
procedure TCloseform.Timer1Timer(Sender: TObject);
begin
// Заполнение до 100% за 5 сек :o)
progressbar.position:=100;
close
end;
А если серьёзно, то ставь интервал на 50мс, прибавляй по 1%, при достижении 100% закрывай форму. Всё.
← →
Chort © (2006-08-23 10:54) [16]to PSPF2003
Да, занимает сохранение много, так как конфигурации не мало + сохранение базы данных.
← →
Ketmar © (2006-08-23 11:20) [17]> [11] Пусик © (23.08.06 02:56)
уважаемая, mm-timer -- это не что иное, как отдельный поток с кодом, похожим на [9]. не вижу разницы, кто будет создавать поток -- непосредственно программа, или виндовая DLL. только в последнем случае писать меньше.
← →
alex_*** © (2006-08-23 14:26) [18]отражай в прогрессе реальный ход сохранения данных - прикинь сколько операций сохранения и пиши "сохраняется ххх", после чего наращивай progress
← →
Пусик © (2006-08-23 14:48) [19]
> Ketmar © (23.08.06 11:20) [17]
Да вот хотя бы обсуждение почитай, чтобы из пустого в порожнее не переливать.
http://www.megalib.com/books/461/data/discission434.htm
PS.
Анекдотов мне не надо. Здесь не курилка.
← →
Anatoly Podgoretsky © (2006-08-23 14:50) [20]Ketmar © (23.08.06 11:20) [17]
Это вообще то аппаратный таймер.
← →
Ketmar © (2006-08-23 16:14) [21]> [19] Пусик © (23.08.06 14:48)
почитал. "The multimedia timer runs in its own thread". отсюда и мои выводы. из win32.hlp. а то, что они меряют интервалы, предположим (предположим!) через QueryPerformanceCounter(), а не через GetTickCount() -- сути не меняет.
зыж тон не сбавите, уважаемая? я понимаю, вам всё вокруг не нравится, но выдержку всё же полезно тренировать.
> [20] Anatoly Podgoretsky © (23.08.06 14:50)
то есть, он вызывается прерыванием от часиков или подобным? возможно, но я такой информации не встречал. впрочем, спорить не стану -- именно поэтому. %-)
← →
Anatoly Podgoretsky © (2006-08-23 16:21) [22]Да есть такая штука в компьютере, как CMOS память, частью ее является MM Timer, есть поддержка в БИОС и в ОС, минимальный интервал чуть менее 1 мс. На уровне АПИ поддержаны callback фунции, поэтому точность очень высокая, в отлии от обычного трехканального таймера, цикл которого 55 ms или 10 мс в НТ, низкоприоритетный таймер.
← →
Ketmar © (2006-08-23 16:36) [23]> [22] Anatoly Podgoretsky © (23.08.06 16:21)
э-э-э... а разве CMOS умеет стрелять прерываниями в таком стиле? можно ссылочку, или хотя бы ключевые слова для поиска, чтобы не продираться через кучу страниц, содержащих буквы CMOS?
просто интересно, я о таких фактах не знаю. досадный пробел.
← →
Anatoly Podgoretsky © (2006-08-23 16:47) [24]Смотри описание БИОС и устройство IBM PC компьютеров.
Пробел конечно досадный, связан с терминологией MultiMedia - ну хотелось им использовать громкое слово, и вот так всех запутали, когда это обычный таймер от часов. 2^15 от частоты 32768 кгц (кварц) получается одна секунда, а один из промежуточных выходов (2^5) идет на прерывание (номер не помню).
← →
Chort © (2006-08-23 16:50) [25]Я извиняюсь, что прерываю вашу дискуссию, но можно пример?
← →
Ketmar © (2006-08-23 16:57) [26]> [24] Anatoly Podgoretsky © (23.08.06 16:47)
понял. tnx.
← →
Anatoly Podgoretsky © (2006-08-23 16:57) [27]Тебе достаточно написали, чтобы все написать, задумайся хотя бы насчет 50 мс
← →
Ketmar © (2006-08-23 16:57) [28]вдогон: извиняюсь перед Пусик ©. был неправ.
← →
Германн © (2006-08-23 16:58) [29]
> Anatoly Podgoretsky © (23.08.06 16:47) [24]
>
> Смотри описание БИОС и устройство IBM PC компьютеров.
> Пробел конечно досадный, связан с терминологией MultiMedia
> - ну хотелось им использовать громкое слово, и вот так всех
> запутали, когда это обычный таймер от часов. 2^15 от частоты
> 32768 кгц (кварц) получается одна секунда, а один из промежуточных
> выходов (2^5) идет на прерывание (номер не помню).
>
Чего-то я такого по IBM PC не помню. Помню только, что можно было использовать RTC как будильник. Он тогда вызывал прерывание 4Ah.
← →
Пусик © (2006-08-23 16:59) [30]
> Ketmar © (23.08.06 16:14) [21]
> > [19] Пусик © (23.08.06 14:48)почитал. "The multimedia
> timer runs in its own thread". отсюда и мои выводы. из win32.
> hlp. а то, что они меряют интервалы, предположим (предположим!
> ) через QueryPerformanceCounter(), а не через GetTickCount()
> -- сути не меняет.зыж тон не сбавите, уважаемая? я понимаю,
> вам всё вокруг не нравится, но выдержку всё же полезно
> тренировать.
Прошу прощения, но побеспокойся о своей выдержке прежде.
PS.
Анекдотов не предлагать. Здесь не курилка.
PPS.
КРоме всего прочего, MMT как раз из-за ресурсоемкости в системе тоже может быть весьма ограниченное количество.
← →
Anatoly Podgoretsky © (2006-08-23 17:00) [31]Ну я написал, что уже не помню - давно это было, RTC это как раз он и есть.
← →
Ketmar © (2006-08-23 17:00) [32]> [29] Германн © (23.08.06 16:58)
так я тоже не помню. но пока извиняюсь. %-) если найду опровержение -- буду сражаться более предметно. %-)
Страницы: 1 вся ветка
Текущий архив: 2006.09.10;
Скачать: CL | DM;
Память: 0.53 MB
Время: 0.05 c