как перерисовать заголовок Frame через post() из формы?
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
как перерисовать заголовок Frame через post() из формы?
Добрый день!
Кларион 5.5, работаю без АБС.
При старте программы из базы вытаскиваю запись с названием фирмы и вписываю его в заголовок фрейма:
AppFrame{prop:text} = clip(AppFrame{prop:text}) & '. ' & clip(gl_FirmName)
Возникла следующая задача: Юзер изменил название фирмы в соответствующей форме, нажал ОК, переопределил gl_FirmName.
И я хочу динамически обновить заголовок AppFrame{prop:text}.
Видимо, надо посылать post(), но как указать, что посылка для AppFrame? И как задать, чтобы заголовок перерисовался?
Кларион 5.5, работаю без АБС.
При старте программы из базы вытаскиваю запись с названием фирмы и вписываю его в заголовок фрейма:
AppFrame{prop:text} = clip(AppFrame{prop:text}) & '. ' & clip(gl_FirmName)
Возникла следующая задача: Юзер изменил название фирмы в соответствующей форме, нажал ОК, переопределил gl_FirmName.
И я хочу динамически обновить заголовок AppFrame{prop:text}.
Видимо, надо посылать post(), но как указать, что посылка для AppFrame? И как задать, чтобы заголовок перерисовался?
- Дед Пахом
- Старичок
- Сообщения: 3285
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 15 раз
- Поблагодарили: 48 раз
- Контактная информация:
Re: как перерисовать заголовок Frame через post() из формы?
Код: Выделить всё
! Глобальная константа
Event:ResetFrameTitle EQUATE(Event:User+33)
! Заголовок фрейма без названия фирмы
Glo:FrameTitle STRING('Моя крутая программа')
! код в AppFrame
CASE EVENT()
OF Event:ResetFrameTitle
AppFrame{prop:text} = Glo:FrameTitle & '. ' & clip(gl_FirmName)
! код в UpdateFirm
POST(Event:ResetFrameTitle,,1)
С уважением, ДП
Re: как перерисовать заголовок Frame через post() из формы?
Если без POST
!В головном модуле глобально описать переменную
FrameRef &WINDOW
!В процедуре FRAME после открытия окна
FrameRef &= AppFrame ! или FrameRef &= 0{PROP:HANDLE}
1
!В вызываемой процедуре после открытия окна
FrameRef{PROP:text} = 'Hello, world! '
!В головном модуле глобально описать переменную
FrameRef &WINDOW
!В процедуре FRAME после открытия окна
FrameRef &= AppFrame ! или FrameRef &= 0{PROP:HANDLE}
1
!В вызываемой процедуре после открытия окна
FrameRef{PROP:text} = 'Hello, world! '
Re: как перерисовать заголовок Frame через post() из формы?
Спасибо!
Решил пойти по первому пути. Пока не работает.
Форма с заданием названия фирмы лежит в dll-ке, там в глобальных данных объявил событие Event:ResetFrameTitle EQUATE(Event:User+33)
в главной программе тоже в глобальных данных продублировал событие Event:ResetFrameTitle EQUATE(Event:User+33), причем external,dll(dll_mode) дает ошибку, так что просто продублировал
Event:ResetFrameTitle EQUATE(Event:User+33)
Но в цикле case EVENT() у AppFrame почему -то это событие не приходит: ставлю message() - не срабатывает
Решил пойти по первому пути. Пока не работает.
Форма с заданием названия фирмы лежит в dll-ке, там в глобальных данных объявил событие Event:ResetFrameTitle EQUATE(Event:User+33)
в главной программе тоже в глобальных данных продублировал событие Event:ResetFrameTitle EQUATE(Event:User+33), причем external,dll(dll_mode) дает ошибку, так что просто продублировал
Event:ResetFrameTitle EQUATE(Event:User+33)
Но в цикле case EVENT() у AppFrame почему -то это событие не приходит: ставлю message() - не срабатывает
Re: как перерисовать заголовок Frame через post() из формы?
Пошел по второму пути. Пока не работает, и думаю, связано с тем, что в глобальных данных dll-ки объявил FrameRef &WINDOW
и в форме вызвал FrameRef{PROP:text} = 'Hello, world!'
но в главной программе при попытке в секции глобальных данных написать
FrameRef &WINDOW external,dll(dll_mode)
компилятор дает ошибку, если же просто пишу FrameRef &WINDOW, то ошибки компиляции нет, но и результата тоже нет.
Видимо, не могу видимость обеспечить в главной программе для переменной FrameRef &WINDOW
и для первого случая Event:ResetFrameTitle EQUATE(Event:User+33)
Понятно, что форму можно перетащить из dl-ки в главную программу, но там уже много на ней понавешено, да и другой путь должен быть мне кажется.
и в форме вызвал FrameRef{PROP:text} = 'Hello, world!'
но в главной программе при попытке в секции глобальных данных написать
FrameRef &WINDOW external,dll(dll_mode)
компилятор дает ошибку, если же просто пишу FrameRef &WINDOW, то ошибки компиляции нет, но и результата тоже нет.
Видимо, не могу видимость обеспечить в главной программе для переменной FrameRef &WINDOW
и для первого случая Event:ResetFrameTitle EQUATE(Event:User+33)
Понятно, что форму можно перетащить из dl-ки в главную программу, но там уже много на ней понавешено, да и другой путь должен быть мне кажется.
- Дед Пахом
- Старичок
- Сообщения: 3285
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 15 раз
- Поблагодарили: 48 раз
- Контактная информация:
Re: как перерисовать заголовок Frame через post() из формы?
Почему не работает первый вариант, не знаю, проверьте номер треда AppFrame, должен быть равен 1: stop(AppFrame{prop:thread}). Второй вариант: объявите FrameRef в словаре, генератор сам добавит external, dll где надо.
С уважением, ДП
Re: как перерисовать заголовок Frame через post() из формы?
По второму варианту:
сделал описание FrameRef &WINDOW через словарь в базовой DLL, там у меня все определения сидят, и в главной программе тоже FrameRef в словаре описал, и в Storage Class выбрал "EXTERNAL - DLL" (как обычно для глобальных переменных), но при компиляции главной программы получаю синтаксическую ошибку invalid data declaration attribute
на строчке с этой переменной (вторая строчка):
gl_Flag_User BYTE,EXTERNAL,DLL(dll_mode)
FrameRef &WINDOW,EXTERNAL,DLL(dll_mode)
gl_NFerm SHORT,EXTERNAL,DLL(dll_mode)
Где ошибся?
Что делать?
сделал описание FrameRef &WINDOW через словарь в базовой DLL, там у меня все определения сидят, и в главной программе тоже FrameRef в словаре описал, и в Storage Class выбрал "EXTERNAL - DLL" (как обычно для глобальных переменных), но при компиляции главной программы получаю синтаксическую ошибку invalid data declaration attribute
на строчке с этой переменной (вторая строчка):
gl_Flag_User BYTE,EXTERNAL,DLL(dll_mode)
FrameRef &WINDOW,EXTERNAL,DLL(dll_mode)
gl_NFerm SHORT,EXTERNAL,DLL(dll_mode)
Где ошибся?
Что делать?
Re: как перерисовать заголовок Frame через post() из формы?
Первый вариант не проверял.
По второму варианту все работает.
Попробуй поискать в головном модуле типа AllFiles.clw описание FrameRef &WINDOW может там есть префикс к переменной FrameRef.
По второму варианту все работает.
Попробуй поискать в головном модуле типа AllFiles.clw описание FrameRef &WINDOW может там есть префикс к переменной FrameRef.
Re: как перерисовать заголовок Frame через post() из формы?
А так не катит?
SetTarget(,1)
0{Prop:Text}='....'
Display()
SetTarget
А event на окно не исполняется, если окно неактивно. Откуда следует, что другой тред вообще должен получить управление? Можно, например, повесить таймер на фрейм, тогда пойдёт...
SetTarget(,1)
0{Prop:Text}='....'
Display()
SetTarget
А event на окно не исполняется, если окно неактивно. Откуда следует, что другой тред вообще должен получить управление? Можно, например, повесить таймер на фрейм, тогда пойдёт...
- Дед Пахом
- Старичок
- Сообщения: 3285
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 15 раз
- Поблагодарили: 48 раз
- Контактная информация:
Re: как перерисовать заголовок Frame через post() из формы?
Так это, у него ж фрейм, как он может быть неактивным?Yufil писал(а): А event на окно не исполняется, если окно неактивно. Откуда следует, что другой тред вообще должен получить управление? Можно, например, повесить таймер на фрейм, тогда пойдёт...
С уважением, ДП
- Дед Пахом
- Старичок
- Сообщения: 3285
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 15 раз
- Поблагодарили: 48 раз
- Контактная информация:
Re: как перерисовать заголовок Frame через post() из формы?
Сейчас проверил вариант с POST(Event:ResetFrameTitle) - всё прекрасно работает. C5.5 ABC.
С уважением, ДП
Re: как перерисовать заголовок Frame через post() из формы?
Так это, у него ж фрейм, как он может быть неактивным?
Ещё как может. Правда, обычно на фрейм сажают дату-часики, там тикает таймер и всё обновляется на автомате...
Ещё как может. Правда, обычно на фрейм сажают дату-часики, там тикает таймер и всё обновляется на автомате...
- Дед Пахом
- Старичок
- Сообщения: 3285
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 15 раз
- Поблагодарили: 48 раз
- Контактная информация:
Re: как перерисовать заголовок Frame через post() из формы?
Вот пример, никакой таймер не обрабатывается (хотя шаблон DateTime во фрейме торчит).
- Вложения
-
- FrameTitle.zip
- (1.6 МБ) 289 скачиваний
С уважением, ДП
- Admin
- Администратор
- Сообщения: 4010
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 53 раза
- Поблагодарили: 33 раза
- Контактная информация:
Re: как перерисовать заголовок Frame через post() из формы?
В чем прикол, какой в ж%$# таймер ?
Всегда помнится работало!
Всегда помнится работало!
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Re: как перерисовать заголовок Frame через post() из формы?
Да видел я тонну примеров. Только за последние лет десять это вопрос кучу раз обсуждался. И сам наталкивался... Возможно, начиная с какой-то версии вылечили. Если работает - я рад...