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

Вниз

Можно ли получить информацию о 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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.007 c
15-1306312288
Правильный$Вася
2011-05-25 12:31
2011.09.18
файловая система у Win7


2-1307083946
TKN
2011-06-03 10:52
2011.09.18
Стереть информацию с дискеты (флеш-диска)


15-1306699762
LDV
2011-05-30 00:09
2011.09.18
распознавание текста


2-1306830994
supergraf3000
2011-05-31 12:36
2011.09.18
просмотр html-кода


15-1298385410
Hint
2011-02-22 17:36
2011.09.18
FWSysTrayInfo от Rouse