Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) Не срабатывает ПослеОткрытия() (число прочтений - 1554 )
Чебур
Senior Member
****
Отсутствует


Ябба!

Сообщений: 314
Местоположение: г.Москва
Зарегистрирован: 14. Августа 2006
Пол: Мужской
Не срабатывает ПослеОткрытия()
15. Января 2019 :: 09:41
Печать  
Есть АРМ. Работает в режиме модальных форм.
В обработках выполняю действия в ПослеОткрытия()
Такие действия обычно однобразные:
- изменяю стиль окна (скрыть тулбары и титул)
     Окна = СоздатьОбъект("Окна");
     Окна.СтильОкна(Форма,2);
     Окна = СоздатьОбъект("Окна");
     //ОТЛАДКА: Окна.ПоказыватьПанели(флПоказатьТрассировку);
     Окна.СтильОкна(Форма,2);
     Окна.РазмерОкна(Форма,800,600);
     Окна.ЦентрироватьОкно(Форма);
     Окна = "";
- устанавливаю размеры шрифтов для атрибутов формы через РасширениеФормы, например
    РФорма = СоздатьОбъект("РасширениеФормы");
           КодШрифт = глСервис.СоздатьШрифт("Arial Narrow",24);
           РФорма.ПолучитьАтрибут("ТЗФорма").Шрифт = КодШрифт;
           РФорма.ПолучитьАтрибут("ТЗФорма").ИзменитьСтиль(2097152); //без вертикального скроллбара
     РФорма = "";

Проблема:
- иногда, закономерность установить не удалось, ощущение что ПослеОткрытия() не срабатывает - окно появляется с титулом, со стандартными шрифтами. Для тестов это дело воспрозводить не удается.

Что делать и как лечить?
  
Наверх
www  
IP записан
 
АЛьФ
FormEx developer
1c++ developer
Отсутствует



Сообщений: 1532
Местоположение: Санкт-Петербург
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Не срабатывает ПослеОткрытия()
Ответ #1 - 15. Января 2019 :: 10:00
Печать  
Можно повесить на форму текст с функцией. В этой функции при первом запуске делать инициализацию.
Вот тут можешь скачать архив с обработкой. где так сделано: http://dorex.pro/files/plandemo.zip
  

FormEx developer
Наверх
www  
IP записан
 
Чебур
Senior Member
****
Отсутствует


Ябба!

Сообщений: 314
Местоположение: г.Москва
Зарегистрирован: 14. Августа 2006
Пол: Мужской
Re: Не срабатывает ПослеОткрытия()
Ответ #2 - 15. Января 2019 :: 11:06
Печать  
ну, это как купировать синдром (варианты таких обходных решений и у меня был), но проблема-то останется. такое у меня на нескольких проектах наблюдается...
Из-за чего это происходит...?
  
Наверх
www  
IP записан
 
Чебур
Senior Member
****
Отсутствует


Ябба!

Сообщений: 314
Местоположение: г.Москва
Зарегистрирован: 14. Августа 2006
Пол: Мужской
Re: Не срабатывает ПослеОткрытия()
Ответ #3 - 15. Января 2019 :: 11:07
Печать  
.. и что тогда можно писать в ПослеОткрытия (принципиальное), а что нет? чтобы писать в ПослеОткрытия то, что сработает стопудово..?
  
Наверх
www  
IP записан
 
Чебур
Senior Member
****
Отсутствует


Ябба!

Сообщений: 314
Местоположение: г.Москва
Зарегистрирован: 14. Августа 2006
Пол: Мужской
Re: Не срабатывает ПослеОткрытия()
Ответ #4 - 15. Января 2019 :: 11:25
Печать  
и, такая отработка "инциализации" с первой обработкой функции текстового реквизита на форме, будет приводить к дополнительному передергиванию и, скорее всего, достаточно заметному для каждого очередного открываемого экрана (модальной формы), что просто некрасиво...
  
Наверх
www  
IP записан
 
Чебур
Senior Member
****
Отсутствует


Ябба!

Сообщений: 314
Местоположение: г.Москва
Зарегистрирован: 14. Августа 2006
Пол: Мужской
Re: Не срабатывает ПослеОткрытия()
Ответ #5 - 15. Января 2019 :: 15:40
Печать  
Забыл указать: релиз 2.0.5.133
  
Наверх
www  
IP записан
 
АЛьФ
FormEx developer
1c++ developer
Отсутствует



Сообщений: 1532
Местоположение: Санкт-Петербург
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Не срабатывает ПослеОткрытия()
Ответ #6 - 16. Января 2019 :: 06:34
Печать  
Чебур писал(а) 15. Января 2019 :: 11:06:
Из-за чего это происходит...?

Так фиг его знает. Сам же написал, что стабильно воспроизвести не получается.
Можно еще попробовать использовать ПослеСозданияФормы().
  

FormEx developer
Наверх
www  
IP записан
 
Чебур
Senior Member
****
Отсутствует


Ябба!

Сообщений: 314
Местоположение: г.Москва
Зарегистрирован: 14. Августа 2006
Пол: Мужской
Re: Не срабатывает ПослеОткрытия()
Ответ #7 - 16. Января 2019 :: 19:23
Печать  
попробую, но пробовал из 1С++ ФормаПриСоздании - передергивает экран, ПослеОткрытия - лучше гораздо визуально.

