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

Материал из GIS-Lab
Перейти к навигации Перейти к поиску

В этой заметке будет описан способ редактирования диалоговых окон, текстовых объектов и других объектов интерфейса, находящиеся в ресурсах динамических библиотек, подгружаемых 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 не все элементы являются статическими. Некоторые элементы подгружаются посредством программного кода. Самый яркий пример - окно регистрации растра, которое является крайне неудобным для выполнения своих задач.

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

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

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