Консольные приложения в delphi


Консольные приложения в Delphi.

Консольноеприложение(консоль Мб передана от вызывающей программы к вызываемой)

С помощью системы Delphi 7 можно создавать приложения Windows практически

неограниченной сложности, использующие графический интерфейс. Однако для

тех, кто только начинает знакомство с основными операторами Паскаля, имеется

возможность создания простых программ в стиле MS-DOS <в качестве учебных).

Это так называемые консольные приложения. Внешне они выглядят как программы

с текстовым интерфейсом, но способны обращаться к большинству функций

Чтобы создать консольное приложение, надо дать команду File > New >• Other (Файл >

Создать > Другое) и в диалоговом окне New Items (Создание программы) выбрать зна-

чок Console Application (Консольное приложение) (рис. 1.1).

f’ New Items

Система 1)е/рЙ1?автоматически сгенерирует в текстовом редакторе исходный код

заготовку будущего приложения.

Основы языка Delphi (Objecl Pascal) 35

uaeasysutils;

Begin

Код начинается с заголовка программы, состоящего из ключевого слова program и

автоматически сгенерированного названия Projectl.

Далее в виде комментария следует директива компилятора. Она отличается от

обычного комментария тем, что сразу за символом < следует символ $, а следом —

слово, задающее определенную настройку компилятора. Хотя настройки компи-

лятора можно задавать и непосредственно в среде Delphi 7, нужные настройки не

всегда могут быть включены разработчиком вручную, поэтому лучше явно указы-

вать их в тексте там, где они обязательно требуются.

щью графического интерфейса она не может. Для этого нужны более простые сред-

ства обмена информацией с человеком.

В Паскале имеются две стандартные процедуры ReadLn (для ввода данных) и WriteLn

(для записи данных), которые могут использоваться в консольных приложениях.

Первая процедура выполняет ввод значения с клавиатуры и его передачу в пере-

менную, которая указана в качестве параметра (можно указать и список перемен-

ных — тогда при вводе соответствующие им значения надо разделять пробелами).

Вторая процедура выводит одно или несколько значений переменных или выра-

жений в текущую строку экрана, разделяя их пробелами.

Процедура ReadLn требует, чтобы человек после окончания ввода нажал клавишу

ENTER, а процедура WriteLn после окончания вывода значений осуществляет пере-

вод курсора на следующую строку. Другая процедура вывода, Write, не выполняет

такого перевода и продолжает вывод данных в текущую строку.

ВНИМАНИЕПереход на следующую строку в процедуре WriteLn происходит

не до, а после вывода значений параметров.

36 Урок 1. Язык Delphi (Object Pascal) и его использование

У процедуры ReadLn может не быть ни одного параметра. Тогда при ее выполнении

программа просто ожидает, когда пользователь нажмет клавишу ENTER. Если не

указан ни один параметр процедуры WriteLn, то на экране произойдет пропуск одной

Для первого, пробного запуска в главный логический блок программы можно

поместить один оператор ReadLn — тогда программа просто высветит черное кон-

сольное окно и закроется, когда будет нажата клавиша ENTER.

Begin

Обратите внимание: точку с запятой перед ключевым словом endможно не ставить.__

Др вариант

Консольным называется приложение, имитирующее работу в текстовом режиме. Пользователь работает с программой практически так же, как в среде DOS. При запуске консольного приложения Windows выделяет окно как для DOS-программы, в заголовке окна отображается название исполняемого файла. Ввод/вывод данных осуществляется с помощью процедур read, readln, write и writeln. К консольному приложению автоматически подключаются файлы input и output. Несмотря на то, что пользователь работает с консольным приложением так же, как с DOS-программой, оно является приложением Windows и не работает под DOS.

Достоинство консольных приложений – относительная простота использования и лёгкость переноса программ, написанных на языке Pascal, в систему программирования Delphi. Кроме того, исполняемый ехе-файл консольной программы намного меньше по размеру (десятки килобайт) по сравнению с исполняемым файлом Delphi-варианта такой же программы (сотни килобайт).

