|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
Вопрос по ProgressBar
Здравствуйте дорогие форумчане, помогите решить проблему с прогрессбаром.
Есть компонент TMemo который постепенно заполняется следующим текстом: Цитата:
Объясню что этот текст обозначает: START-PAGE000000000 - номер первой страницы, выводится сразу. STOP--PAGE000004000 - номер последней страницы, выводится приблизительно через секунд 10 после вывода START-PAGE. PAGE000000000 - номер текущей страницы. То есть в начале выводит общее количество страниц, в данном случае 4, дальше начинает идти текст нумерацией 1, 2, 3 и 4. Теперь относительно расшифровки нумерации: Цитата:
Вот процедуры, в которых я попытался реализовать то, что мне необходимо: Код:
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; |
#2
|
||||
|
||||
Да зачем-же так сложно?
У вас фиксированные значения в тексте: START-PAGE000000000 STOP--PAGE000004000 Значит и исходим из этого: Код:
if Copy(Memo1.Lines.Strings[i],1,10) = 'START-PAGE' then begin s := Memo1.Lines.Strings[i]; Form1.ProgressBar1.Min := StrToInt(Copy(s,10,6)); s := Memo1.Lines.Strings[i+1]; Form1.ProgressBar1.Max := StrToInt(Copy(s,10,6)); end; Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#3
|
|||
|
|||
Может и сложно, но как по мне – надежно. Больше кода, меньше – все равно не работает
|
#4
|
||||
|
||||
Что- то я ProcessMessages в коде не увидел
|
#5
|
|||
|
|||
А как в моем случае можно использовать ProcessMessages?
|
#6
|
|||
|
|||
что бы намертво все не висло когда прогресс двигать будете, в цикле нужно вставить:
Код:
Application.ProcessMessages; взялся из неоткуда, ничего не прошу, помогаю просто так ICQ: 593977748 - стучать в случае КРАЙНЕЙ необходимости, ну, или если вы со Ставрополя |