Refresh на формата

3 отговора 0 прегледа
#1

Refresh на формата

Делфи 7. ВИН XP.
Програмчето е изключително просто:
има форма на която има progressbar. Цикъл се върти и се сменя позицията с индекса на прогрессбара. В цикъла се добавят записи в някакъв празен файл.
Progressbar-а си работи перфектно, ако има лако записи ... При по продължително време - запира. Слагам Refresh и на формата и на прогрессбара (за всеки случай) - все таа. Всеки път на различно място.
Хващам формата за заглавието и я мърдам настрани. Под нея излиза същата дорма - ама си работи както трябва. (Т.е. на екрана има 2 форми. Едната замръзнала, другата работеща /върти се/). Когато свърши работа и се затвори едната - затваря се и другата с нея...
Това го забелязвам в няколко вече програмчета при които има дискови операции - отваряне,запис,четене,затваряне на файл...
Чудя се дали не е от версията на делфи? Или има някакъв друг лек....

Отговор
в отговор на ddd #2

Re: Refresh на формата

Предполагам, че не могат да се обработят съобщенията за прерисуване, защото главната ти нишка е заета с цикъла. Най-добре е това нещо да го правиш в тред или в краен случай можеш да закърпиш положението като след Refresh викнеш и едно Application.ProcessMessages.

Linux isn't free, it's worthless.


Отговор
в отговор на andrew_nikoloff #3

Re: Refresh на формата

Благодаря за съвета. Работи перфектно (каквото и да означава тази дума)...
Само още един въпрос (стига да не съм нахален). Понеже съм начинаещ в програмирането и някой жаргони не са ми познати - какво означава "правене в тред"? Това да не би да е нещо дето е "вързано" с часовника?

Отговор
в отговор на ddd #4

Re: Refresh на формата

Не. Тред е английският термин. Може да си го чувал в превод на български като "нишка". В общи линии (опростено казано) тредовете ти дават възможност да изпълняваш няколко неща наведнъж (едновеременно изпълнение на две или повече нишки). В твоя случай единия тред ще ти се занимава с файловете, а другия тред (който е основен за програмата и е създаден от Делфи) ще се грижи за обновяването на интерфейса на програмата.
За повече информация виж класа TThread и примерите за използването му в папката Demos\Threads.

Linux isn't free, it's worthless.


Отговор