Проще всего создать консольное приложение через репозиторий. В репозитории (команда File|New|Other) на странице New имеется объект Console Аpplication, представляющий собой Console Wizard – Мастер консольного приложения. Если выбрать этот объект, то будет создан новый проект, состоящий из одного файла с расширением dpr. Этот файл и является консольной программой. Созданный Мастером код похож на заготовку обычной программы на языке Pascal, написанной под DOS. Единственным отличием является директива $APPTYPE, которая значением CONSOLE сообщает компилятору, что Delphi-программа работает в консольном режиме.


Консольное приложение можно создать также на основе проекта обычного приложения следующим образом. Первоначально по команде File|New|Aplication создаётся новое приложение. Консольное приложение не включает формы, поэтому из проекта нужно удалить форму Form1. С этой целью по команде Project|Remove from Project (Проект|Удалить из проекта) вызывается диалоговое окно Remove from Project удаления форм из проекта, в котором для данного проекта содержится один модуль unit1 формы. Нужно выбрать этот модуль и удалить его.

Затем вызывается окно редактора кода, в нем открывается файл проекта (dpr), в который вносятся соответствующие изменения.

Далее к заготовке консольного приложения добавляется необходимый код. Как и любая программа на языке Pascal, консольное приложение может включать отдельные модули.

Завершив работу с консольным приложением, нужно нажать клавишу Enter. После этого окно, в котором функционировало консольное приложение, автоматически будет закрыто.

Консольное приложение Delphi представляет собой не просто программу, написанную на языке Object Pascal и выполняемую в среде Windows. Система Delphi поддерживает создание 32-разрядных консольных приложений, имеющих доступ к ресурсам операционной системы и использующих различные функции API Windows. При этом в разделе uses нужно подключать модули, средства которых применяются в программе. Для организации ввода-вывода информации используются стандартные процедуры:

Первым параметром в любой из перечисленных процедур может стоять файловая переменная. В этом случае выполняется обращение к дисковому файлу или логическому устройству, связанному с файловой переменной. Если файловая переменная не указана, то подразумевается использование текстовых файлов input или output. Input используется при чтении данных с клавиатуры, а output – при выводе данных на экран:

Writeln (name, ‘ ‘:3, 2*x+3:6:0);

Специфика обработки текстовых файлов заключается в том, что процедуры ввода-вывода позволяют работать со значениями не только символьного типа: фактическими параметрами могут быть символы, строки и числа. Последовательность символов автоматически преобразуется к значению переменной того типа, который задан в списке ввода-вывода.

При вводе числовых значений процедура Read выделяет подстроку по следующему правилу:

все ведущие пробелы, символы табуляции и маркеры конца строк пропускаются;

после появления первого значащего символа любой из перечисленных символов или код конца файла служат признаком конца подстроки.

Выделенная таким образом подстрока рассматривается как символьная запись числа соответствующего типа и преобразуется во внутреннее представление; полученное значение присваивается переменной.

Если при вводе чисел нарушен формат (например описана переменная типа integer, а задано число real), то во время работы программы возникнет ошибка ввода-вывода. Если при пропуске ведущих пробелов встретится символ конца файла, то переменная получит значение ноль.

При вводе с клавиатуры символьные строки запоминаются в буфере. Содержимое буфера передаётся процедуре только после нажатия клавиши Enter. Это позволяет редактировать данные при вводе. Ввод информации сопровождается эхо-повтором на экране.

Отличие процедуры Readln от Read заключается в том, что после считывания последней переменной, фигурирующей в списке ввода, оставшаяся часть строки до маркера конца строки пропускается. Следующее обращение к Readln или Read выполняет чтение с первого символа новой строки. Readln можно использовать без списка ввода, это обеспечивает пропуск строки.

Процедуры Write, Writeln выводят информацию в файл или на логическое устройство. Если файловая переменная описана как текстовая, то список вывода может содержать символы, строки, вещественные и целые числа, а также выражения типа boolean. В последнем случае записывается true или false, в зависимости от текущего значения логической переменной.

Илон Маск рекомендует:  Обработка сообщений mfc

Элемент списка вывода, например х, может быть записан в виде x:k:m. Значение k задаёт ширину поля вывода символьного представления переменной x. Если символьное представление имеет меньшую длину, то оно будет дополнено пробелами слева; если длиннее – то параметр k игнорируется и переменная выводится целиком. Параметр m определяет выводимое количество десятичных знаков в дробной части числа. Этот параметр используется только для вещественных чисел и только совместно с параметром k. Если ширина поля вывода не указана, то переменные выводятся подряд, без разделения, вещественные числа записываются в экспоненциальном формате.

При использовании Writeln выводимая строка завершается символами конца строки. Последующее применение процедур Write и Writeln обеспечивает запись информации с новой строки.

Последнее изменение этой страницы: 2020-02-21; Нарушение авторского права страницы

Программы в Delphi 7 в консольном виде

Прошу помощи в создании программ в Delphi 7 (консольный вид).
Сортировка массивов
Упорядочить столбцы двумерного массива элементов типа Char по возрастанию их ординальных номеров методом прямого включения.
Процедуры и функции. Рекурсия.
1. Используя процедуру пустого цикла, вывести на печать слово «информатика» с задержкой после каждого слога.
2. Составить программу для решения задачи, используя вначале комбинированные процедуры (с параметрами-значениями и с параметрами-переменными), а затем функции пользователя:
Для чисел a,b,c найти значение выражения min(a+b,a+c,b+c)/min(a,c,1+5) с использованием процедуры нахождения минимального из трех чисел.
Строковые величины.
1. Определить, является ли данный текст десятичной записью целого числа.
2. 1. Напечатать заглавными буквами текст строчных букв.
2. Для текста, состоящего из слов, разделенных пробелами, выполнить поиск слов, у которых первая и последняя буквы одинаковые и вывести их.
Множества
Дана непустая последовательность слов из строчных латинских букв. Слова разделены запятой, за последним словом — точка. Напечатать в алфавитном порядке все гласные, которые входят только в одно слово. Гласные буквы: a,e,o,u,i,y.
Записи
Опишите заданный тип, осуществите ввод данных, произведите определенные операции и выведите на печать значение полей (где возможно). Во всех случаях используйте массив из записей.
Данные о животном в зоопарке: название, средний вес (женской, мужской особи), продолжительность жизни, размножение в неволе, количество (женских, мужских особей). Рассчитать отношение общего веса женских особей к общему весу мужских особей.
Файлы
Составить программу, реализующую конкретную схему действий. В содержимое программы должна входить процедура формирования исходного файла нужного типа и формата.
Дан файл F1, компонентами которого являются целые числа. Найти среднее арифметическое неотрицательных компонент файла, а из отрицательных составить новый файл F2.

Добавлено через 12 часов 23 минуты

Консольные приложения в delphi

А теперь забудьте обо всех этих кнопочках, пиктограммах и пропахших мышами приложениях — настоящие программисты и пользователи обожают текстовый режим! Если же говорить серьезно, иногда программы в текстовом режиме могут быть полезными. Примерам таких программ несть числа, и основная проблема всегда заключалась в том, что они запускались в окне DOS и не имели доступа к Windows API или к таким ресурсам, как принтеры и память (не говоря уже о том, что это были 16-разрядные приложения с 640-килобайтовым ограничением на используемую память). Теперь, когда Delphi поддерживает создание консольных приложений, можно создавать 32-разрядные текстовые приложения с использованием линейной модели памяти и с возможностью работать с Windows API и применять ресурсы
Обычно консольные приложения используются, когда не нужно вводить информацию большого объема и требования к интерфейсу сведены к минимуму. Ну и заметим к тому же, что простенькое «Hello, world!», созданное путем размещения компонента TLabel в форме, будет иметь размер около 150 Кбайт, в то время как консольное «Hello, world!» уложится в 10.

