Форум: "Начинающим";
Текущий архив: 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