Переключение на Главную Страницу Страницы: [1]  ОтправитьПечать
Очень популярная тема (более 25 ответов) Прыгает окно при изменении высоты (число прочтений - 4709 )
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Прыгает окно при изменении высоты
16. Февраля 2019 :: 20:44
Печать  
Выводится модальное окно:

Код (C++)
Выбрать все
ОткрытьФормуМодально("Обработка.НашаОбработка", лКонтекст);
 




В самой форме при нажатии на кнопку срабатывает вот такой код, который изменяет высоту формы:

Код (C++)
Выбрать все
	мРасширение = СоздатьОбъект("РасширениеФормы");
	лВысота = мРасширение.Высота;
	Если лВысота = 200 Тогда
		мРасширение.Высота = 400;
	Иначе
		мРасширение.Высота = 200;
	КонецЕсли;
 



Это приводит к тому, что окно "прыгает" по экрану.
Так как оно модальное, и 1С-ка видимо его центрирует на экране.

Как можно сделать, чтобы положение окна не менялось?
Чтобы верх окна оставался на одном и том же месте при изменении размера?

Пробовал запомнить координаты верха окна и после изменения высоты восстановить это положение.
Однако оказалось, что для модального окна Верх = 0.

Можно как-то решить проблему?
  
Наверх
ICQ  
IP записан
 
АЛьФ
FormEx developer
1c++ developer
Отсутствует



Сообщений: 1537
Местоположение: Санкт-Петербург
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Прыгает окно при изменении высоты
Ответ #1 - 18. Февраля 2019 :: 07:02
Печать  
Вроде как убрал центрирование в последнем релизе.
  

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



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Прыгает окно при изменении высоты
Ответ #2 - 18. Февраля 2019 :: 14:31
Печать  
АЛьФ писал(а) 18. Февраля 2019 :: 07:02:
Вроде как убрал центрирование в последнем релизе.


Имеется ввиду версия 2.0.5.142 от 15.02.2019?

Я именно на ней и проверял.
При выполнении команды "мРасширение.Высота = 200;" окошко прыгает вниз, а по команде "мРасширение.Высота = 400;" - вверх.

Так что похоже что оно все-таки центрируется.

Может быть это центрирование как-то включается\отключается?
  
Наверх
ICQ  
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Прыгает окно при изменении высоты
Ответ #3 - 18. Февраля 2019 :: 15:16
Печать  
И еще вопрос.
Можно ли создать форму невидимую, вывести в нее все что нужно, а потом показать в модальном режиме отдельной командой?
  
Наверх
ICQ  
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 631
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: Прыгает окно при изменении высоты
Ответ #4 - 18. Февраля 2019 :: 15:37
Печать  
es3000 писал(а) 18. Февраля 2019 :: 14:31:
АЛьФ писал(а) 18. Февраля 2019 :: 07:02:
Вроде как убрал центрирование в последнем релизе.


Имеется ввиду версия 2.0.5.142 от 15.02.2019?

Я именно на ней и проверял.
При выполнении команды "мРасширение.Высота = 200;" окошко прыгает вниз, а по команде "мРасширение.Высота = 400;" - вверх.

Так что похоже что оно все-таки центрируется.

Может быть это центрирование как-то включается\отключается?


Центровка работает только для модальной формы.
Это повторение стандартного поведения окон 1с, это не ошибка, так задумано.

У меня при РасширениеФормы.Высота и РасширениеФормы.Ширина в не модальном режиме формы ничего не прыгает.
  
Наверх
www  
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Прыгает окно при изменении высоты
Ответ #5 - 18. Февраля 2019 :: 15:57
Печать  
Djelf писал(а) 18. Февраля 2019 :: 15:37:
У меня при РасширениеФормы.Высота и РасширениеФормы.Ширина в не модальном режиме формы ничего не прыгает.


У меня модальное окно.
  
Наверх
ICQ  
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 631
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: Прыгает окно при изменении высоты
Ответ #6 - 18. Февраля 2019 :: 16:08
Печать  
es3000 писал(а) 18. Февраля 2019 :: 15:57:
Djelf писал(а) 18. Февраля 2019 :: 15:37:
У меня при РасширениеФормы.Высота и РасширениеФормы.Ширина в не модальном режиме формы ничего не прыгает.


У меня модальное окно.

Тогда так и должно быть.
Если отключить центровку по-умолчанию то у ВСЕХ модальное окно будет прыгать и непредсказуемо как.
Это слишком серьезное изменение.
Я категорически против.
  
Наверх
www  
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Прыгает окно при изменении высоты
Ответ #7 - 18. Февраля 2019 :: 16:25
Печать  
Djelf писал(а) 18. Февраля 2019 :: 16:08:
Тогда так и должно быть.
Если отключить центровку по-умолчанию то у ВСЕХ модальное окно будет прыгать и непредсказуемо как.
Это слишком серьезное изменение.
Я категорически против.


А если сделать возможность отмены центровки у конкретного окна?

Например, вывели командой "ОткрытьФормуМодально" форму.
Оно от-центрировалось.
А дальше программист при вызове какого-либо метода, например при нажатии кнопки, может отменить центровку и делать с формой что ему угодно.
Это уже на его ответственности.

Типа вот так:

Код (C++)
Выбрать все
Процедура ПриНажатии_ВывестиДопСведения()
   РасшФормы.ОтключитьЦентровку();
   РасшФормы.Высота = 500;
КонецПроцедуры
 



Так можно сделать?
  
Наверх
ICQ  
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Прыгает окно при изменении высоты
Ответ #8 - 19. Февраля 2019 :: 07:28
Печать  
Я хотел сделать что-то типа стандартного окна ошибки с кнопкой "Сведения...":

 

Пытался реализовать это путем изменения высоты окна.
Раз уж этот способ не работает, может быть как-то по другому можно сделать?

Посоветуйте пожалуйста что-нибудь?
  
Наверх
ICQ  
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 631
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: Прыгает окно при изменении высоты
Ответ #9 - 19. Февраля 2019 :: 07:40
Печать  
На 142м Formex у меня не дергается.
Код
Выбрать все
	Ширина= 0; Высота= 0; Лево  = 0; Верх  = 0;

	РасширениеФормы.ЗапретитьОбновлениеОкна(1);
	Окна.ПоложениеОкна(Форма,Лево,Верх);
	Окна.РазмерОкна(Форма,Ширина,Высота);
	Окна.РазмерОкна(Форма,Ширина,Высота+200);
	Окна.ПоложениеОкна(Форма,Лево,Верх);
	РасширениеФормы.ЗапретитьОбновлениеОкна(0);
 

  
Наверх
www  
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Прыгает окно при изменении высоты
Ответ #10 - 19. Февраля 2019 :: 09:34
Печать  
Djelf писал(а) 19. Февраля 2019 :: 07:40:
     Окна.ПоложениеОкна(Форма,Лево,Верх);


Ругается на "Окна".
Это объект? Его создавать надо?

  
Наверх
ICQ  
IP записан
 
recop
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 247
Местоположение: Калуга
Зарегистрирован: 06. Июня 2017
Пол: Мужской
Re: Прыгает окно при изменении высоты
Ответ #11 - 19. Февраля 2019 :: 10:15
Печать  
es3000 писал(а) 19. Февраля 2019 :: 09:34:
Djelf писал(а) 19. Февраля 2019 :: 07:40:
     Окна.ПоложениеОкна(Форма,Лево,Верх);


Ругается на "Окна".
Это объект? Его создавать надо?



Код (C++)
Выбрать все
Функция ...
  Перем Лево,Верх;
  ...
  Окна=СоздатьОбъект("Окна");
  Окна.ПоложениеОкна(Форма,Лево,Верх);
  ...
КонецФункции
 

  
Наверх
 
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Прыгает окно при изменении высоты
Ответ #12 - 19. Февраля 2019 :: 11:36
Печать  
Спасибо! Разобрался.
Я создал объект "Окна" в глобальном модуле.
  
Наверх
ICQ  
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Прыгает окно при изменении высоты
Ответ #13 - 19. Февраля 2019 :: 11:38
Печать  
Интересно, что "РасширениеФормы" и "Окна" выдают разные координаты текущего модального окна.

Например:
- "Окна": Верх: 363.   Высота = 511
- "Расширение": Верх: .   Высота = 486

У "Расширения" Верх вообще пустой.

Почему координаты отличаются?
Это ошибка?
Или так и должно быть?
  
Наверх
ICQ  
IP записан
 
АЛьФ
FormEx developer
1c++ developer
Отсутствует



Сообщений: 1537
Местоположение: Санкт-Петербург
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Прыгает окно при изменении высоты
Ответ #14 - 19. Февраля 2019 :: 12:02
Печать  
es3000 писал(а) 19. Февраля 2019 :: 11:38:
Интересно, что "РасширениеФормы" и "Окна" выдают разные координаты текущего модального окна.

Например:
- "Окна": Верх: 363.   Высота = 511
- "Расширение": Верх: .   Высота = 486

У "Расширения" Верх вообще пустой.

Почему координаты отличаются?
Это ошибка?
Или так и должно быть?


Координаты в расширении формы зависят от места вызова (создано ли уже окно и какой момент создания).
  

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



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Прыгает окно при изменении высоты
Ответ #15 - 19. Февраля 2019 :: 12:59
Печать  
АЛьФ писал(а) 19. Февраля 2019 :: 12:02:
Координаты в расширении формы зависят от места вызова (создано ли уже окно и какой момент создания).


А в чем будет разница?
Что расширение формы покажет, в следующих случаях:
- в модуле формы
- в процедуре "ПриОткрытии"
- в произвольной процедуре в уже открытой форме?

  
Наверх
ICQ  
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Прыгает окно при изменении высоты
Ответ #16 - 19. Февраля 2019 :: 13:01
Печать  
АЛьФ писал(а) 19. Февраля 2019 :: 12:02:
Координаты в расширении формы зависят от места вызова (создано ли уже окно и какой момент создания).


Я в приведенном примере вызывал обе функции определения координат ("РасширениеФормы" и "Окна") в уже открытой форме в процедуре по нажатию кнопки.
То есть окно уже создано и отображено на экране.
И разница есть! Почему?



  
Наверх
ICQ  
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 631
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: Прыгает окно при изменении высоты
Ответ #17 - 19. Февраля 2019 :: 14:13
Печать  
Потому!
Потому что размер окна не равен клиентской области окна Подмигивание
https://docs.microsoft.com/ru-ru/cpp/mfc/frame-windows?view=vs-2017
  
Наверх
www  
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Прыгает окно при изменении высоты
Ответ #18 - 19. Февраля 2019 :: 15:04
Печать  
Djelf писал(а) 19. Февраля 2019 :: 14:13:
Потому!
Потому что размер окна не равен клиентской области окна Подмигивание
https://docs.microsoft.com/ru-ru/cpp/mfc/frame-windows?view=vs-2017


Это понятно.
А какой из объектов ("РасширениеФормы" или "Окна") работает с клиентской частью формы?
В документации вроде ничего об этом не написано.

Я ожидал, что оба этих объекта работают именно с формой в целом, а не с внутренней частью.

  
Наверх
ICQ  
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 631
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: Прыгает окно при изменении высоты
Ответ #19 - 19. Февраля 2019 :: 15:51
Печать  
es3000 писал(а) 19. Февраля 2019 :: 15:04:
Я ожидал, что оба этих объекта работают именно с формой в целом, а не с внутренней частью.

И как бы ты тогда позиционировал АтрибутФормы относительно Окна, а не самой Формы? Если он позиционируется относительно Формы, а не Окна?
На Окне может быть панель инструментов и вкладки, а их можно включать/выключать. И? Будешь все эти сдвиги вычислять в 1С?

  
Наверх
www  
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Прыгает окно при изменении высоты
Ответ #20 - 19. Февраля 2019 :: 18:02
Печать  
Djelf писал(а) 19. Февраля 2019 :: 15:51:
И как бы ты тогда позиционировал АтрибутФормы относительно Окна, а не самой Формы? Если он позиционируется относительно Формы, а не Окна?
На Окне может быть панель инструментов и вкладки, а их можно включать/выключать. И? Будешь все эти сдвиги вычислять в 1С?

Понятно.
Значит, "Расширение формы" работает с внутренней частью формы.

  
Наверх
ICQ  
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Прыгает окно при изменении высоты
Ответ #21 - 19. Февраля 2019 :: 18:04
Печать  
А можно ли сделать так, чтобы уменьшить высоту формы до ее отображения на экране?
Пробовал в методе "ПриОткрытии" - не срабатывает.
Есть какой-нибудь способ?
  
Наверх
ICQ  
IP записан
 
recop
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 247
Местоположение: Калуга
Зарегистрирован: 06. Июня 2017
Пол: Мужской
Re: Прыгает окно при изменении высоты
Ответ #22 - 19. Февраля 2019 :: 18:16
Печать  
es3000 писал(а) 19. Февраля 2019 :: 18:04:
А можно ли сделать так, чтобы уменьшить высоту формы до ее отображения на экране?
Пробовал в методе "ПриОткрытии" - не срабатывает.
Есть какой-нибудь способ?



Иногда помогает:
Код (C++)
Выбрать все
var РасшФормы,Window ;

--
procedure ПриОткрытии()
	...
	РасшФормы=СоздатьОбъект("РасширениеФормы");
	РасшФормы.УстановитьФорму(Форма);
	РасшФормы.Прозрачность=0;

	_Форма=СоздатьОбъект("Форма");
	_Форма.УстановитьФорму(Форма);

endprocedure // ПриОткрытии()

--
procedure ФормаПриСоздании(_Форма)
	...
	Window = СоздатьОбъект("Окна");
	//Window.WindowsStyle(Форма,1);
	Window.WindowsSize(Форма,Форма.Параметр.Ширина,Форма.Параметр.Высота;
	...
endprocedure // ФормаПриСоздании()

--
procedure ПослеОткрытия()
	...
	Window.WindowsPos(Форма,Форма.Параметр.X,Форма.Параметр.Y);
	РасшФормы.Прозрачность=255;
	...
endprocedure // ПослеОткрытия()
 

  
Наверх
 
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Прыгает окно при изменении высоты
Ответ #23 - 19. Февраля 2019 :: 18:41
Печать  
Сработало, Спасибо!

А что за объект "Форма"?
Для чего эти две строки:
Код (C++)
Выбрать все
_Форма=СоздатьОбъект("Форма");
_Форма.УстановитьФорму(Форма);
 


  
Наверх
ICQ  
IP записан
 
recop
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 247
Местоположение: Калуга
Зарегистрирован: 06. Июня 2017
Пол: Мужской
Re: Прыгает окно при изменении высоты
Ответ #24 - 19. Февраля 2019 :: 19:06
Печать  
ФормаПриСоздании() без них не срабатывает.
  
Наверх
 
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Прыгает окно при изменении высоты
Ответ #25 - 20. Февраля 2019 :: 11:58
Печать  
Еще вопрос.
У выводимого модального окна в конфигураторе включен флажок "Изменять размер".
Однако, когда окно отображено, его размер не меняется.
Можно сделать, чтобы менялся размер окна?
« Последняя редакция: 20. Февраля 2019 :: 17:54 - es3000 »  
Наверх
ICQ  
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Прыгает окно при изменении высоты
Ответ #26 - 21. Февраля 2019 :: 11:14
Печать  
Получается, размер окна "растягивать" нельзя?
  
Наверх
ICQ  
IP записан
 
RomanTerra
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 10
Зарегистрирован: 21. Августа 2018
Пол: Мужской
Re: Прыгает окно при изменении высоты
Ответ #27 - 26. Февраля 2019 :: 08:20
Печать  
на FormEx 2.0.5.142 наблюдаю вот такой баг:

если из модального окна открыть еще одно модальное окно
ОткрытьФормуМодально("Обработка.ХХХ",Конт)

то верхняя его часть "уезжает" за пределы рабочей области главного окна 1С

приходится второе модальное окно ПослеОткрытия() дополнительно центрировать
Окна.ЦентрироватьОкно(Форма)

не критично конечно, но на 2.0.5.141 такого не было
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 
ОтправитьПечать