Пример консольного приложения
Лучший способ изучить консольные приложения- создать пресловутое «Hello, world!». Для создания его вручную сделайте следующее.

1. Выберите команду File/New Application.
2. Выберите команду File/Remove From Project, и появится диалоговое окно, Remove From Project, показанное на рис. 1.15.
3. В проекте содержится один модуль формы. Выберете его и щелкните на кнопке ОК. Появится диалоговое окно Save changes to Unit1.pas?
4. Щелкните на кнопке No, и форма будет удалена из проекта.
Сохраните проект как EgConsoleHello.
Рис. 1.15. Диалоговое окно Remove From Project позволяет удалять модули и формы из проекта.

Хотя мы создаем «бесформенное» приложение, оно все еще не является консольным и использует GUI, а значит, сравнимо по размеру с бронтозавром. Выберите команду View/Project Source, и в редакторе появится следующий текст.

program EgConsoleHello;
uses
Forms;
<$R *.RES>
begin
Application.Initialize;
Application.Run;
end;

Этого слишком много, чтобы быть достаточным. Вы видите, что подключен модуль Forms, однако он не используется, поэтому данную строку можно удалить. Строки с Application используются для инициализации OLE-сервера и вывода главной формы. Поскольку мы не используем ни того, ни другого, удалите и эти строки. Последнее действие — объяснить компилятору, что мы хотим создать обычное, простое, незамысловатое консольное приложение. Этого можно достичь с помощью команды $APPTYPE. Код в результате будет выглядеть так.

Ax да! Мы же собирались вывести свое приветствие! Для этого добавьте между begin и end строку

WriteLn (‘Hello, world!’);

Сохраните, скомпилируйте и запустите проект из командной строки. Надеюсь, вам понравилось? И еще одно замечание — консольные приложения используют стандартные потоки ввода-вывода, а значит, вы можете использовать функции Read, ReadLn, Write и WriteLn.

Функции Windows API для консольного приложения
Вы можете делать гораздо больше в консольном приложении, чем просто считывать и выводить текст. Вам доступно около 40 функций Windows API для работы с дисплеем, например изменение атрибутов выводимых символов или изменение размеров консоли.
В листинге 1.1 изменяется текст, выводимый в заголовке консольного окна. Вы можете найти этот пример на дополнительно распространяемой дискете в папке EgConsoleTitle.

Листинг 1.1. Изменение заголовка консольного окна
program EgConsoleTitle;
<$APPTYPE CONSOLE>
uses
Windows, SysUtils;
<$R *.RES>
var
sNewTitle, sErrMsg: String;
begin
sNewTitle:= ‘Welcome to Con5ole World’;
if not SetConsoleTitle(PChar(sNewTitle)) then
begin
sErrMsg:= ‘Unable to set caption — ‘+SysErrorMessage(GetLastError);
MessageBox(0,PChar(sErrMsg),’Error’,MB_ICONEXCLAMATION+MB_OK);
end;
ReadLn;
end.

Здесь функция API SetConsoleTitle возвращает False, если назначить новый заголовок невозможно. GetLastError возвращает числовое значение последней ошибки API, которое SysErrorMessage конвертирует в строку для вывода на экран.

Вывод консольного приложения в Delphi

Приветстсвую, программеры. Как можно реализовать (и можно ли) вывод консольного паскалевского приложения в Delphi? Т.е. при нажатии на кнопку, открывается консоль и оттуда уже работает код паскаля.

3 ответа 3

Вариантов два. Или пишете консольное приложение изначально — для этого нужно шаманить с настройками проекта, или создаете отдельное окно и выводите в него текст. Вот пример результата, полученного по первому пути.

