Вверх ↑
Этот топик читают: Гость
Гость
Ответов: 17029
Рейтинг: 0
#1: 2013-07-01 11:16:54 правка | ЛС | профиль | цитата


Редактировалось 12 раз(а), последний 2022-02-28 18:32:46
карма: 0

0
vip
#1.1контекстная реклама от партнеров
Ответов: 4611
Рейтинг: 745
#2: 2013-07-01 17:08:15 ЛС | профиль | цитата
Точка doWrite в главном компоненте консольного приложения.
карма: 26

0
Гость
Ответов: 17029
Рейтинг: 0
#3: 2013-07-02 15:38:02 правка | ЛС | профиль | цитата


Редактировалось 12 раз(а), последний 2022-02-28 18:32:47
карма: 0

0
Ответов: 4611
Рейтинг: 745
#4: 2013-07-02 15:57:27 ЛС | профиль | цитата
А это разве не в окно cmd вывод?
Но да, есть еще такая штука, как код завершения процесса. Можешь взять это:
code_31395.txt
карма: 26

1
файлы: 1code_31395.txt [1KB] [746]
Голосовали:tom-it
Ответов: 1073
Рейтинг: 76
#5: 2013-07-15 14:54:00 ЛС | профиль | цитата
Netspirit спасибо, то что надо.
И еще вопросик...
Можно ли перенаправить вывод в файл, типа:
Project.exe > out.txt
карма: 0

0
Ответов: 4611
Рейтинг: 745
#6: 2013-07-15 16:10:38 ЛС | профиль | цитата
tom-it, с чужой программы - вручную с точки WinExec.onConsoleResult. Или через вызов cmd.exe с параметрами.
[offtop]Не совсем понял вопрос, но если твоя консольная программа будет вызвана из cmd.exe, то "> out.txt" будет работать как положено[/offtop]
карма: 26

0
Ответов: 1073
Рейтинг: 76
#7: 2013-07-15 22:00:17 ЛС | профиль | цитата
Netspirit писал(а):
программа будет вызвана из cmd.exe, то "> out.txt" будет работать как положено

Почти одно и тоже, вызвана через .bat-ник.
Под fpc со штатной KOL и от Galcov-а работает, на fpc 2.6.0 и на делфях нет.


И еще чтобы не плодить тем, спрошу тут
Image с картинкой .jpg у когото под fpc работает?
карма: 0

0
Ответов: 1731
Рейтинг: 68
#8: 2013-07-16 01:03:39 ЛС | профиль | цитата
tom-it писал(а):
И еще чтобы не плодить тем, спрошу тут
Image с картинкой .jpg у когото под fpc работает?

Там вроде dll'ку надо таскать.
карма: 1

0
Ответов: 1073
Рейтинг: 76
#9: 2013-07-16 10:16:39 ЛС | профиль | цитата
Cosinus Проект то компилируется под FPC или нет?
Без картинки компилит на ура, с картинкой нет.
карма: 0

0
Ответов: 4611
Рейтинг: 745
#10: 2013-07-16 12:10:10 ЛС | профиль | цитата
tom-it писал(а):
Под fpc со штатной KOL и от Galcov-а работает, на fpc 2.6.0 и на делфях нет.
Схемку дай.

tom-it писал(а):
Без картинки компилит на ура, с картинкой нет.
У штатного fpc проблема с компиляцией ресурсов. Кажеться, должно работать, если в пути к HiAsm нет пробелов. В FPC 2.6.0 полностью работает без dll.

Добавлено:
Точнее, не так: в штатном FPC компонент Jpeg в принципе отключен как неподдерживаемый, кажеться, потому, что использует объектные модули, неподдерживаемые в FPC.
карма: 26

0
Ответов: 1073
Рейтинг: 76
#11: 2013-07-16 12:43:40 ЛС | профиль | цитата
Netspirit писал(а):
если в пути к HiAsm нет пробелов


Хм, пробелы есть...
Вечерком проверю без пробелов.

Netspirit писал(а):
Схемку дай.

Схема твоя(та где IС),и запуск с .bat-ника.
карма: 0

0
Ответов: 4611
Рейтинг: 745
#12: 2013-07-16 13:13:15 ЛС | профиль | цитата
В схеме для установки кода завершения вызывается ExitProcess - программа просто завершает работу ещё до того, как консоль успеет считать вывод. Вывод срабатывает по чистой случайности - что в FPC, что Delphi.
Вот переделанный вариант - установка кода завершения без прерывания работы программы:
code_31449.txt
карма: 26

1
файлы: 1code_31449.txt [1.3KB] [685]
Голосовали:tom-it
Ответов: 45
Рейтинг: 0
#13: 2013-07-16 21:53:38 ЛС | профиль | цитата
довольно таки интересно работать с консолькой для меня было одно из первых занятий, еще перед Hiasm


карма: 0
всё что мешает нам жить это человеческий фактор который не имеющий границы ..
0
Ответов: 4611
Рейтинг: 745
#14: 2018-12-04 18:21:12 ЛС | профиль | цитата
В проекте "Консольное приложение" имеется проблема: вызов метода doWrite консоли работает как-то странно, а именно, вывод как-бы "буферизуется". Проверить можно так:
- скомпилировать эту схему
Cons.sha


