Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.12.11;
Скачать: CL | DM;

Вниз

Console   Найти похожие ветки 

 
Gu   (2011-08-28 20:26) [0]

По умолчанию в прогах {$APPTYPE} равно GUI и значение не отображается в *.dpr (для консольных {$APPTYPE CONSOLE}). Вопрос: как узнать в конструкции {$IFDEF...$ENDIF} что тип приложения консольный?

Т.е.

{$IFDEF CONSOLE}
..
{$ENDIF}
не отрабатывает.

Есть глобальная IsConsole но это не то, надо чтобы условие отрабатывало на этапе добавления модулей в uses.


 
QAZ   (2011-08-28 21:05) [1]

{$DEFINE CONSOLE}
...
{$IFDEF CONSOLE}
{$APPTYPE CONSOLE}
{$ENDIF}
...
{$IFDEF CONSOLE}
...
{$ENDIF}


 
Gu   (2011-08-28 21:20) [2]

не, это мы заранее объявляем DEFINE CONSOLE. а нет ли какойто дерективы глобальной, чтобы при консольном приложении она уже была объявлена после применения {$APPTYPE CONSOLE} ?

т.е. {$IFDEF CONSOLE} это я для примера написал, на самом деле оно не работает, потому что CONSOLE не объявлен.


 
Gu   (2011-08-28 21:32) [3]

смысл какой - есть модуль, где в зависимости от типа приложения используется разный набор модулей. Подключается он в файле dpr первым в uses. При консольном приложение дельфя автоматом добавляет в начало dpr {$APPTYPE CONSOLE}, вот как, чтобы не объявлять самому больше ничего типа {$DEFINE CONSOLE} и не лазия в модуль - определять, консоль или гуи сейчас компилится и соответствено в модуле подключать то что нужно.  

т.е. объявляется ли после объявления {$APPTYPE CONSOLE} какая нибудь глоальная XXX

чтобы отрабатывало

Uses
Module1,Module2,
{$DEFINE XXX}
Module3,
{$ENDIF}
ModuleN;


 
Игорь Шевченко ©   (2011-08-28 22:21) [4]

Откройте для себя Conditional defines в опиях проекта


 
Gu   (2011-08-29 00:14) [5]

это я уже открыл. я к тому что может что то по умолчанию еще при этом объявляется (при {$APPTYPE CONSOLE})


 
Германн ©   (2011-08-29 00:23) [6]


> Gu   (29.08.11 00:14) [5]
>
> это я уже открыл.

Этого более чем достаточно.


 
Gu   (2011-08-29 02:08) [7]

ясно


 
Юрий Зотов ©   (2011-08-29 05:13) [8]


> Gu   (29.08.11 02:08) [7]

Только учтите, вот что:

1. Программа может быть и не GUI, и не консольная. Например:
project project1;
 // В проекте НЕТ директивы {$APPTYPE CONSOLE}
uses
 Windows;
begin
 // Здесь делаем что-то "невидимое" (например, копируем файл)
end.


2. И в консольной программе никто не мешает создавать и показывать формы.

3. И в GUI программе никто не мешает создать и показать консоль.

=============================

Поэтому деление программ на GUI и консольные довольно-таки условное.


 
Юрий Зотов ©   (2011-08-29 05:16) [9]

Дополнение:
4. Консоль можно создать и показать без всяких директив.


 
Юрий Зотов ©   (2011-08-29 05:42) [10]

Вот, например, программа, в которой есть и форма, и консоль (причем без всяких директив).

К какому типу она относится? А шут ее знает.

program Project1;

uses
 Forms,
 Unit1 in "Unit1.pas" {Form1};

{$R *.res}

begin
 Application.Initialize;
 Application.CreateForm(TForm1, Form1);
 Application.Run;
end.

------------------------------------------------------------------------------

unit Unit1;

interface

uses
 Windows, Classes, Controls, Forms, StdCtrls;