ast/dload/guicon.htm>тут , правда для с++, но посмотреть какие именно ф-ции используются, думаю, Вы в состоянии. А затем смотрите MSDN. – gecube 25 сен ’11 в 18:02

Все делается намного проще. Пример: Создаем обычное оконное приложение, кидаем на форму кнопку, два раза кликаем по ней, в обработчике пишем следующий код:

То пишите свой exe с формой и кучей кнопок.

Рядом с ними кладите свои exe консольные проги.

Запуск консольных приложений и перехват потока ввода/вывода в Delphi XE3

Автор: Alex. Опубликовано в Программирование 27 Июнь 2014 . просмотров: 44917

Предположим вам нужно запустить консольное приложение из оконного приложения и наблюдать за потоком вывода. Вы можете сохранять выводимый текст в файл журнала или отображать текст в окне в многострочном текстовом поле, например, в TRichEdit. Кроме того вы можете отправить информацию приложению, если оно что-то запросило. Давайте разберёмся, как это сделать?

Запуск консольных приложений или любых других приложений в Delphi делается очень просто, с помощью функции CreateProcess. Сложнее обстоит дело, если вам нужно запустить консольное приложение и при этом произвести перехват потока ввода/вывода. Для этого вам нужно создать три канала, два для перехвата потоков вывода (один для ошибок, второй для всего остального) и один для входного потока, а затем запустить процесс, передав ему эти каналы. В этом случае вы сможете считывать информацию, которую отдаёт консольное приложение и управлять им.

Илон Маск рекомендует:  Превью картинки на PHP

Как написать этот код с нуля можно найти в Интернете (например, на этом форуме), здесь же я остановлюсь на компоненте TPipeConsole, который как раз и создан, чтобы перехватывать потоки ввода/вывода в Delphi. Причём он позволяет это делать комфортно.

Компонент входит в состав юнита Pipes.pas, про который я писал в статье «Обмен данными между процессами в Delphi XE3». Там же написано, как лучше установить компоненты. Мой исправленный вариант можно скачать здесь:

(Старая версия. Лучше использовать версию Pipes.pas (Win32 и Win64), см. ниже). В юните реализация классов TPipeServer (Pipe-сервер), TPipeClient (Pipe-клиент) и TPipeConsole (класс для запуска консольных приложений, управления ими и перехвата потока вывода). Работает только на платформе Win32. Юнит с моими правками для работы с Delphi до версии XE3. Функция TPipeConsole.Execute с моими правками. Источник здесь.

Pipes.pas Версия:от 12.01.2010
31.01.2014 Windows 135.7 KB 2028


Есть вариант юнита c поддержкой всех версий Delphi и платформы Win64:

Юнит Pipes.pas с примерами, с runttime и designtime библиотеками и поддержкой платформы Win64. В юните Pipes.pas реализация классов TPipeServer (Pipe-сервер), TPipeClient (Pipe-клиент) и TPipeConsole (класс для запуска консольных приложений, управления ими и перехвата потока вывода). Должна работать с Delphi всех версий, но тестирование не проводилось. Функция TPipeConsole.Execute с моими правками. Источник здесь.

27.04.2020 Добавлены мои правки в функции TPipeConsole.Execute и TPipeConsole.Start, чтобы параметр CommandLine 100%-но не был константой, чтобы избежать AV, см. MSDN.

Pipes.pas (Win32 и Win64) Версия:от 04.10.2013
08.05.2015 147.99 KB 1868

Запуск консольного приложения и перехват потока ввода/вывода

Собственно компонент TPipeConsole всё что нам нужно уже делает. Для того, чтобы опробовать как работает запуск консольных приложений с помощью этого компонента создадим консольное приложение и скомпилируем его:

Теперь сделаем проект оконного приложения, на форму положим компонент TRichEdit, растянем его на всю форму (Align -> alClient), включим вертикальную прокрутку (ScrollBars -> ssVertical). Теперь положим на форму компонент TPipeConsole и обработаем все его события:

