Работа с ресурсами для оптимизации MapInfo: различия между версиями

Материал из GIS-Lab
Перейти к навигации Перейти к поиску
Нет описания правки
Нет описания правки
Строка 15: Строка 15:
'''2520 DIALOG 21, 30, 203, 98''' - здесь следует объявление номера ресурса, а также начальные координаты появления окна на экране и размеры окна.
'''2520 DIALOG 21, 30, 203, 98''' - здесь следует объявление номера ресурса, а также начальные координаты появления окна на экране и размеры окна.


'''STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU''' - объявление стилей согласно Win 32 API. Некоторые из них будут рассмотрены далее, но полное их описание можно почитать на [https://msdn.microsoft.com/ru-ru/library/windows/desktop/ms632600(v=vs.85).aspx сайте MSDN]
'''STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU''' - объявление стилей согласно Win32 API. Полное их описание можно почитать на [https://msdn.microsoft.com/ru-ru/library/windows/desktop/ms632600(v=vs.85).aspx сайте MSDN]


'''CAPTION "Закрыть таблицу"''' - Заголовок окна
'''CAPTION "Закрыть таблицу"''' - Заголовок окна
Строка 23: Строка 23:
'''FONT 8, "Helv"''' - объявление стиля и размера используемого в диалоге шрифта
'''FONT 8, "Helv"''' - объявление стиля и размера используемого в диалоге шрифта


Далее следуют объявления компонентов диалога: статической строки, списка и кнопок. Большинство их атрибутов интуитивно понятны и могут быть изменены на своё усмотрение. Единственное, что не стоит менять, так это номер исполняемого действия для элемента. В вышеуказанном диалоге для кнопки "Закрыть" этот номер равен 1, для кнопки "Отмена" - 2, а для кнопки вызова справки - 5. В случае изменения данного атрибута элемент диалога будет выполнять не те действия, которые для него были прописаны. Все остальные атрибуты возможно изменять как путём перемещения и растягивания оных с помощью мышки, так и задавая точные необходимые значения. Например, если необходимо будет поменять размер и сдвинуть какие-то кнопки, то проще это сделать путём редактирования координат и размеров, представленных в числовом виде. При этом необходимо в конце редактирования нажимать клавишу F5 для компиляции ресурса, чтобы изменения сразу вступили в силу и их можно было увидеть. В случае изменения объектов мышкой нажимать каждый раз F5 необязательно, однако, это всё равно потребуется в конце всех операций. В конечном итоге может получиться подобный результат:
Далее следуют объявления компонентов диалога. Рассмотрим только создание статической надписи:


[[Файл:Resources2.jpg|200px|thumb|center|Подправленный диалог в MapInfo]]
'''CONTROL "&Закрыть таблицы:", -1, STATIC'''
 
'''CONTROL "&Закрыть таблицы:"''' - объявление заголовка для элемента диалога. Подходит, в основном, для текстовых надписей или кнопок.
 
'''-1''' - идентификатор элемента диалога. Пожалуй, самая важная часть объявления элемента. Если для статических надписей это число всегда равно "-1", то для остальных элементов это число уникально. Или почти уникально, в зависимости от выполняемой операции. Например, если в диалоге присутствует кнопка "ОК", или "Сохранить" (для диалога "Сохранить таблицу"), или "Восстановить" (для диалога "Восстановить таблицу"), то идентификатор этой кнопки всегда будет "1", что будет означать, что пользователь указал всё необходимое в диалоге и готов применить изменения. Для "Отмены" и "Справки" идентификаторы равны 2 и 5 соответственно.
 
'''STATIC''' - тип элемента диалога. В данном случае статическая строка, на которую ничего не передаётся из другого элемента управления.
 
Далее следуют знакомые уже типы стилей оформления и координаты.
 
Элементы диалога возможно изменять как путём перемещения и растягивания оных с помощью мышки, так и задавая точные необходимые значения. Например, если необходимо будет поменять размер и сдвинуть какие-то кнопки, то проще это сделать путём редактирования координат и размеров, представленных в числовом виде. При этом необходимо в конце редактирования нажимать клавишу F5 для компиляции ресурса, чтобы изменения сразу вступили в силу и их можно было увидеть. В случае изменения объектов мышкой нажимать каждый раз F5 необязательно (так как изменения буду стразу же видны), однако, это всё равно потребуется в конце всех операций. В конечном итоге может получиться подобный результат:
 
[[Файл:Resources2.jpg|200px|thumb|center|Измененный диалог в MapInfo]]


После компиляции всех изменений, файл '''mires.dll''' необходимо сохранить. Сохранение возможно только при закрытом MapInfo.
После компиляции всех изменений, файл '''mires.dll''' необходимо сохранить. Сохранение возможно только при закрытом MapInfo.
Строка 35: Строка 47:
[[Файл:Resources3.jpg|200px|thumb|center|Окно регистрации растра]]
[[Файл:Resources3.jpg|200px|thumb|center|Окно регистрации растра]]


Чтобы его расширить, необходимо помимо растягивания главного окна диалога растянуть по длине полосы вертикальной и горизонтальной прокрутки. После этого рабочее пространство привязки увеличится. А при необходимости можно поиграться с другими элементами управления и в итоге получить что-то вроде этого:
Чтобы его расширить, необходимо помимо растягивания главного окна диалога вытянуть по длине полосы вертикальной и горизонтальной прокрутки. После этого рабочее пространство привязки увеличится. А при желании можно поиграться с другими элементами управления и в итоге получить что-то вроде этого:


[[Файл:Resources4.jpg|200px|thumb|center|Растянутое окно регистрации растра]]
[[Файл:Resources4.jpg|200px|thumb|center|Растянутое окно регистрации растра]]


{{Статья|Черновик}}
{{Статья|Черновик}}

Версия от 22:30, 5 января 2017

В этой заметке будет описан способ редактирования диалоговых окон, текстовых объектов и других объектов интерфейса, находящиеся в ресурсах динамических библиотек, подгружаемых MapInfo.

Для работы потребуется утилита Resource Hacker, которая является бесплатной и не требует установки.

Работа с диалоговыми окнами

Диалоговые окна в MapInfo - тема довольно интересная. Связано это с тем, что диалоговые окна по большей части являются статическими: их невозможно ни развернуть, ни растянуть, ни запомнить их последующее положение. Практически все окна в MapInfo небольшие по своему. Возможно, это связано с тем, чтобы окна полностью уменьшались на экране монитора даже на самом низком разрешении. Однако, с развитием технологий и увеличением разрешения экрана, размер окон остался неизменным и всё таким же неудобным. Но существуют возможности исправить эти недочёты, о чём и будет сказано в этом разделе.

После распаковки и запуска программы Resource Hacker, открываем файл mires.dll, находящийся в корневой директории с MapInfo. Для примера написания данной статьи взята последняя 32-х битная версия MapInfo, а именно 15.0. Но файл mires.dll принципиально ничем не отличается, поэтому информация будет также актуальной и для старых версий MapInfo.

После того, как файл mires.dll будет открыт, необходимо перейти в директорию Dialog. Далее, для примера, поработаем с окном "Закрыть таблицу". Для того, чтобы быстро найти нужный диалог и вдобавок узнать номер ресурса, можно воспользоваться поиском. Диалог и его описание выглядят так:

Диалог "Закрыть таблицу"

2520 DIALOG 21, 30, 203, 98 - здесь следует объявление номера ресурса, а также начальные координаты появления окна на экране и размеры окна.

STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU - объявление стилей согласно Win32 API. Полное их описание можно почитать на сайте MSDN

CAPTION "Закрыть таблицу" - Заголовок окна

LANGUAGE LANG_RUSSIAN, 0x0 - объявление используемого языка ресурса. В изменении нет необходимости

FONT 8, "Helv" - объявление стиля и размера используемого в диалоге шрифта

Далее следуют объявления компонентов диалога. Рассмотрим только создание статической надписи:

CONTROL "&Закрыть таблицы:", -1, STATIC

CONTROL "&Закрыть таблицы:" - объявление заголовка для элемента диалога. Подходит, в основном, для текстовых надписей или кнопок.

-1 - идентификатор элемента диалога. Пожалуй, самая важная часть объявления элемента. Если для статических надписей это число всегда равно "-1", то для остальных элементов это число уникально. Или почти уникально, в зависимости от выполняемой операции. Например, если в диалоге присутствует кнопка "ОК", или "Сохранить" (для диалога "Сохранить таблицу"), или "Восстановить" (для диалога "Восстановить таблицу"), то идентификатор этой кнопки всегда будет "1", что будет означать, что пользователь указал всё необходимое в диалоге и готов применить изменения. Для "Отмены" и "Справки" идентификаторы равны 2 и 5 соответственно.

STATIC - тип элемента диалога. В данном случае статическая строка, на которую ничего не передаётся из другого элемента управления.

Далее следуют знакомые уже типы стилей оформления и координаты.

Элементы диалога возможно изменять как путём перемещения и растягивания оных с помощью мышки, так и задавая точные необходимые значения. Например, если необходимо будет поменять размер и сдвинуть какие-то кнопки, то проще это сделать путём редактирования координат и размеров, представленных в числовом виде. При этом необходимо в конце редактирования нажимать клавишу F5 для компиляции ресурса, чтобы изменения сразу вступили в силу и их можно было увидеть. В случае изменения объектов мышкой нажимать каждый раз F5 необязательно (так как изменения буду стразу же видны), однако, это всё равно потребуется в конце всех операций. В конечном итоге может получиться подобный результат:

Измененный диалог в MapInfo

После компиляции всех изменений, файл mires.dll необходимо сохранить. Сохранение возможно только при закрытом MapInfo.

Работа с динамическими элементами диалога

В диалогах MapInfo не все элементы являются статическими. Некоторые элементы подгружаются посредством программного кода. Самый яркий пример - окно регистрации растра, которое является крайне неудобным для выполнения своих задач.

Окно регистрации растра

Чтобы его расширить, необходимо помимо растягивания главного окна диалога вытянуть по длине полосы вертикальной и горизонтальной прокрутки. После этого рабочее пространство привязки увеличится. А при желании можно поиграться с другими элементами управления и в итоге получить что-то вроде этого:

Растянутое окно регистрации растра
Эта страница является черновиком статьи.