Страница 1 из 1

Назначить константу О_о

Добавлено: 25 апр 2011, 13:41
Masygreen
Невероятно .. но ...
в настройках лежит ценные данные :)
в программа состоит из множества интерфейсов, описных во множестве файлов
хочу что то вроде .. чего можете предложить ? или в каждом модуле каждый раз настройку дергать ?

Код: Выделить всё

const
mИмяМоейКонстанты = cogettune('Значение необходимой настройки');
end;

Re: Назначить константу О_о

Добавлено: 25 апр 2011, 14:14
Vik
Например, разделяемый интерфейс с соответствующими методами или пропертями, либо интерфейс со статическими методами. Ну или еще вариант просто define cделать.

Re: Назначить константу О_о

Добавлено: 25 апр 2011, 14:28
Masygreen
Vik писал(а):Например, разделяемый интерфейс с соответствующими методами или пропертями, либо интерфейс со статическими методами. Ну или еще вариант просто define cделать.
поясни идею.. чего то совсем не понял в какую сторону думать ?

Re: Назначить константу О_о

Добавлено: 25 апр 2011, 14:46
Vik
Ну, например:
1) Разделяемый интерфейс.

Код: Выделить всё

ObjInterface ObjConstKeeper
  property myConst1 : comp read;
 .......
end;

VipInterface  ConstKeeper implements ObjConstKeeper;

Interace ConstKeeper
property ObjConstKeeper.myConst1 : comp read coGetTune('MY_TUNE');
...
end; 

файл ConstKeeper.var
pi_constKeeper: ConstKeeper; 

где-то в коде :
#include ConstKeeper.vih
.....
var
#include ConstKeeper.var
...
  if (pi_constKeeper.myConst1 != 0) { .... }
...
2) Интерфейс и статические методы:

Код: Выделить всё

VipInterface  ConstKeeper;
public:
  static myConst1: comp;
...
end;

Где-то в коде:
#include ConstKeeper.vih

if (ConstKeeper::myConst1 != 0) { .... }
Либо, этот интерфейс можно зарегистрировать как глобальную библиотеку и в коде просто вызывать:

Код: Выделить всё

 if ( myConst1 = 777h ) { ... }
Регистрация

Код: Выделить всё

Handler with replace ConstKeeper_RegisterGlobalIfc on ExtensionPoint epAppInit
Action
{
  RegisterGlobalIfc('MY_COMP::ConstKeeper');
  Result := TRUE;
}
В файле проекта:

Код: Выделить всё

global My_Comp::ConstKeeper;
3) Дефайны (ну этот вариант позволяет просто в одном месте описать все, а дальше в коде вызывать свои определения какого-то функционала)

Код: Выделить всё

#define myConst1 coGetTune('MY_TUNE') 
...

Re: Назначить константу О_о

Добавлено: 26 апр 2011, 14:22
Masygreen
Печаль .. надо именно константу ... не буду же я #define в каждом файле писать .. тогда какая разница ... я хочу 1 раз описать её и не предавать как параметр..

Код: Выделить всё

#define nRecGrNal cogettune('МояНастройка');
//константы в проекте
const
mtcnRecGrNal = #nRecGrNal;
end;

Re: Назначить константу О_о

Добавлено: 26 апр 2011, 14:28
n0where
Masygreen
в инклуд затолкать не судьба? чтобы не прописывать постоянно.

Re: Назначить константу О_о

Добавлено: 26 апр 2011, 14:30
Masygreen
n0where писал(а):Masygreen
в инклуд затолкать не судьба? чтобы не прописывать постоянно.
итишкин кот :)
конечно в инклуде лежат у меня константы .. но мне нужна вычисляемая константа... как её сделать я и спрашиваю ...

Re: Назначить константу О_о

Добавлено: 26 апр 2011, 14:37
Masygreen
ни когда просто не пользовался #define,#DECLARE не пойму где и как один раз определить вычисляемое значение дабы его использовать далее....

Re: Назначить константу О_о

Добавлено: 26 апр 2011, 14:42
n0where
По логике конечно константа не может быть вычисляемой, в var не проще запихать?
Ну сделал лишнюю функцию по заполнению переменных и усе

Re: Назначить константу О_о

Добавлено: 26 апр 2011, 14:48
Masygreen
n0where писал(а):По логике конечно константа не может быть вычисляемой, в var не проще запихать?
Ну сделал лишнюю функцию по заполнению переменных и усе
дело в том что у меня проект 20 файлов vip, я активно пользовался константами которые описаны один раз в const.inc...
теперь пришла идея часть констант вынести в настройки - дабы добавить гибкости программе... собственно из этого и заморочка, сегодня я решил получить это из настройки, завтра в результате работы функции, сейчас просто число .. все это однозначно решается в момент запуска 1 раз, вот и хотелось бы как то на константы повлиять ...
Походу вывод один .. написать функции получения этих переменных ... :(

Re: Назначить константу О_о

Добавлено: 26 апр 2011, 14:53
edward_K
если вы хотите программно задавать это уже не константа. Если глобально - то можете сделать файл с переменными и включать его либо в проект, либо в каждый файл - наподобие сделано в транспорте. Вопрос тока как понять что вы уже туда записали. тут тогда можно отлавливать событие при входе в модуль. А вообще почему бы вам не сделать свои настройки?. Ищите ObjStartCreateTuneEx или просто CreateTune

Re: Назначить константу О_о

Добавлено: 26 апр 2011, 15:41
Masygreen
сделал пользовательские настройки