Теперь по событию формы OnCreate сделаем запуск нашего консольного приложения:

Выполним наше оконное приложение. Вот результат:

Как мы видим, всё отлично отработало, но есть одна ложка дёгтя при работе с компонентом. Если перемешать обычные сообщения с сообщениями об ошибке, то получать мы их будем в произвольном порядке. Вот пример такого консольного приложения:

Здесь сообщение об ошибке записывается между сообщениями 1 и 2. А вот как будет выглядеть результат:

Как видите, сначала вывелись все обычные сообщения, а потом сообщение об ошибке. Почему так происходит? Так происходит потому, что компонент TPipeConsole принимает сообщения из двух каналов по очереди: сначала из основного выходного канала, затем из канала для ошибок. Это нужно учитывать при написании консольного приложения, например, после вывода ошибки работа приложения сразу завершается. Или выводить все сообщения в основной канал.

Также здесь я отмечу, что мы использовали асинхронное выполнение консольного приложения. Если вам нужно выполнить консольное приложение синхронно, то нужно воспользоваться функцией Execute.

Теперь попробуем отправить что-нибудь консольному приложению. Для этого слегка перепишем консольное приложение:

Как видите, консольное приложение ждёт число в интервале от 0 до 9, чтобы вычислить квадрат этого числа. Значит нужно передать консольному приложению число:

Попробуем теперь передать строку вместо числа:

И, после запуска, увидим ошибку:

Остановка консольного приложения

Теперь пара слов о том, как остановить консольное приложение, которое долго выполняется. Здесь есть 2 способа: прервать выполнение или оповестить приложение, что ему нужно завершить работу. Второй способ предпочтительнее, т.к. в этом случае консольное приложение перед завершением работы может освободить занимаемые ресурсы, удалить временные файлы и т.п.

Прерывание выполнения делается с помощью функции Stop:

Оповещение приложения можно сделать с помощью функций SendCtrlC и SendCtrlBreak. Вот пример вызова:

По умолчанию, вызов этой функции тоже прерывает работу приложения, но этот вызов можно обработать внутри консольного приложения по-своему и прерывания работы не произойдёт. Вот пример консольной программы с обработкой сигналов:

Теперь положим на форму нашего оконного приложения кнопку и по событию OnClick вызовем функцию SendCtrlC:

Теперь протестируем, как работает отправка сигнала консольному приложению. Запустим нашу программу для тестирования, посмотрим, как приходят сообщения от консольного приложения, и нажмём на кнопку, которую мы сделали. Приложение завершило работу? выдав сообщение «Прерывание! Выход из цикла»:

Как видите, ничего сложного нет. Единственный момент, который нужно учесть, вызов функции Ctrl_Handler в консольном приложении происходит в отдельном потоке, поэтому при работе с глобальными переменными нужно использовать критические секции, чего в примере не сделано, чтобы не замусоривать код примера.

Итак, как вы убедились, с помощью компонента TPipeConsole можно легко контролировать консольное приложение, не углубляясь в тонкости этого процесса.

Консольные приложения в delphi

Решение самой простой задачи на компьютере не обходится без операций ввода-вывода информации. Ввод данных — это передача данных от внешнего устройства в оперативную память для обработки. Вывод — обратный процесс, когда данные передаются после обработки из оперативной памяти на внешнее устройство. Внешним устройством может служить консоль ввода-вывода (клавиатура и монитор), принтер, гибкий или жесткий диск и другие устройства.

Сейчас мы рассмотрим лишь средства консольного ввод-вывода данных. Консоль — это клавиатура плюс монитор. С клавиатуры данные вводятся в программу, а на монитор выводятся результаты ее работы. Консольная модель ввода-вывода, при которой данные представляются потоком символов, не позволяет использовать графических средств. Однако она очень подходит для изучения языка Delphi, так как не загромождает примеры программ излишней информацией о среде и библиотеках программирования.

