как перерисовать заголовок Frame через post() из формы?

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Korall
Новичок
Сообщения: 21
Зарегистрирован: 01 Сентябрь 2010, 13:45

как перерисовать заголовок Frame через post() из формы?

Сообщение Korall »

Добрый день!

Кларион 5.5, работаю без АБС.

При старте программы из базы вытаскиваю запись с названием фирмы и вписываю его в заголовок фрейма:

AppFrame{prop:text} = clip(AppFrame{prop:text}) & '. ' & clip(gl_FirmName)

Возникла следующая задача: Юзер изменил название фирмы в соответствующей форме, нажал ОК, переопределил gl_FirmName.
И я хочу динамически обновить заголовок AppFrame{prop:text}.

Видимо, надо посылать post(), но как указать, что посылка для AppFrame? И как задать, чтобы заголовок перерисовался?
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3284
Зарегистрирован: 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)
Как-то так
С уважением, ДП
Igor
Бывалый
Сообщения: 75
Зарегистрирован: 08 Июль 2005, 11:03
Откуда: Королев

Re: как перерисовать заголовок Frame через post() из формы?

Сообщение Igor »

Если без POST
!В головном модуле глобально описать переменную
FrameRef &WINDOW

!В процедуре FRAME после открытия окна
FrameRef &= AppFrame ! или FrameRef &= 0{PROP:HANDLE}
1
!В вызываемой процедуре после открытия окна
FrameRef{PROP:text} = 'Hello, world! '
Korall
Новичок
Сообщения: 21
Зарегистрирован: 01 Сентябрь 2010, 13:45

Re: как перерисовать заголовок Frame через post() из формы?

Сообщение Korall »

Спасибо!
Решил пойти по первому пути. Пока не работает.

Форма с заданием названия фирмы лежит в 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() - не срабатывает
Korall
Новичок
Сообщения: 21
Зарегистрирован: 01 Сентябрь 2010, 13:45

Re: как перерисовать заголовок Frame через post() из формы?

Сообщение Korall »

Пошел по второму пути. Пока не работает, и думаю, связано с тем, что в глобальных данных 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-ки в главную программу, но там уже много на ней понавешено, да и другой путь должен быть мне кажется.
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3284
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 48 раз
Контактная информация:

Re: как перерисовать заголовок Frame через post() из формы?

Сообщение Дед Пахом »

Почему не работает первый вариант, не знаю, проверьте номер треда AppFrame, должен быть равен 1: stop(AppFrame{prop:thread}). Второй вариант: объявите FrameRef в словаре, генератор сам добавит external, dll где надо.
С уважением, ДП
Korall
Новичок
Сообщения: 21
Зарегистрирован: 01 Сентябрь 2010, 13:45

Re: как перерисовать заголовок Frame через post() из формы?

Сообщение Korall »

По второму варианту:
сделал описание 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)

Где ошибся?

Что делать?
Igor
Бывалый
Сообщения: 75
Зарегистрирован: 08 Июль 2005, 11:03
Откуда: Королев

Re: как перерисовать заголовок Frame через post() из формы?

Сообщение Igor »

Первый вариант не проверял.
По второму варианту все работает.
Попробуй поискать в головном модуле типа AllFiles.clw описание FrameRef &WINDOW может там есть префикс к переменной FrameRef.
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Re: как перерисовать заголовок Frame через post() из формы?

Сообщение Yufil »

А так не катит?
SetTarget(,1)
0{Prop:Text}='....'
Display()
SetTarget

А event на окно не исполняется, если окно неактивно. Откуда следует, что другой тред вообще должен получить управление? Можно, например, повесить таймер на фрейм, тогда пойдёт...
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3284
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 48 раз
Контактная информация:

Re: как перерисовать заголовок Frame через post() из формы?

Сообщение Дед Пахом »

Yufil писал(а): А event на окно не исполняется, если окно неактивно. Откуда следует, что другой тред вообще должен получить управление? Можно, например, повесить таймер на фрейм, тогда пойдёт...
Так это, у него ж фрейм, как он может быть неактивным?
С уважением, ДП
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3284
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 48 раз
Контактная информация:

Re: как перерисовать заголовок Frame через post() из формы?

Сообщение Дед Пахом »

Сейчас проверил вариант с POST(Event:ResetFrameTitle) - всё прекрасно работает. C5.5 ABC.
С уважением, ДП
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Re: как перерисовать заголовок Frame через post() из формы?

Сообщение Yufil »

Так это, у него ж фрейм, как он может быть неактивным?

Ещё как может. Правда, обычно на фрейм сажают дату-часики, там тикает таймер и всё обновляется на автомате...
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3284
Зарегистрирован: 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() из формы?

Сообщение Admin »

В чем прикол, какой в ж%$# таймер ?
Всегда помнится работало!
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Re: как перерисовать заголовок Frame через post() из формы?

Сообщение Yufil »

Да видел я тонну примеров. Только за последние лет десять это вопрос кучу раз обсуждался. И сам наталкивался... Возможно, начиная с какой-то версии вылечили. Если работает - я рад...
Ответить