lintest / VanessaExt

Библиотека внешних компонент 1С Native API для управления окнами, процессами. Составная часть инструмента тестирования прикладных решений Vanessa Automation.
BSD 3-Clause "New" or "Revised" License
98 stars 14 forks source link

Поиск кнопки на элементе формы #50

Closed lintest closed 3 years ago

lintest commented 3 years ago

https://its.1c.ru/db/v8319doc#bookmark:dev:TI000001896

ФайлРесурса = "v8res://core83/edtButtons.zip";
ВременныйФайл = ПолучитьИмяВременногоФайла();
КопироватьФайл(ФайлРесурса, ВременныйФайл);

Набор картинок представляет собой архив zip-формата, который содержит картинки, описание которых приводится в файле манифеста (manifest.xml), расположенной в этом же архиве (подробнее см. здесь). Картинка может относиться к одному из вариантов разрешения экрана:

Имя каждой картинки может быть любым, а соотношение между именем картинки и разрешением указывается в манифесте. Соотношение размеров картинок в архиве можно рассчитать, базируясь на размере картинки для масштаба 100%. Так, если при масштабе 100% размер картинки равен 16 точек, то можно получить следующий набор размеров картинок для разных масштабов отображения:

lintest commented 3 years ago
ФайлРесурса = "v8res://core83/edtButtons.zip";
ВременныйФайл = ПолучитьИмяВременногоФайла();
КопироватьФайл(ФайлРесурса, ВременныйФайл);

ОтборКартинки = Новый Соответствие;
ОтборРазмеров = Новый Соответствие;
ОтборРазмеров.Вставить(14, "bldpi");
ОтборРазмеров.Вставить(16, "ldpi");
ОтборРазмеров.Вставить(20, "aldpi");
ОтборРазмеров.Вставить(24, "mdpi");
ОтборРазмеров.Вставить(28, "amdpi");
ОтборРазмеров.Вставить(32, "hdpi");
ОтборРазмеров.Вставить(48, "xdpi");
ОтборРазмеров.Вставить(64, "udpi");
ЗначениеОтбора = ОтборРазмеров.Получить(ВысотаКартинки);
ОтборКартинки.Вставить("screenDensity", ЗначениеОтбора);

Картинка = Новый Картинка(ВременныйФайл);
УдалитьФайлы(ВременныйФайл);
ДвоичныеДанныеКартинки = Картинка.ПолучитьДвоичныеДанные(Ложь, ОтборКартинки);
Pr-Mex commented 3 years ago

Ого ты провел исследование

lintest commented 3 years ago

https://docs.microsoft.com/en-us/windows/win32/api/shellscalingapi/nf-shellscalingapi-getscalefactorformonitor

GetScaleFactorForMonitor function (shellscalingapi.h)

lintest commented 3 years ago

Нужно вычислять масштаб для монитора

lintest commented 3 years ago

Новое свойство Масштаб и метод ПолучитьМасштаб() для определения масштаба экрана. Метод может принимать идентификатор окна в качестве параметра. Возвращает масштаб в процентах от 100 до 400.

ОписаниеОповещения = Новый ОписаниеОповещения("ПолученМасштабЭкрана", ЭтотОбъект);
ВнешняяКомпонента.НачатьВызовПолучитьМасштаб(ОписаниеОповещения, ИдентификаторОкна);