Итак, давайте последовательно создадим консольное приложение:

  1. Запустите среду Delphi, выберите в главном меню команду File | Close All, а затем — команду File | New.
  2. Выберите «Console Application» и нажмите «OK» (рисунок 2.1)

Теперь, когда есть основа для проверки изучаемого материала, рассмотрим операторы консольного ввода-вывода. К ним относятся Write, Writeln, Read, Readln.

Консольный вывод

Инструкции Write и Writeln служат для вывода чисел, символов, строк и булевских значений на экран. Они имеют следующий формат:

где Y1, Y2. Yn — константы, переменные и результаты выражений. Инструкция Writeln аналогична Write, но после своего выполнения переводит курсор в начало следующей строки.

Если инструкции Write и Writeln записаны без параметров:

то это вызывает пропуск на экране соответственно одной позиции и одной строки.

Консольный ввод

Инструкции ввода обеспечивают ввод числовых данных, символов, строк для последующей обработки в программе. Формат их прост:

где X1, X2, . Xn — переменные, для которых осуществляется ввод значений. Пример:

Если одна инструкция вводит несколько значений:

то все эти значения надо набрать на клавиатуре, отделяя одно значение от другого пробелом, и нажать клавишу Enter.

Если вводится одно значение:

то его следует набрать и нажать клавишу Enter. С этого момента программа может обрабатывать введенное значение в соответствии с алгоритмом решаемой задачи.

Инструкция Readln отличается от Read только одним свойством: каждое выполнение инструкции Readln переводит курсор в начало новой строки, а после выполнения Read курсор остается в той же строке, где и был (потренеруйтесь — и вы быстро поймете разницу).

В простейшем случае в инструкциях Read и Readln параметры можно вообще не указывать:

Оба этих оператора останавливают выполнение программы до нажатия клавиши Enter.

встроенные консольные приложения в Delphi

У меня есть консольное приложение третьей стороной

Я хочу, чтобы выполнить его во время выполнения сформировать приложение Дельф.

окно консоли приложения должно быть hidden.and все сообщения от консольного приложения должны быть напечатаны в контроле моего приложения (текстовое поле памятки и т.д.)


а также с помощью пользователь управления должен иметь возможность ввода текста.

Может кто-нибудь помочь мне это сделать

Это позволит вам работать и получать информацию обратно из консоли (DOS-типа) приложений в TRichEdit. Это не позволяет вам вводить текст после того, как приложение работает, но, возможно, это даст вам отправную точку. (Оригинальный код из группы новостей поста, написанного доктором Питером Ниже из TeamB.)

Смотрите этот ответ и этот один.

Жарко писал об этом на Delphi.about.com .

Это общее требование, например, в Иде и создавать инструменты или приложения, которые порождают внешние инструменты командной строки, чтобы сделать управление версиями, например.

Для того, чтобы ответить на два-полосной, как вы просите, чтобы это было, очень сложно, и я не в курсе всех, кто осуществил «командную оболочку» или «режим терминала» полностью в Дельфах.

Я портировал код Златко на Delphi XE (работает также в 2010 году) здесь .

Console Applications

Console applications are 32-bit programs that run without a graphical interface, in a console window, on a target platform. These applications typically do not require much user input and perform a limited set of functions. Although console applications cannot display visuals, you can use all the types and functions of the RTL (run-time library) in a console application.

Any application that contains the following in the code, opens a console window of its own.:

Contents

To create a new Delphi console application

  1. Click File > New > Other > Delphi Projects .
  2. Double-click Console Application.

Then, the IDE creates a project file for this type of source file and displays the Code Editor.

To create a new C++ console application

  1. Click File > New > Other > C++Builder Projects and double-click Console Application. The New Console Application (C++) dialog box opens.
  2. Select the source type (C or C++) for the main module of the project, or enable Specify project source and specify the preexisting file that contains a main or winmain function.
  3. For C++, in the Target Framework group, specify the application type if you want your application to display visuals:
  4. For C++, in the Target Framework group, specify the application type if you want your application to display visuals:
    • FireMonkey: to create a FireMonkey application
    • VCL: to create a VCL application
    • None: a default framework

    Note: Although a console application cannot display visuals, a C++ console application can process visual files from a library (such as icons, bitmaps, video, and so forth). For example, if you do not indicate in the wizard that you want to use the VCL, your application cannot use any of the VCL classes later. Trying to do so causes linker errors.

  5. Click OK.

Then, the IDE creates a project file for this type of source file and displays the Code Editor.

Your console application must handle all exceptions

Console applications should ensure that no exceptions escape from the program scope. Otherwise, when the program terminates, the operating system displays a dialog with exception information.

Your C++ console applications should handle all exceptions in order to prevent the target platform from attempting to display a dialog when you run the console application. For more information, see Exception Handling in C++Builder.

For example, your Delphi application should include exception handling such as shown in the following code:

How your console application terminates

Users can terminate console applications in one of the following ways:

  • Click the Close (X) button.
  • Press Ctrl+C .
  • Press Ctrl+Break .
  • Log off.

To handle these user termination requests, use the options of the Windows API function SetConsoleCtrlHandler. Depending on the user’s choice, the application might be terminated forcefully, the process might not shut down cleanly, and the finalization section might not run.

Использование VCL TTimer в консольном приложении Delphi

Как говорит субъект вопроса. У меня есть консольное приложение в Delphi, которое содержит переменную TTimer . Я хочу назначить обработчик события TTimer.OnTimer . Я совершенно новичок в Delphi, я использовал C # и добавление обработчиков событий к событиям совершенно другое. Я обнаружил, что не просто назначить процедуру событию в качестве обработчика, вы должны создать фиктивный класс с методом, который будет обработчиком, а затем назначить этот метод для события. Вот код, который у меня сейчас есть:

Мне кажется, это правильно, но почему-то это не работает.

ИЗМЕНИТЬ
Похоже, что компонент TTimer не будет работать, потому что консольные приложения не имеют цикла сообщений. Есть ли способ создать таймер в моем приложении?

3 ответа

Ваш код не работает, потому что компонент TTimer использует WM_TIMER обработка сообщений и консольное приложение не имеют цикла сообщений. Чтобы ваш код работал, вы должны сами создать цикл прокачки сообщений:

Как уже упоминали другие, в консольных приложениях отсутствует насос сообщений.

Вот класс потока TConsoleTimer , который имитирует TTimer класс. Основное отличие состоит в том, что код в событии выполняется в потоке TConsoleTimer .

Обновление

В конце этого сообщения есть способ вызвать это событие в основной теме.

Как упоминалось выше, как заставить событие выполняться в главном потоке?

Добавьте метод в TConsoleTimer :

и измените вызов в методе Execute на:

Для накачки синхронизированных вызовов используйте функцию CheckSynchronize() в модуле Classes:

Консольные приложения не имеют модуля обработки сообщений, но имеют потоки. Если вы создаете поток, который выполняет работу и ждет следующей секунды, когда работа будет завершена, вы должны получить желаемый результат. Прочитайте документацию о TThread, как создать отдельную тему. Получать данные в поток и из потока не так просто. Вот почему есть ряд альтернатив «сырому» TThread, которые помогают с этим, например, OmniThreadLibrary.

Консольное приложение Делфи

В Делфи можно создавать приложения, не использующие графический интерфейс Windows. Но для чего? Ведь этот интерфейс очень удобен для пользователя. Это так, но:

  • Консольные приложения занимают мало памяти.
  • Программы, написанные на Turbo Pascal (правда, не все) можно транслировать и выполнять без сушественных переделок. Так что можно не разыскивать Турбо-Паскаль. Делфи найти проще.

Порядок действий:
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL