немного теории, речь правда о делфе, както задумал я прогу, давно это было, которая при запуске из консоли работает как консольная а из гуи как гуевая.
в винде нет понятия консольная программа
при запуске программы из консоли, эта самая консоль аттачится к проге, а если из гуя то нечему аттачится, а далее прога сама решает что делать - если есть консоль и хочет быть консольной - работает - если нет консоли - создает консоль, соответственно если не хочет быть консольной и есть консоль то прога ее освобождает (аттачится/если есть консоль/создает/освобождает - соответствующий винапи).
директива компилятора - создавать консольную прогу как раз и управляет какой вариант кода в компилить в прогу, но это в делфе, возможно в фреепаскале както можно более гибко регулировать это.
теперь по существу
Seenkao писал(а):Хорошо, но как тогда создать простое приложение без консоли? Не прибегая к методу удаления LCL из LCL.
если с ходу - в начале работы программы - вызываете функцию получить текущую приаттаченную консоль и если она есть - освобождаете ее
а так надо посмотреть, наверняка это както регулируется (какой код работы с консолью компилятор вкомпиливает), в делфе сделали жестко.
Добавлено спустя 1 час 8 минут 43 секунды:- Код: Выделить всё
program project1;
{$mode objfpc}{$H+}
{$apptype GUI}
uses
windows;
begin
// if AttachConsole(ATTACH_PARENT_PROCESS) = false then Assert(AllocConsole());
// FreeConsole();
AllocConsole();
ReadLn;
end.
плохо что во фрипаскале такой код не работает, а в делфе работает.
Добавлено спустя 2 минуты 3 секунды:самое забавное реализацию ReadLn не нашел в исходниках
Добавлено спустя 21 минуту 17 секунд:вот это работает
- Код: Выделить всё
program project1;
{$mode objfpc}{$H+}
{$apptype GUI}
uses
windows;
begin
AllocConsole();
IsConsole:= true;
SysInitStdIO;
ReadLn;
end.