powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Макроподстановка
15 сообщений из 15, страница 1 из 1
Макроподстановка
    #39615543
Valerii
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Народ,
Есть ситуация:
Присвоил форме свойство Thisform.m1
Его значение в окне свойства присвоены как:
'Внимание - Ошибка работы приложения!!!!!!',8+48+256,'Внимание' - точь в точь без дополнительных кавычек как символьное значение.
теперь хочу отобразить в MessageBox() это сообщение в стиле и с кнопками как 8+48+256 ....
если это делать сразу как
MessageBox(&Thisform.m1) происходить ошибка: Function name is missing ).
Но если сделать это иначе:

x= Thisform.m1
MessageBox(&x)

все отрабатывается прекрасно. Кто даст намек из=за чего и как этот случай настроить чтобы все работало как
MessageBox(&Thisform.m1)
Всем спасибо!!!!!
...
Рейтинг: 0 / 0
Макроподстановка
    #39615549
Valerii
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ValeriiНарод,
Есть ситуация:
Присвоил форме свойство Thisform.m1
Его значение в окне свойства присвоены как:
'Внимание - Ошибка работы приложения!!!!!!',8+48+256,'Внимание' - точь в точь без дополнительных кавычек как символьное значение.
теперь хочу отобразить в MessageBox() это сообщение в стиле и с кнопками как 8+48+256 ....
если это делать сразу как
MessageBox(&Thisform.m1) происходить ошибка: Function name is missing ).
Но если сделать это иначе:

x= Thisform.m1
MessageBox(&x)

все отрабатывается прекрасно. Кто даст намек из=за чего и как этот случай настроить чтобы все работало как
MessageBox(&Thisform.m1)
Всем спасибо!!!!!


EVALUATE('MESSAGEBOX('+.m1+')')
это не предлагать ... ;-)
...
Рейтинг: 0 / 0
Макроподстановка
    #39615568
Sergey Sizov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ValeriiMessageBox(&Thisform.m1) происходить ошибка: Function name is missing ).
Но если сделать это иначе:

x= Thisform.m1
MessageBox(&x)

все отрабатывается прекрасно. Кто даст намек из=за чего В выражении &Thisform.m1 у точки совсем не тот смысл, который вы ожидаете. Внимательно почитайте хелп про макроподстановку и особенно про её ограничители.
...
Рейтинг: 0 / 0
Макроподстановка
    #39615755
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valerii,

Вам сюда Макроподстановка

Насчет указанной ошибки - это раздел в этой статье "Особенности использования макроподстановки"

Насчет Evaluate(), если результат вычисления записанного выражения - это символьная строка, то использовать надо так

Код: sql
1.
MessageBox(Evaluate(ThisForm.m1))
...
Рейтинг: 0 / 0
Макроподстановка
    #39615763
Valerii
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМValerii,

Вам сюда Макроподстановка

Насчет указанной ошибки - это раздел в этой статье "Особенности использования макроподстановки"

Насчет Evaluate(), если результат вычисления записанного выражения - это символьная строка, то использовать надо так

Код: sql
1.
MessageBox(Evaluate(ThisForm.m1))



MessageBox(Evaluate(ThisForm.m1)) - не работает ... Syntax Error
...
Рейтинг: 0 / 0
Макроподстановка
    #39615768
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valerii,

А пример того, что записано в Thisform.m1 можете привести? Если там просто текст, то макроподстановка вообще не нужна

Код: sql
1.
MessageBox(Thisform.m1)
...
Рейтинг: 0 / 0
Макроподстановка
    #39615799
Valerii
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ValeriiВладимирМValerii,

Вам сюда Макроподстановка

Насчет указанной ошибки - это раздел в этой статье "Особенности использования макроподстановки"

Насчет Evaluate(), если результат вычисления записанного выражения - это символьная строка, то использовать надо так

Код: sql
1.
MessageBox(Evaluate(ThisForm.m1))



MessageBox(Evaluate(ThisForm.m1)) - не работает ... Syntax Error

thisform.m1 = 'Нет выбранных значений!!!',8+48+256,'Внимание'

НО .... 'Нет выбранных значений!!!',8+48+256,'Внимание' записано в окне свойств формы для этого свойства m1.
Я грешу и на этот момент ...

