Форум: "Начинающим";
Текущий архив: 2011.09.18;
Скачать: [xml.tar.bz2];
ВнизМожно ли получить информацию о conditional defines в рантайме? Найти похожие ветки
← →
Abcdef123 (2011-06-01 09:04) [0]Здравствуйте, Мастера.
Можно ли информацию (всю строку), которая использовалась при компиляции проекта увидеть в рантайме, у примеру на форме назначить как Label.caption...? Если возможно, то как?
Заранее спасибо!
← →
Anatoly Podgoretsky © (2011-06-01 09:20) [1]> Abcdef123 (01.06.2011 09:04:00) [0]
Теперь по русски и с кодом.
← →
Abcdef123 (2011-06-01 10:06) [2]To [1]
В Дельфи зайдите в меню Project->Options->Directory/Conditionals там увидите комбобокс conditional defines. Мы пишем туда разные определения (к примеру "RND;Ver110;..."и используем эти установки по разным причинам (тут может быть и в зависимости от клиента, от версии проекта), так что разные установки и компиляции проекта - в результате название экзешника то одно, а программа будет работать по разному.
К примеру,
{$IFDEF RND}
Amt := 100;
{$ENDIF}
Amt := 100.34;
{$ENDIF}
И нам было бы удобно знать, с какими установками был скомпилирован тот и ли иной экзешник.
Это я написала - для чего мы используем установки conditional defines.
А теперь по поводу кода - если б знала как написать код, то и не было бы вопроса. Попробую объяснить на примере, как должно выглядеть:
Если, к примеру мы скомпилировали проект с такими установками conditional defines=RND;Ver110
А при запуске проекта мы хотим видеть к примеру в заголовке главной формы этот текст "RND;Ver110".
А вот теперь вопрос: Что я должна прописать в программе, чтобы заголовку формы присвоилась строка этих установок?
procedure TForm1.FormShow(Sender: TObject);
begin
Caption := <КАК вызвать дельфийское значение conditional defines???>;
end;
P.S. Примеры для простоты я утрировала, конечно, но суть вопроса надеюсь ясна.
← →
OW © (2011-06-01 10:50) [3]не знаю, но
не лучше будет писать не в в меню Project->Options->Directory/Conditionals комбобокс conditional defines
vs
а в отдельном модуле, руками, списком
{$DEFINE name1}
{$DEFINE name2}
И включить его в ресурсы, как строки, при компиляции?
(тут же всякие константы могут быть,
удобно, имхо)
← →
~AQUARIUS~ (2011-06-01 11:03) [4]В рантайме их определить нельзя - это управляющие конструкции для компилятора, после компиляции их попросту нет, примерно как имен переменных
← →
DiamondShark © (2011-06-01 11:16) [5]
> Caption := <КАК вызвать дельфийское значение conditional
> defines???>;
function MyDefines : string;
begin
result := "";
{$IFDEF RND}
result := result + "RND ";
{$ENDIF}
{$IFDEF KUKU}
result := result + "KUKU ";
{$ENDIF}
end;
← →
Anatoly Podgoretsky © (2011-06-01 13:59) [6]> Abcdef123 (01.06.2011 10:06:02) [2]
Это никакого отношения к компиляции не имеет.
← →
Anatoly Podgoretsky © (2011-06-01 14:02) [7]> Abcdef123 (01.06.2011 10:06:02) [2]
А ответ "для чего". Для возможности запуска с разными условиями, чтобы их не
задавать каждый раз.
Они даже не являются частью проекта. Частью проекта являются только те,
которые указаны в самом проекте.
← →
Abcdef123 (2011-06-02 05:02) [8]Большое спасибо всем откликнувшимся, особенно [4] и [5].
To [4] Ваш ответ подтвердил мои сомнения. Если заметили, я поставила в заголовке "можно ли", и уж потом, если да, то как. Ваш ответ означает - нельзя.
To [5]. Ваша идея, это как говорится - хоть что то. Поскольку нет возможности реализовать как я предполагала, то хотя бы вашим примером можно хоть как то передать информацию в рантайм. Хотя, конечно, не очень удобно, так как надо будет не забывать всегда добавлять все возможные кондиции в эту функцию, в случае, если новое условие будет введено в conditional defines.
To [6] [7] Извините, но ничего не понятно, что вы написали. К примеру "Это никакого отношения к компиляции не имеет" - что ЭТО? Если имеете в виду conditional defines, то как раз имеют. седьмой вообще не знаю как прокомментировать. Могли бы вы объяснить по русски, плз?
← →
Лайма (2011-06-02 19:07) [9]
> Извините, но ничего не понятно, что вы написали.
Тут никто не понимает, что пишет Анатолий.
Это совершенно нормально.
← →
Германн © (2011-06-03 02:57) [10]Удалено модератором
← →
han_malign (2011-06-03 08:58) [11]
unit common_opt;
interface
const
sOpt = "sample";
iOpt1= 1;
iOpt2= 2;
function print: string;
implementation
uses SysUtils;
function print: string;
begin
Result:= "sOpt: ""+ sOpt+""; iOpt(" + IntToStr( iOpt1 )+"," + IntToStr( iOpt2 )+")";
end;
end.
program dopt;
{$APPTYPE CONSOLE}
uses
Windows,
common_opt in "some_specialization_path\common_opt.pas";
{$IF sOpt="sample"}
{$MESSAGE "Is a Conditional Compile Options sample"}
{$IFEND}
{$IF iOpt1<>1}
{$MESSAGE WARN "Unexpected iOpt1"}
{$IFEND}
begin
{$IF iOpt1=1}
Writeln(common_opt.print);
{$ELSE}
Writeln("Invalid Compile Options "+common_opt.print);
{$IFEND}
end.
← →
han_malign (2011-06-03 09:24) [12]кстати о птичках - Мастер проекта обычно перелопачивает секцию
uses
в .dpk/.dpr и удаляет все лишние(по его мнению) строки и комментарии.
помогает вот такой финт:unit _IfdefMagicDumb;
interface
implementation
end.
-------------------------package come_pack;
uses
...
Form1 in "Form1.pas" {TFom1},
_IfdefMagicDumb in "_IfdefMagicDumb.pas" {$IFOPT D+},
Form2 in "debug\Form2.pas" {TFom2},
some_spec_not_form in "debug\some_spec_not_form.pas" {$ELSE},
Form2 in "release\Form2.pas" {TFom2},
some_spec_not_form in "release\some_spec_not_form.pas" {$ENDIF},
...........
← →
Abcdef123 (2011-06-03 10:44) [13]To [11] я попробовала сейчас изобразить ваш пример как проект dopt, да сообщение показывает, но я никак не пойму, как это можно использовать для решения моего вопроса? Могли бы вы пояснить, плз?
А по поводу [12] совсем не поняла, это по той же теме, в дополнение к вашему [11] примеру? Если да, то как "привязать" dopt к package come_pack?
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2011.09.18;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.003 c