Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2011.12.11;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.004 c
15-1313853077
RGV
2011-08-20 19:11
2011.12.11
HP pavilion dv6-6160er


15-1314304198
Юрий
2011-08-26 00:29
2011.12.11
С днем рождения ! 26 августа 2011 пятница


1-1276603042
AIV2104
2010-06-15 15:57
2011.12.11
DCPcrypt для Delphi 7 и 2009 не ставиться из-за rtl.bcp


2-1313982989
Konstantin
2011-08-22 07:16
2011.12.11
DCOMConnection


15-1314119165
SQLEX
2011-08-23 21:06
2011.12.11
Почему килобайт = 1024 байт?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский