Переключение на Главную Страницу Страницы: [1] 2 3  ОтправитьПечать
Очень популярная тема (более 25 ответов) Окна, стиль и положение (число прочтений - 6569 )
recop
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 247
Местоположение: Калуга
Зарегистрирован: 06. Июня 2017
Пол: Мужской
Окна, стиль и положение
02. Февраля 2019 :: 20:07
Печать  
Что не так?
Если это неисправимый баг, то помогите решить вопрос другими средствами. Модальное окно не катит потому, что не обрабатывает события. Спасибо.

В общем, нужно немодальное окно без рамки с невозможностью интерактивно изменять размеры.

Код
Выбрать все
--
procedure ПослеОткрытия()
	// задаем стиль формы без рамки Windows
	Window = СоздатьОбъект("Окна");
	Window.СтильОкна(Form,1);
	Window.ПоложениеОкна(Form,Form.Parameter.X,Form.Parameter.Y);
	//СобратьМеню();
endprocedure // ПослеОткрытия()
 




ОткрытьФормуМодально("Обработка.КонтекстноеМеню",param):


ОткрытьФорму("Обработка.КонтекстноеМеню",param):

« Последняя редакция: 02. Февраля 2019 :: 23:01 - recop »  
Наверх
 
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 631
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: Окна, стиль и положение
Ответ #1 - 03. Февраля 2019 :: 05:44
Печать  
recop писал(а) 02. Февраля 2019 :: 20:07:
В общем, нужно немодальное окно без рамки с невозможностью интерактивно изменять размеры.

Сними с окна флаги WS_THICKFRAME 262144 и WS_BORDER 8388608
Можно еще и WS_DLGFRAME 4194304 снять, но imho с этим флагом лучше выглядит.
Совсем от рамки не получится избавиться, но будет получше и размер не изменить.
  
Наверх
www  
IP записан
 
recop
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 247
Местоположение: Калуга
Зарегистрирован: 06. Июня 2017
Пол: Мужской
Re: Окна, стиль и положение
Ответ #2 - 03. Февраля 2019 :: 06:15
Печать  
[/quote]
Сними с окна флаги WS_THICKFRAME 262144 и WS_BORDER 8388608
Совсем от рамки не получится избавиться, но будет получше и размер не изменить.
[/quote]

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


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 631
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: Окна, стиль и положение
Ответ #3 - 03. Февраля 2019 :: 06:17
Печать  
РасширениеФормы.ИзменитьСтиль(УдаляемыйСтиль,ДобавляемыйСтиль)
т.е.
РасширениеФормы.ИзменитьСтиль(262144+8388608,0)
  
Наверх
www  
IP записан
 
recop
Full Member
***
Отсутствует


1C++ rocks!

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


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 631
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: Окна, стиль и положение
Ответ #5 - 03. Февраля 2019 :: 06:32
Печать  
Нет, это только при создании формы возможно.

Можно сделать ПсевдоМодально - ПриПотереФокуса взвести Таймер на процедуру НаПереднийПлан, а в процедуре прописать Окна.НаПереднийПлан() и сброс таймера.
Ткнуть кнопку на чужой форме, конечно получится, но хоть что-то.

Атрибуты формы и контролов потыкать можно этим http://www.1cpp.ru/forum/YaBB.pl?num=1345736013/4#4

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


Гражданин Вселенной

Сообщений: 850
Местоположение: Одесса
Зарегистрирован: 07. Декабря 2007
Пол: Мужской
Re: Окна, стиль и положение
Ответ #6 - 04. Февраля 2019 :: 09:58
Печать  
Ага, или чуть обновлённая здесь: https://github.com/alyuev/1C/blob/master/Slyle_Example%202.ert
  

1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
Наверх
IP записан
 
alyuev
God Member
*****
Отсутствует


Гражданин Вселенной

Сообщений: 850
Местоположение: Одесса
Зарегистрирован: 07. Декабря 2007
Пол: Мужской
Re: Окна, стиль и положение
Ответ #7 - 04. Февраля 2019 :: 10:19
Печать  
Еще можно применить расширенный стиль WS_EX_TOOLWINDOW. И запретить закрытие по X. Тогда хотя бы форму можно будет перетаскивать за небольшой заголовок.
  

1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
Наверх
IP записан
 
recop
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 247
Местоположение: Калуга
Зарегистрирован: 06. Июня 2017
Пол: Мужской
Re: Окна, стиль и положение
Ответ #8 - 08. Февраля 2019 :: 11:53
Печать  
И всё таки без помощи Альфа (автора сего торжества) никак с места не сдвинуться:

1. Имею координаты атрибута полученные с помощью ПолучитьКоординаты(X,Y,W,H,1) относительно экрана.

2 Пытаюсь по полученным координатам установить форму:
  Окно.ПоложениеОкна(Форма,Форма.Параметр.X,Форма.Параметр.Y);

Оказывается для модальной формы координата Y соответствует заданной концепции, что совсем не распространяется на немодальную форму, в которой отсчет по оси Y идет от верха рабочей зоны окна 1с77. И компенсировать разницу статически не получится, т.к. изменив рядность панели инструментов всё летит к черту.

Какими средствами можно выставить немодальную форму по полученным координатам?

« Последняя редакция: 08. Февраля 2019 :: 17:08 - recop »  
Наверх
 
IP записан
 
ЧебурЗлоп
Senior Member
****
Отсутствует


Ябба!

Сообщений: 314
Местоположение: г.Москва
Зарегистрирован: 14. Августа 2006
Пол: Мужской
Re: Окна, стиль и положение
Ответ #9 - 08. Февраля 2019 :: 23:36
Печать  
Что значит "Модальное окно не катит потому, что не обрабатывает события"...? если речь про ОбработкуВнешнегоСобытия - нормально все ловит (только не надо из одного модального окна открывать другое)
  
Наверх
www  
IP записан
 
recop
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 247
Местоположение: Калуга
Зарегистрирован: 06. Июня 2017
Пол: Мужской
Re: Окна, стиль и положение
Ответ #10 - 09. Февраля 2019 :: 07:19
Печать  
ЧебурЗлоп писал(а) 08. Февраля 2019 :: 23:36:
Что значит "Модальное окно не катит потому, что не обрабатывает события"...? если речь про ОбработкуВнешнегоСобытия - нормально все ловит (только не надо из одного модального окна открывать другое)


Имею ввиду штатные formex, например: ПриДеактивацииОкна().

И, в любом случае, необходимо знать, как можно в 1с установить обычную форму по координатам экрана.

Случай из одного модального окна открывать другое не использовать не получится, т.к. возможно, например, вложенное меню.
  
Наверх
 
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 631
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: Окна, стиль и положение
Ответ #11 - 09. Февраля 2019 :: 14:32
Печать  
Там на самом деле еще хуже - у Первой формы могут быть панель настроек и панель закладок. Но если поразмыслить... вычислить координаты все таки можно Подмигивание

Код (C++)
Выбрать все
	Перем ЛевоКнопки,ВерхКнопки,ШиринаКнопки,ВысотаКнопки;
	Перем ШиринаОкна1,ВысотаОкна1;

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

	ВерхФормы1   = РФормы1.Верх;
	ЛевоФормы1   = РФормы1.Лево;
	ШиринаФормы1 = РФормы1.Ширина;
	ВысотаФормы1 = РФормы1.Высота;

	АтрибутКнопка = РФормы1.ПолучитьАтрибут("Кнопка");
	);

	Окна=СоздатьОбъект("Окна");
	Окна.РазмерОкна(Форма,ШиринаОкна1,ВысотаОкна1);

	ШиринаРамки = (ШиринаОкна1-ШиринаФормы1)/2;
	ВерхФормы2 = ВерхФормы1+(ВысотаОкна1-ВысотаФормы1-ШиринаРамки)+ВерхКнопки+ВысотаКнопки;
	ЛевоФормы2 = ЛевоФормы1+ШиринаРамки+ЛевоКнопки+ШиринаКнопки;

	РФормы2.УстановитьФорму(Форма2);
	РФормы2.Верх=ВерхФормы2;
	РФормы2.Лево=ЛевоФормы2;
 

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


1C++ rocks!

Сообщений: 247
Местоположение: Калуга
Зарегистрирован: 06. Июня 2017
Пол: Мужской
Re: Окна, стиль и положение
Ответ #12 - 09. Февраля 2019 :: 20:08
Печать  
Djelf Вариант был бы рабочим, если точно знать где поставить

  Окна=СоздатьОбъект("Окна");
  Окна.РазмерОкна(Форма,ШиринаОкна1,ВысотаОкна1);

чтобы форма осталась на месте. Не подскажешь?

---
Для Альфа. Необходимо в документации указать, что класс Окна затачивался ТОЛЬКО под модальные формы. Ведь столько времени отнимает пока поймешь, что не сам напортачил. Или, что будет правильно, доработать этот класс. И ещё на будущее Получить и Установить это самые, что ни на есть, противоположные вещи и сливать их в одну функцию не очень грамотно. А в целом ты молодец, все сидим на твоем расширении позволяющем хоть как-то сгладить топорный функционал 1с77. Спасибо.
  
Наверх
 
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 631
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: Окна, стиль и положение
Ответ #13 - 10. Февраля 2019 :: 05:10
Печать  
У тебя Окна еще где-то двигаются. Поищи где.
Или поставь его на место.

Код (C++)
Выбрать все
	РФормы1.ЗапретитьОбновлениеОкна(1);
	Окна=СоздатьОбъект("Окна");
	Окна.РазмерОкна(Форма,ШиринаОкна1,ВысотаОкна1);
	РФормы1.Верх=ВерхФормы1;
	РФормы1.Лево=ЛевоФормы1;
	РФормы1.ЗапретитьОбновлениеОкна(0);
 

  
Наверх
www  
IP записан
 
hogik
YaBB Newbies
*
Отсутствует



Сообщений: 1
Местоположение: Москва
Зарегистрирован: 09. Февраля 2019
Пол: Мужской
Re: Окна, стиль и положение
Ответ #14 - 10. Февраля 2019 :: 12:37
Печать  
recop писал(а) 08. Февраля 2019 :: 11:53:
Оказывается для модальной формы координата Y соответствует заданной концепции,...

Не соответствуют. В модальных окнах можно включить "Панель инструментов". И всё "летит к черту"(с). Подмигивание Координаты экрана можно использовать только для размещения "главного" окна приложения. Всё остальное следует "размещать" в относительных координатах.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 3 
ОтправитьПечать