| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Звук, графика и видео > Gauge |
| Автор: Exploited 24.6.2002, 15:12 |
| Еще раз здравствуйте. Никак не могу понять: как пользоваться Gauge? Да и в файле справки о нём ничего толком не сказано. Может, кто-нибудь сможет объяснить на примере. |
| Автор: Song 24.6.2002, 17:09 |
| TGauge - на вкладке Samples. По-моему там достаточно тех свойств, что есть в ИО, чтобы разобраться. |
| Автор: Exploited 24.6.2002, 18:09 |
| Свойств то достаточно и запустить его я понимаю как. Но как "умно" применить. Вот, например, у меня был немного раньше вопрос по CreateProcess... Я запускаю консольную программу, она выполняет действие. Как мне в процессе этого действия показывать состояние в TGauge? |
| Автор: RA 24.6.2002, 19:13 | ||
Кинь таймер и кинь Гаудж.
|
| Автор: Exploited 24.6.2002, 19:18 |
| А далее.. Запускать таймер, а когда нужно - останавливать? |
| Автор: Song 24.6.2002, 19:19 |
| Вообще чтобы точно было - не получится, потому что Вы не рассчитаете время, когда закончится выполнение программы, хотя если она выполняется всегда одинаковое количетсво времени - можно по таймеру. Т.е. единственный вариант - во время выполнения программы прогресс будет расти всегда на одинаковое количество единиц, а когда закончится выплненение прогресс можно приравнять на максимум, как кстати иногда делается в виндах, например при обнаружении Plug'n'play устройств. Т.е. пропорциоанального роста всё равно не получится. Теперь как сделать. Программа можно запустить бы через CreateProcess() и подождать её завершение с помощью WaitForSingleObject() с параметром INFINITE, но в этом случае текущая нить будет крутиться на последнем и больше ничего исполняться не будет т.е. TGauge не будет накручиваться. Хотя конечно его накрутку можно запустить отдельной нитью, а при CreateProcess() нить активировать... ну вообщем получится, но нужно приложить немало сил. Гораздо приятней будет запустить прогу через ShellExecuteEx() и организовать цикл, в котором будет накручивать TGauge, получать текущий код возврата из приложения, проверять его на STILL_ACTIVE, т.е. как только код будет с таким результатом, цикл можно завершать. Так мы получим конструкцию, когда приложение запускается и прогресс TGauge будет накручитваться с выполнением запущенной программы, но не пропорционально ей! Теперь о решении, как добиться некой пропорциональности. А заключается оно в том, что шаг на который будет увеличиваться TGauge будет уменьшаться соразмерно с увеличением пройденной шкалы. Т.е. чем дальше пройдёт TGauge, тем медленней он будет ползти. Чтобы сделать шкалу соразмерно запуску, это как я уже кроме того как знания времени выполнения или других временных фаз ИМХО не добиться. Вот некоторые мысли. Но это всё теория, практика Вам, уважаемый |
| Автор: Alex 24.6.2002, 22:00 |
| Если я правильно понял вопрос у вас есть консольная программа, в которой выполняется определенный процесс, который в ней отображается в виде "...%", а вы хотите сделать чтобы в вашей программе отображался ход выполнения этого процесса. Если это так то это можно реализовать следующим образом. Есть функция, которая позволяет считать все данные с консольного окна и вывести их в виде текста. Когда вы это сделали, ищите строку, в которой отображаются ваши проценты и присваиваете позицию Gauge, которая соответствует этим процентам. Все это можно засунуть в таймер. |
| Автор: Sniper 25.6.2002, 00:41 |
| А если форма криейтится через Application.CreateForm(TForm1, Form1); как тогда использовать Gauge? Всмысле у меня есть форма, на ней кнопка и Gauge. Я тыкаю по кнопке и с помощью Application.CreateForm у мя криейтится другая форма. как показать сие действо? |
| Автор: Exploited 25.6.2002, 10:53 | ||
2alex-co
Что за функция? |
| Автор: Song 25.6.2002, 15:50 |
| CreatePipe() |
| Автор: Alex 26.6.2002, 07:50 |
| ReadConsoleOutputCharacter Если понадобится не читать вывод консоли а писать в нее - см. WriteConsoleInput |