Это сделано для многоязычной поддержки. То есть - есть на форме класс который при запуске формы переопределят свойства текста и объектов на форме. Если в базе нужному свойству или объекту есть значение для перевода, тогда выполняется подмена, если нет остается то что заложено по умолчанию этому свойству на форме. Сначала для MessageBox я использовал два свойства , str1 str2 но потом подумал что это изврат забивать память переменными (этих свойств столько, сколько уникальных сообщений MessageBox-ов ) и решил впихнуть все в одну переменную исключая дополнительные изменения в коде приложения.

Дергать постоянно переводы из удаленного сервера БД по-моему некрасивое/неправильное решение, так как при работе mеsagebox ы выскакивают постоянно...
Конечно я могу пойти по пути x = thisform.m1 или EVALUATE('MESSAGEBOX('+.m1+')') ...но хотелось бы разобраться с этой ситуацией...
Спасибо заранее.
...
Рейтинг: 0 / 0
Макроподстановка
    #39615811
Valerii
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ValeriiValeriiпропущено...


MessageBox(Evaluate(ThisForm.m1)) - не работает ... Syntax Error

thisform.m1 = 'Нет выбранных значений!!!',8+48+256,'Внимание'

НО .... 'Нет выбранных значений!!!',8+48+256,'Внимание' записано в окне свойств формы для этого свойства m1.
Я грешу и на этот момент ...

Это сделано для многоязычной поддержки. То есть - есть на форме класс который при запуске формы переопределят свойства текста и объектов на форме. Если в базе нужному свойству или объекту есть значение для перевода, тогда выполняется подмена, если нет остается то что заложено по умолчанию этому свойству на форме. Сначала для MessageBox я использовал два свойства , str1 str2 но потом подумал что это изврат забивать память переменными (этих свойств столько, сколько уникальных сообщений MessageBox-ов ) и решил впихнуть все в одну переменную исключая дополнительные изменения в коде приложения.

Дергать постоянно переводы из удаленного сервера БД по-моему некрасивое/неправильное решение, так как при работе mеsagebox ы выскакивают постоянно...
Конечно я могу пойти по пути x = thisform.m1 или EVALUATE('MESSAGEBOX('+.m1+')') ...но хотелось бы разобраться с этой ситуацией...

Спасибо заранее.


Thisform.m1 = []'Нет выбранных значений!!!']+',8+48+256,'+[Внимание!'] и даже так тоже ошибку выдает.
Но достаточно сделать еще x= Thisform.m1
и
MessageBox(&x) - oK!!!!
...
Рейтинг: 0 / 0
Макроподстановка
    #39615818
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да. Выбранный Вами способ реализации предполагает только макроподстановку. Без вариантов. Либо через & с дополнительной точкой, либо evaluate('messageBox()')

В выбранной Вами реализации без макроподстановки, теоретически, можно обойтись, только если предварительно "распарсить" строку на 3 отдельных параметра. Да и то, числовое значение все-равно придется через макроподстановку вычислять. Кроме того, для парсинга будут проблемы, если сам текст содержит запятые

PS: Только непонятно, почему для хранения текста выбрали свойства формы, а не поля таблицы, что для СУБД было бы логичнее. Тогда и вопроса бы не стояло. Ну, или хотя бы структурированный текстовый файл. XML, например, или INI.
...
Рейтинг: 0 / 0
Макроподстановка
    #39615821
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ValeriiThisform.m1 = []'Нет выбранных значений!!!']+',8+48+256,'+[Внимание!'] и даже так тоже ошибку выдает.
Но достаточно сделать еще x= Thisform.m1
и
MessageBox(&x) - oK!!!!

Т.е. статью по ссылке Вы так и не прочитали. И то, что проблема решается дополнительной точкой - не в курсе. Что ж. Ваш выбор...
...
Рейтинг: 0 / 0
Макроподстановка
    #39615946
Valerii
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМValeriiThisform.m1 = []'Нет выбранных значений!!!']+',8+48+256,'+[Внимание!'] и даже так тоже ошибку выдает.
Но достаточно сделать еще x= Thisform.m1
и
MessageBox(&x) - oK!!!!

Т.е. статью по ссылке Вы так и не прочитали. И то, что проблема решается дополнительной точкой - не в курсе. Что ж. Ваш выбор...

Почитал от корочки до корочки. Пробовал - не работает. Сильно не напрягался - с лету не вышло - бросил. Да и усложнять формат записи переводов в БД не хочется...

Теперь про вопрос:
PS: Только непонятно, почему для хранения текста выбрали свойства формы, а не поля таблицы, что для СУБД было бы логичнее. Тогда и вопроса бы не стояло. Ну, или хотя бы структурированный текстовый файл. XML, например, или INI.

Свойства формы я выбрал для того - чтобы:
1. Так как помимо MessageBox-ов переводятся caption классов label, commandbuton, grid..header, optionGroup..option, pageframe..page, tooltips и еще парочку , не стану все перечислять, то есть все то где есть тексты сообщений, и то что я выдернул скриптом из всех форм - их около 175 ... получилось около 3500 наименований переводов...
Это все было загнано в таблицу БД.. (я использую в качестве хранилища MS SQL Server)....!!!! Про это я забыл сказать.. настолько у меня все это по умолчанию ;-) Поэтому эта технология диктует свои условия и требования к приложению в части производительности и минимальных нагрузок.
А так как мне также не очень хочется перепахивать весь код - я дернул MessageBox скриптом и тоже вогнал их в БД, вернее то что в "()"
Теперь это значение мне нужно подставить в код форм - там где есть эти информационные сообщения. Текст очень разношерстный и нельзя как-то это все привести к парочкам фраз в добавок не только ОК или Да, нет на кнопках. То есть поэтому сот всем этим хотелось взлететь на макроподстановках. Я конечно максимально приблизился к цели - но, придется руцями вставить в код x = Thisfom.mxxx
перед самим MessageBox(&x).
INI файл - понятно - огромный , локально его потом всем обновлять - поэтому сразу отпало. потом перебор элементов формы из ини-шного файла - целый гемор, в принципе как и XML который тоже нужно парсить.
Поэтому остановился на конструкции uid,frmname,objname,objvalue,objleft,objtop,language и теперь кол-во языков в принципе неограниченно. Легко править переводы для отдельных формы .. короче преимуществ мне кажется больше.

