Здравствуйте дорогие форумчане, помогите решить проблему с прогрессбаром.
Есть компонент
TMemo который постепенно заполняется следующим текстом:
Цитата:
START-PAGE000000000
STOP--PAGE000004000
PAGE000000000
...
текст
...
PAGE000001000
...
текст
...
...
...
PAGE000003000
...
текст
...
VSE
|
Объясню что этот текст обозначает:
START-PAGE000000000 - номер первой страницы, выводится сразу.
STOP--PAGE000004000 - номер последней страницы, выводится приблизительно через секунд 10 после вывода
START-PAGE.
PAGE000000000 - номер текущей страницы.
То есть в начале выводит общее количество страниц, в данном случае 4, дальше начинает идти текст нумерацией 1, 2, 3 и 4.
Теперь относительно расшифровки нумерации:
Цитата:
PAGE000001000
PAGE 000 001 000
{1=255} {1=1} {всегда 000}
Приведу пример:
PAGE000001000 = PAGE 000 001 000 (Равно 1)
PAGE000256000 = PAGE 000 255 000 (Равно 255)
PAGE001001000 = PAGE 001 001 000 (Равно 255+1=256)
Просто здесь 8 битный формат, и больше 255 в 3 розрядах быть не может...
То есть максимум это P255255000 это равно 65280.
Лучше всего привязатся к формуле:
PAGE 000 001 000
(a) (b) (c)
Реальное число = (a*255)+b
|
Вот процедуры, в которых я попытался реализовать то, что мне необходимо:
Код:
procedure SetMinMax(s:string);
var tmp,substr:string;
begin
substr:='START-PAGE';
if MatchesMask(s,substr+'*') then
begin
tmp:=Copy(s,Pos(substr,s)+length(substr),length(s));
if IsNumber(tmp) then
begin
Form1.ProgressBar1.Min:=StrToInt(Copy(tmp,0,3))*255+StrToInt(Copy(tmp,4,3));
end;
end;
substr:='STOP--PAGE';
if MatchesMask(s,substr+'*') then
begin
tmp:=Copy(s,Pos(substr,s)+length(substr),length(s));
if IsNumber(tmp) then
begin
Form1.ProgressBar1.Max:=StrToInt(Copy(tmp,0,3))*255+StrToInt(Copy(tmp,4,3))-1;
end;
end;
end;
procedure SetProgress(s:string);
var tmp,substr:string;
begin
substr:='PAGE';
if MatchesMask(s,substr+'*') then
begin
tmp:=Copy(s,Pos(substr,s)+length(substr),length(s));
if IsNumber(tmp) then
begin
Form1.ProgressBar1.Position:=StrToInt(Copy(tmp,0,3))*255+StrToInt(Copy(tmp,4,3));
end;
end;
end;