Add(Console,2953706,35,105)
{
Title="Console"
link(onStart,7839409:doEvent1,[])
}
Add(InfoTip,14734582,161,21)
{
Info=#17:Не даём программе|23:завершиться без команды|
Width=169
Height=186
}
Add(LineBreakEx,7207913,-21,105)
{
Caption="write"
Type=1
link(OnEvent,2953706:doWrite,[])
}
Add(LineBreakEx,5047505,231,231)
{
Caption="exit"
}
Add(LineBreakEx,6905843,581,98)
{
Caption="write"
}
Add(WaitObject,13558677,273,140)
{
link(ObjHandle,14477716:ObjHandle,[])
}
Add(Events,14477716,273,70)
{
Name=""
}
Add(Hub,7839409,175,105)
{
OutCount=3
link(onEvent1,14477716:doCreate,[(204,111)(204,76)])
link(onEvent3,13558677:doWait,[(205,125)(205,146)])
}
Add(LineBreakEx,15618268,217,77)
{
Caption="exit"
Type=1
link(OnEvent,14477716:doSet,[])
}
Add(CounterEx,14035755,476,98)
{
Max=9999999
link(onNext,10057423:doStrCatDlm,[])
}
Add(MMTimer,16197017,427,98)
{
link(onTimer,14035755:doNext,[])
}
Add(StrCatDelim,10057423,532,98)
{
Str1="This is write string #"
Str2="\r\n"
link(onStrCatDlm,6905843:doWork,[])
}
- скомпилировать и запустить эту схему рядом с Cons.exe
Run cons.sha


Add(MainForm,2953706,21,105)
{
Height=209
Caption="Console run"
Position=1
}
Add(Button,7067558,126,154)
{
Left=170
Top=5
Width=95
Caption="Start console"
link(onClick,3405001:doConsoleExec,[])
}
Add(WinExec,3405001,231,140)
{
FileName="ConsOut.exe"
Point(doConsoleExec)
Point(onConsoleResult)
Point(doConsoleInput)
Point(doConsoleTerminate)
Point(onConsoleError)
link(FileName,1356518:Text,[])
link(onConsoleResult,602325:doAdd,[])
}
Add(Edit,1356518,231,98)
{
Left=5
Top=5
Width=160
Text="Cons.exe"
}
Add(Label,8429589,21,154)
{
Left=5
Top=30
Width=45
Height=17
Caption="On read:"
}
Add(Memo,602325,329,154)
{
Left=5
Top=45
Width=375
Height=125
ScrollBars=2
}
Add(Button,1034865,168,168)
{
Left=270
Top=5
Width=95
Caption="Terminate"
link(onClick,3405001:doConsoleTerminate,[])
}

- в окне нажать "Start console"
- вывод консольной программы в текстовом поле будет появляться порциями примерно по 128 байт.
- если вместо "Cons.exe" указать "cmd.exe" - вывод появится сразу после запуска.

Предлагается заменить метод doWrite в hiConsole.pas:

procedure THIConsole._work_doWrite;
var
S: string;
BW: DWord;
begin
S := ToString(_Data);
if S <> '' then
WriteFile(FStdOut, S[1], Length(S), BW, nil);
end;
(заодно можно добавить и метод doWriteStdErr скрытой точкой - чтобы было)

Редактировалось 1 раз(а), последний 2018-12-04 18:21:35
карма: 26

0
Ответов: 4611
Рейтинг: 745
#15: 2018-12-28 14:39:03 ЛС | профиль | цитата
Переработан проект "Консольное приложение"
(компонент Console)

1) Добавлено свойство WaitClose и метод doClose: если True - после onStart программа не завершается, пока не будет вызван метод doClose.
2) Поправлена работа метода doWrite, чтобы избавиться от описанного в предыдущем комментарии эффекта. Добавлен метод doWriteErr, жалко что-ли?
3) Добавлено событие onDataIn: если подключено - автоматически стартует поток чтения стандартного канала ввода и событие выдаёт считанные данные (без разбиения по строках, как это делает точка Read. Её, кстати, надо было назвать ReadLn). Добавлено событие onDetach.
4) Удалено свойство Method и точки doParamByName, onParam, InHandle, InParams.
Параметры, которые там имелись в виду, передаются в консольную программу только сервером Apache (как я понимаю, это если делать CGI-модуль с помощью консольного приложения). Кто-то это делал? Method=Get - это чтение переменной среды процесса "QUERY_STRING", для этого у нас есть компонент EnvVars. Method=Post - это чтение стандартного потока ввода, та же точка Read или onDataIn.

Благодаря WaitClose и onDataIn схемы упростились:
New Console diff.jpg



Обновлено 24.01.2019: добавлено событие onDetach, приложена демонстрационная схема
Console mod 2019-01-24.zip

Редактировалось 5 раз(а), последний 2019-01-24 16:02:03
карма: 26

0
15
Сообщение
...
Прикрепленные файлы
(файлы не залиты)