|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Progressbar в listview
Прошу помощи!
программа принимает файлы от нескольких клиентов. Хочу сделать в listview для каждого принимаемого файла progressbar. Подскажите как, ведь из потока нельзя вызывать функцию с параметрами а как мне тогда к Progressbar обращаться???? |
#2
|
||||
|
||||
Цитата:
jmp $ ; Happy End! The Cake Is A Lie. |
#3
|
|||
|
|||
я его так и Synchronize( Form1.Createprogress); Createprogress-процедура создания.
но я не могу передать этой процедуре параметр max |
#4
|
||||
|
||||
Можно сделать метод потока, который будет вызываться без параметров через Synchronize, а затем уже внутри будет вызываться нужная функция.
jmp $ ; Happy End! The Cake Is A Lie. |
#5
|
|||
|
|||
Отлично!!!Получилось!!! СПАСИБО!!!
Извиняюсь но еще вопрос Код создания progressbara Код:
i:= Listview1.Items.Count; Listview1.Items.Add.Caption:=a; r:=Listview1.Items[i].DisplayRect(drBounds); pb:=TProgressBar.Create(Self); pb.Parent:=Listview1; pb.Position:=S; pb.Smooth:=true; Listview1.Items[i].Data:=pb; lmikle: пользуемся тегами!!! ну создаю я его а как мне теперь из потока передавать позицию Последний раз редактировалось lmikle, 13.05.2012 в 00:41. |
#6
|
||||
|
||||
Так же. В Synchronize вызывать метод потока, который будет ставить его позицию в нужную.
jmp $ ; Happy End! The Cake Is A Lie. |
#7
|
|||
|
|||
я это понимаю,но как мне в потоке узнать к какому progressbar обращаться ведь у меня для каждого потока создается свой progressbar и даже если поток будет знать то как мне через Listview1.Items[i].Data обратиться к progressbar.position
|
#8
|
||||
|
||||
Так. По каким событиям должно меняться положение ProgressBar?
jmp $ ; Happy End! The Cake Is A Lie. |
#9
|
|||
|
|||
процедура создания вызывается до этого кода когда поток определяет размер файла
Цитата:
но этот прогрессбар у меня создан на форме и он один для всех потоков. код выше создает прогресбар для каждого потока и я не знаю как теперь к нему обращаться. думаю что в процедуре создания прогрессбара нужно сделать передачу в поток вызвавший эту процедуру переменной I(Listview1.Items[i] ) но не знаю как сделать |
#10
|
|||
|
|||
С обращением к прогрессбару разобрался вроде
Цитата:
но с передачей параметра I в поток не разобрался |
#11
|
||||
|
||||
Процедура создания ProgressBar вызывается в методе потока. Следовательно, можно сделать эту процедуру функцией, возвращаемым значением которой будет например его номер. Затем в потоке можно сохранить это значение (к примеру в переменной, являющимся полем собственного наследника класса TThread) и использовать далее.
Желательно обращение к ProgressBar сделать тоже через Synchronize, как и создание. jmp $ ; Happy End! The Cake Is A Lie. |
#12
|
|||
|
|||
СПАСИБО!!!! сам чето не додумался! с потоками первый раз дело имею.
тока не пойму почему когда Listview прокручиваю progressbarы на месте стоят |
#13
|
|||
|
|||
еще вопросец как из потока вызвать функцию формы и не дожидаться ее завершения
А то как то нехорошо получается -поток файл принимает и должен ждать завершения заполнения прогрессбара Последний раз редактировалось EL190, 13.05.2012 в 21:39. |
#14
|
||||
|
||||
Только что нашел метод Queue, который является асинхронным Synchronize.
Правда думаю, задержки по перерисовке ProgressBar - ничто по сравнению с задержками сети. Не факт, что вообще стоит это делать. Ведь всякие асинхронности тоже грузят процессор. Пока добавится в очередь, пока вытащится,... jmp $ ; Happy End! The Cake Is A Lie. Последний раз редактировалось Bargest, 13.05.2012 в 23:40. |
#15
|
|||
|
|||
если я правильно понял то при создании потока все функции потока записываются в него (типа нового utita) или нет??????
Последний раз редактировалось EL190, 14.05.2012 в 19:28. |