type
 TForm1 = class(TForm)
   Edit1: TEdit;
   Button1: TButton;
   Button2: TButton;
   procedure FormCreate(Sender: TObject);
   procedure FormDestroy(Sender: TObject);
   procedure Button1Click(Sender: TObject);
   procedure Button2Click(Sender: TObject);
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
 FormStyle := fsStayOnTop;
 AllocConsole
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
 FreeConsole
end;

procedure TForm1.Button1Click(Sender: TObject); // Чтение с консоли
var
 S: string;
begin
 Write(">> Type something and press Enter: ");
 ReadLn(S);
 Edit1.Text := S
end;

procedure TForm1.Button2Click(Sender: TObject); // Вывод на консоль
begin
 WriteLn(Edit1.Text)
end;

end.


 
Медвежонок Пятачок ©   (2011-08-29 09:19) [11]

походу его не то интересует, о чем он говорит.
у него при writeln временами недопустимая операция вылетает, хотя приложение выглядит как консольное.


 
Gu   (2011-08-29 11:05) [12]


> Медвежонок Пятачок

нет, это только ваши догадки. интересует только то, о чем спрашивал: как в модулях проекта узнать, что в проекте объявлено {$APPTYPE CONSOLE}


 
Медвежонок Пятачок ©   (2011-08-29 11:12) [13]

какая разница?
в трех модулях апптайп консоль.
в других трех гуи.

какой будет правильный ответ?


 
Юрий Зотов ©   (2011-08-29 11:18) [14]


> Gu   (29.08.11 11:05) [12]

Я писал все это, чтобы показать, что наличие (как и отстутствие) директивы {$APPTYPE CONSOLE} еще ни о чем не говорит. Поэтому ориентироваться на нее нельзя.

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


 
Anatoly Podgoretsky ©   (2011-08-29 12:03) [15]

> Gu  (29.08.2011 11:05:12)  [12]

Что же ты не умеешь пользоваться справкой

IsConsole variable


 
Inovet ©   (2011-08-29 12:19) [16]

> [15] Anatoly Podgoretsky ©   (29.08.11 12:03)
> IsConsole variable


> [0] Gu   (28.08.11 20:26)
> Есть глобальная IsConsole но это не то, надо чтобы условие
> отрабатывало на этапе добавления модулей в uses.


 
Anatoly Podgoretsky ©   (2011-08-29 12:47) [17]


> Inovet ©   (29.08.11 12:19) [16]

А

Сомневаюсь однако, что он пишет эксперта


 
Inovet ©   (2011-08-29 12:55) [18]

> [17] Anatoly Podgoretsky ©   (29.08.11 12:47)
> Сомневаюсь однако, что он пишет эксперта

Видимо, "на этапе добавления модулей в uses" следует читать "Во время компиляции".:)


 
Юрий Зотов ©   (2011-08-29 17:12) [19]

Кстати, IsConsole еще тоже ни о чем не говорит. Например, в приведенной выше программе она дает False, хотя консоль есть.


 
DVM ©   (2011-08-29 17:31) [20]


> Gu   (29.08.11 11:05) [12]
>
> > Медвежонок Пятачок
> спрашивал: как в модулях проекта узнать, что в проекте объявлено
> {$APPTYPE CONSOLE}

Заведи свою директиву в своем inc файле и вставь его в нужные модули. Самое правильное.
Во время работы же наличие консоли можно проверить.



Страницы: 1 вся ветка

Текущий архив: 2011.12.11;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.011 c
2-1314601549
alexdn
2011-08-29 11:05
2011.12.11
Tms меню компонент


2-1314252487
Onyx2012
2011-08-25 10:08
2011.12.11
Фильтр по значению в Express Quantum Grid


2-1314513211
Егорка
2011-08-28 10:33
2011.12.11
Все файлы в папке и подпопках?


2-1314285762
brother_home
2011-08-25 19:22
2011.12.11
форматирование integer с разделением по 1000 пробелом


8-1217964911
Рацелий
2008-08-05 23:35
2011.12.11
Chip music