Страница 1 из 2
					
				как перерисовать заголовок Frame через post() из формы?
				Добавлено: 19 Декабрь 2011, 14:53
				 Korall
				Добрый день!
Кларион 5.5, работаю без АБС.
При старте программы из базы вытаскиваю запись с названием фирмы и вписываю его в заголовок фрейма:
AppFrame{prop:text} = clip(AppFrame{prop:text}) & '. ' & clip(gl_FirmName) 
Возникла следующая задача: Юзер изменил название фирмы в соответствующей форме, нажал ОК, переопределил gl_FirmName.
 И я хочу динамически обновить заголовок AppFrame{prop:text}.
Видимо, надо посылать post(), но как указать, что посылка для AppFrame? И как задать, чтобы заголовок перерисовался?
			 
			
					
				Re: как перерисовать заголовок Frame через post() из формы?
				Добавлено: 19 Декабрь 2011, 15:13
				 Дед Пахом
				Код: Выделить всё
! Глобальная константа
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() из формы?
				Добавлено: 19 Декабрь 2011, 15:59
				 Igor
				Если без POST 
!В головном модуле глобально описать переменную
FrameRef  &WINDOW
!В процедуре FRAME  после открытия окна
FrameRef &= AppFrame     ! или  FrameRef &= 0{PROP:HANDLE}
                                      1
!В вызываемой процедуре  после открытия окна
FrameRef{PROP:text} = 'Hello, world! '
			 
			
					
				Re: как перерисовать заголовок Frame через post() из формы?
				Добавлено: 19 Декабрь 2011, 17:30
				 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() - не срабатывает
			 
			
					
				Re: как перерисовать заголовок Frame через post() из формы?
				Добавлено: 19 Декабрь 2011, 17:51
				 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-ки в главную программу, но там уже много на ней понавешено, да и другой путь должен быть мне кажется.
			 
			
					
				Re: как перерисовать заголовок Frame через post() из формы?
				Добавлено: 19 Декабрь 2011, 18:50
				 Дед Пахом
				Почему не работает первый вариант, не знаю, проверьте номер треда AppFrame, должен быть равен 1: stop(AppFrame{prop:thread}). Второй вариант: объявите FrameRef в словаре, генератор сам добавит external, dll где надо.
			 
			
					
				Re: как перерисовать заголовок Frame через post() из формы?
				Добавлено: 19 Декабрь 2011, 23:05
				 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)
Где ошибся?
Что делать?
			 
			
					
				Re: как перерисовать заголовок Frame через post() из формы?
				Добавлено: 20 Декабрь 2011, 8:33
				 Igor
				Первый вариант не проверял.
По второму варианту все работает.
Попробуй поискать в головном модуле типа AllFiles.clw описание FrameRef &WINDOW может там есть префикс к переменной FrameRef.
			 
			
					
				Re: как перерисовать заголовок Frame через post() из формы?
				Добавлено: 20 Декабрь 2011, 10:48
				 Yufil
				А так не катит? 
SetTarget(,1) 
0{Prop:Text}='....'
Display() 
SetTarget 
А event на окно не исполняется, если окно неактивно. Откуда следует, что другой тред вообще должен получить управление?  Можно, например, повесить таймер на фрейм, тогда пойдёт...
			 
			
					
				Re: как перерисовать заголовок Frame через post() из формы?
				Добавлено: 20 Декабрь 2011, 11:28
				 Дед Пахом
				Yufil писал(а):
А event на окно не исполняется, если окно неактивно. Откуда следует, что другой тред вообще должен получить управление?  Можно, например, повесить таймер на фрейм, тогда пойдёт...
Так это, у него ж фрейм, как он может быть неактивным?
 
			
					
				Re: как перерисовать заголовок Frame через post() из формы?
				Добавлено: 20 Декабрь 2011, 12:07
				 Дед Пахом
				Сейчас проверил вариант с POST(Event:ResetFrameTitle) - всё прекрасно работает. C5.5 ABC.
			 
			
					
				Re: как перерисовать заголовок Frame через post() из формы?
				Добавлено: 20 Декабрь 2011, 14:53
				 Yufil
				Так это, у него ж фрейм, как он может быть неактивным? 
Ещё как может. Правда, обычно на фрейм сажают дату-часики, там тикает таймер и всё обновляется на автомате...
			 
			
					
				Re: как перерисовать заголовок Frame через post() из формы?
				Добавлено: 20 Декабрь 2011, 15:25
				 Дед Пахом
				Вот пример, никакой таймер не обрабатывается (хотя шаблон DateTime во фрейме торчит).
			 
			
					
				Re: как перерисовать заголовок Frame через post() из формы?
				Добавлено: 20 Декабрь 2011, 15:43
				 Admin
				В чем прикол, какой в ж%$# таймер ?
Всегда помнится работало!
			 
			
					
				Re: как перерисовать заголовок Frame через post() из формы?
				Добавлено: 20 Декабрь 2011, 15:45
				 Yufil
				Да видел я тонну примеров. Только за последние лет десять это вопрос кучу раз обсуждался. И сам наталкивался... Возможно, начиная с какой-то версии вылечили. Если работает - я рад...