Кстати не искал , но наверняка кто-то реализовывал эту задачу - переделать проект под много языковую поддержку ...
Тем не менее Владимир, Вам спасибо. На Ваши советы всегда можно спокойно положиться как на самые верные.
...
Рейтинг: 0 / 0
Макроподстановка
    #39615956
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ValeriiВладимирМпропущено...


Т.е. статью по ссылке Вы так и не прочитали. И то, что проблема решается дополнительной точкой - не в курсе. Что ж. Ваш выбор...

Почитал от корочки до корочки. Пробовал - не работает. Сильно не напрягался - с лету не вышло - бросил. Да и усложнять формат записи переводов в БД не хочется...
Жмем F1 и читаем
HELP& Command

& VarName[.cExpression]
...

[. cExpression]
The optional period (.) delimiter and .cExpression are used to append additional characters to a macro. cExpression appended to the macro with .cExpression can also be a macro. If cExpression is a property name, include an extra period (cExpression..PropertyName).
...
Рейтинг: 0 / 0
Макроподстановка
    #39615960
Valerii
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TValeriiпропущено...


Почитал от корочки до корочки. Пробовал - не работает. Сильно не напрягался - с лету не вышло - бросил. Да и усложнять формат записи переводов в БД не хочется...
Жмем F1 и читаем
HELP& Command

& VarName[.cExpression]
...

[. cExpression]
The optional period (.) delimiter and .cExpression are used to append additional characters to a macro. cExpression appended to the macro with .cExpression can also be a macro. If cExpression is a property name, include an extra period (cExpression..PropertyName).

И добавлял ... и что ... ничего .. тоже самое.
...
Рейтинг: 0 / 0
Макроподстановка
    #39615962
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ValeriiЯ конечно максимально приблизился к цели - но, придется руцями вставить в код x = Thisfom.mxxx
перед самим MessageBox(&x).

Можно сделать обертку
Код: sql
1.
2.
3.
MyMsgBox
lpara x
MessageBox(&x)


И автозаменой все MessageBox заменить на MyMsgBox
...
Рейтинг: 0 / 0
Макроподстановка
    #39615970
Valerii
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TValeriiЯ конечно максимально приблизился к цели - но, придется руцями вставить в код x = Thisfom.mxxx
перед самим MessageBox(&x).

Можно сделать обертку
Код: sql
1.
2.
3.
MyMsgBox
lpara x
MessageBox(&x)


И автозаменой все MessageBox заменить на MyMsgBox

Кстати да ... :-)
Я открываю форму как таблицу и и перебираю все методы и в строке где есть MessageBox $ xLine (xLine = MEMLINES(ObjProp))
меняю эту строку на свою Поэтому хотел одним заходом ...
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Макроподстановка
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]