Попробую еще и формексовский.
я дома тестирую - пару раз за день нарываюсь стабильно на "трабл". Если поможет то можно типа какуюнить версию формекса с логами чтоб писал. а я как словлю траблу - замаячу.
  
Наверх
www  
IP записан
 
Чебур
Senior Member
****
Отсутствует


Ябба!

Сообщений: 314
Местоположение: г.Москва
Зарегистрирован: 14. Августа 2006
Пол: Мужской
Re: Не срабатывает ПослеОткрытия()
Ответ #8 - 17. Января 2019 :: 20:37
Печать  
по поводу сабжа в (0).
есть стабильный эффект воспроизводимый, Формекс загружен - ПриОткрытии выполняется загрузка Формекс (проверка создания глСервис в Попытке), потом выполняется глСервис.Версия() - проходит норм; но при этом не отрабатывает ПослеОткрытия. Возможно я где-то туплю по коду, но вот так.. если обработку вызываю второй раз - Формекс уже не загружается и все отрабатывает норм...

если есть желание/возможность то готов какую-нибудь трассировку выполнить если дадут "инструмент".
  
Наверх
www  
IP записан
 
АЛьФ
FormEx developer
1c++ developer
Отсутствует



Сообщений: 1532
Местоположение: Санкт-Петербург
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Не срабатывает ПослеОткрытия()
Ответ #9 - 18. Января 2019 :: 06:03
Печать  
Хе! Ну, так конечно. Открытие формы уже началось и перехваты на первом открытии (при загрузке компоненты) еще не работают.
В таком случае надо использовать обработку-стартер, которая сначала загрузит компоненту, а потом откроет нужную форму.
  

FormEx developer
Наверх
www  
IP записан
 
Чебур
Senior Member
****
Отсутствует


Ябба!

Сообщений: 314
Местоположение: г.Москва
Зарегистрирован: 14. Августа 2006
Пол: Мужской
Re: Не срабатывает ПослеОткрытия()
Ответ #10 - 18. Января 2019 :: 13:56
Печать  
Обработка-стартер есть, но она "миниамльный" функционал. Учту.

но почему в описанном выше случае если "перехваты не работают" - нормально отрабатывает "ПослеСозданияФормы" (если туда перенести код из "ПослеОткрытия", но после создания формы - менее красиво чисто визуально, "промаргивает" лишний раз)..?
  
Наверх
www  
IP записан
 
Чебур
Senior Member
****
Отсутствует


Ябба!

Сообщений: 314
Местоположение: г.Москва
Зарегистрирован: 14. Августа 2006
Пол: Мужской
Re: Не срабатывает ПослеОткрытия()
Ответ #11 - 18. Января 2019 :: 13:59
Печать  
... и при этом то чтовоспроизводится при старте проблем - ладно. но когда уже все подгружено ранее - в последующих обработках проскакивает... вот там пока непонятно...
  
Наверх
www  
IP записан
 
АЛьФ
FormEx developer
1c++ developer
Отсутствует



Сообщений: 1532
Местоположение: Санкт-Петербург
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Не срабатывает ПослеОткрытия()
Ответ #12 - 18. Января 2019 :: 14:39
Печать  
Не должно моргать. ПослеСозданияФормы() вызывается до показа формы на экране. Может попробовать Сервис.ОтключитьОбновлениеПриРаскраске(0)?
  

FormEx developer
Наверх
www  
IP записан
 
Чебур
Senior Member
****
Отсутствует


Ябба!

Сообщений: 314
Местоположение: г.Москва
Зарегистрирован: 14. Августа 2006
Пол: Мужской
Re: Не срабатывает ПослеОткрытия()
Ответ #13 - 18. Января 2019 :: 17:23
Печать  
Промаргивает следующим образом (форма открывается программно модально):

В левом верхнем углу проскакивает отрисовка рабочего поля формы(серфм фоном), потом "перепрыгивает" в центр формы...
если ПослеСозданияФормы закомментить, а использовать После Открытия - окно сразу "прорисовывается" по центру, без всяких перепрыгиваний.

т.е. Визуально это четко видна разница.
Хотя это промаргивание и весьма быстрое - но как-то неаккуратненько.

выполняется такой код инциализации
     Окна = СоздатьОбъект("Окна");
     Окна.СтильОкна(Форма,2);
     Окна.РазмерОкна(Форма,800,600); //стандарт под экран 800-600
     Окна.ЦентрироватьОкно(Форма);
     Окна = "";
  
Наверх
www  
IP записан
 
Чебур
Senior Member
****
Отсутствует


Ябба!

Сообщений: 314
Местоположение: г.Москва
Зарегистрирован: 14. Августа 2006
Пол: Мужской
Re: Не срабатывает ПослеОткрытия()
Ответ #14 - 18. Января 2019 :: 17:54
Печать  
Перенес загрузку-инициализацию Formex в модуль-стартер. В рабочей обработке ПослеОткрытия работает теперь норм (пока.. посмотрим..)

Но предыдущий комммент наблюдение про "промаргивание" - осталось, Сервис.ОтключитьОбновлениеПриРаскраске(0) - не влияет
  
Наверх
www  
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать