Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.01.2008, 00:50   #1
eks-s
Пользователь
 
Регистрация: 15.01.2008
Сообщений: 64
Вопрос Консольное приложение

Такой вопрос! При запуске консольного приложения с командной строки, оно открывается в новом окне командной строки и там выполняет вывод данных. Как сделать чтобы приложение выводило сообщения в то же окно командной строки из которого запущено? или отсылала ему команды, например echo.
eks-s вне форума Ответить с цитированием
Старый 22.01.2008, 08:30   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Чет не пойму:
Я создал косольку:
Код:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

begin
writeln('wwww');readln;
  { TODO -oUser -cConsole Main : Insert code here }
end.
Ну набрал команду cmd и в терминале набрал Project, нажал Энтер.
Прога не открыла новое окно, а написала результат туда же.
Че я не так делаю?
Показывай свой код.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.01.2008, 09:40   #3
eks-s
Пользователь
 
Регистрация: 15.01.2008
Сообщений: 64
По умолчанию

Да код один в один такой же почти. Разобрался, проблема в bat-файле была. Писал в нём

echo starting program...
start proj.exe
pause


Изменил на

echo starting program...
proj.exe
pause

и всё стало как надо
только вот как сделать чтоб он перед выводом новой строки предыдущую очищал
eks-s вне форума Ответить с цитированием
Старый 22.01.2008, 10:26   #4
eks-s
Пользователь
 
Регистрация: 15.01.2008
Сообщений: 64
По умолчанию

Вот мой вариант программы...

program Timer;
{$APPTYPE CONSOLE}
uses
windows,SysUtils;
var
i,t : integer;
begin
{ TODO -oUser -cConsole Main : Insert code here }

if paramcount <> 1 then //если нет параметров - ошибка и выход
begin
writeln('Parameters Error');
writeln;
writeln('Template: timer.exe n');
writeln('n - seconds');
writeln;
writeln('Press Enter To Continue...');
readln;
Exit;
end;

t := StrToInt(paramStr(1)); //сколько секунд для отсчёта
for i := t downto 1 do
begin
writeln(i);
sleep(950);
winexec('cmd.exe /c "echo off && cls"',sw_show);
//видимо для cmd.exe необходимо 20мс чтобы
//выполнить действие и завершиться
sleep(50);
end;
end.

Всё так, тока хочется чтобы после запуска ничего не стиралось, а просто надпись "таймер запущен" и секунды тикают... То есть фактически затирать последнюю строчку и новую поверх неё выводить...

Последний раз редактировалось eks-s; 23.01.2008 в 00:53.
eks-s вне форума Ответить с цитированием
Старый 22.01.2008, 11:27   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Что эт ты такое страшное креативиш, что такие пути выбрал??
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.01.2008, 00:40   #6
eks-s
Пользователь
 
Регистрация: 15.01.2008
Сообщений: 64
По умолчанию

Да вобще то идея проста. в бат файле копируются папки с сети на обновление и архивируются, в одном месте я хочу вставить свой timer.exe 15, чтобы в окошке с показом всех операций копирования появилась надпись waiting 15 sec... и ниже шёл отсчёт секунд, по истечение которых продолжалось дальше выполнение операций.
Пока остановился на таком решении, но не то что я хочу...

t := StrToInt(paramStr(1)); //сколько секунд для отсчёта

writeln('waiting '+IntToStr(t)+' sec');
for i := t downto 1 do
begin
sleep(1000);
if i > 1 then
write('. ')
else writeln('.');
end;
writeln('timer off');
writeln;

Последний раз редактировалось eks-s; 23.01.2008 в 00:43.
eks-s вне форума Ответить с цитированием
Старый 23.01.2008, 08:30   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

А чего это не сделать в оконке?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.01.2008, 02:50   #8
eks-s
Пользователь
 
Регистрация: 15.01.2008
Сообщений: 64
По умолчанию

Весит больше, да и хочется консольно. А то при выводе всех команд в командной строке действие таймера выводить в окошке как то не то...
eks-s вне форума Ответить с цитированием
Старый 24.01.2008, 07:35   #9
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Вообще, на С это делается скажем так:
Код:
while ( i++ < t) {
	printf("%8d\r", i);
	Sleep(1000);
}
printf("\n");
ну а на паскале, если мне память не изменяет это будет
Код:
while i < t do begin write(i:8,"#0D"); Sleep(1000); i := i+1; end;
writeln();

Последний раз редактировалось B_N; 24.01.2008 в 07:45.
B_N вне форума Ответить с цитированием
Старый 24.01.2008, 09:53   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Ну я знаю в паскале была функа GoToXY а вот осталась ли она в делфи не помню. Кстати можно попробовать использовать соответствующее прерывание БИОСа для перемещения курсора.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Консольное приложение a_priori Общие вопросы Delphi 6 12.03.2008 08:33
Консольное приложение и DLL SunKnight Общие вопросы Delphi 1 16.12.2007 02:35
Консольное приложение MAcK Общие вопросы Delphi 2 03.12.2006 18:28