Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > 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
Кинь таймер и кинь Гаудж.

Код
procedure TForm1.Timer1Timer(Sender: TObject);
begin
 Gauge1.Progress:=Gauge1.Progress+1;
end;

Автор: 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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)