|
|
Регистрация | << Правила форума >> | 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 - стучать в случае КРАЙНЕЙ необходимости, ну, или если вы со Ставрополя |
#7
|
|||
|
|||
Код:
procedure TForm1.ComPortRxChar(Sender: TObject; Count: Integer); var Str: String; begin ComPort.ReadStr(Str, Count); if Copy(str,1,10) = 'START-PAGE' then begin //s := Form1.Memo.Lines.Strings[i]; ProgressBar1.Min := StrToInt(Copy(str,10,6)); end; if Copy(str,1,10) = 'STOP--PAGE' then begin //s := Form1.Memo.Lines.Strings[i+1]; ProgressBar1.Max := StrToInt(Copy(str,10,6)); end; //SetMinMax(Str); //SetProgress(Str); if Copy(str,1,4) = 'PAGE' then begin //s := Form1.Memo.Lines.Strings[i+1]; ProgressBar1.Position := StrToInt(Copy(str,4,6)); end; Memo.Text := Memo.Text + Str; Application.ProcessMessages; end; Использовал ProcessMessages в процедуре, увы не помогло… процесс заполнения компонента ТМемо виснит и все, хотя без прогрессбара все отлично работает. Может кто-то оставит номерок ICQ, я скину весь исходник… перерыл все форумы, книги, пока все очень печально. |