Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1306465531
Leon-Z
2011-05-27 07:05
2011.09.18
Как дать правильное имя?


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


2-1306915271
Foxi_
2011-06-01 12:01
2011.09.18
Проблема взаимодействия Delphi и Excel, как выбрать нужный лист


8-1187098476
leonidus
2007-08-14 17:34
2011.09.18
Где найти компонент отображающий Thumbnail ?


15-1306253551
Чайник
2011-05-24 20:12
2011.09.18
Удаление файла





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский