0

Тема: Правка "невидимых" элементов управления

Правка невидимых элементов управления
Пример изменения размеров и координат

Правка "невидимых" элементов управления

Введение
---------------

Наверняка вам знакома такая ситуация: программа, которую вы собрались переводить, не содержит визуальных ресурсов. Открыв такой файл в редакторе ресурсов, вы кроме манифеста и информации о версии ничего больше не увидите. Такие программы написаны на С/С++. Формирование элементов интерфейса таких приложений осуществляется средствами WinAPI, а в последнее время разработчики стали использовать библиотеки виджетов (QT), которые подключаются к среде разработки в виде дополнительных компонентов. Ясно одно, все строки в подобных программах жестко-закодированные и перевод вполне можно сделать при помощи редактора Radialix и дизассемблера IDA. Есть и другие инструменты, но они уже давно не обновлялись и устарели. Также перевод можно сделать вручную в одном НЕХ-редакторе. Но я не буду касаться вопроса перевода строк, как и чем это делать, каждый для себя решит сам. Хочу остановиться на таком моменте: после перевода может случится так, что переведенный текст не помещается в отведенные границы элементов управления. Изменить же размеры и координаты этих элементов нет возможности, так как они недоступны в визуальном виде, редакторы попросту их не видят.

Как же быть?

Можно пойти простым путем и сделать сокращения в переводе, но это самый крайний случай и поверьте, такой перевод ухудшает восприятие программы, особенно, если таких строк много.  Правка "невидимых" элементов управления

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

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

К сожалению, общих алгоритмов решения таких задач нет, каждая программа индивидуальна и в каждом конкретном случае требует всестороннего анализа. На следующем примере перевода плагина Neat Video я лишь постараюсь вас ознакомить с одним из частных случаев. Возможно, если где-то вам встретится подобная ситуация, то вы сможете достойно из неё выйти.

Инструменты
---------------------

При работе над переводом плагина Neat Video я использовал:
1) редактор Radialix с плагином RDMAP к дизассемблеру IDA (и конечно сам дизассемблер);
2) утилита WinSpy++ v1.7;
3) НЕХ-редактор WinHex (хотя можно обойтись без него и сделать все в программе IDA).

Важное замечание: нам потребуется работать с дизассемблированным кодом в программе IDA, поэтому после создания списка жестко-закодированных строк, необходимо сохранить проект IDA. Я всегда так поступаю на тот случай, если вдруг потребуется решать нетривиальные задачи, как например эта. Тогда можно быстро, прямо из проекта Radialix, переходить в проект IDA по выбранному адресу или ссылке. Это очень удобно.

Правка
-----------

После перевода Neat Video и его проверки, в одном из окошек интерфейса обнаружился небольшой баг - строка оказалась обрезанной (не поместилось две буквы  Правка "невидимых" элементов управления

Рис. 1

Правка "невидимых" элементов управления

В данном случае, элементом управления с этой надписью является элемент CheckBox (Флажок). Если его сдвинуть немного влево и увеличить ширину, то текст надписи поместится. Для симметричности придется также подвинуть и верхний элемент с надписью Высокое качество. Самый простой способ найти желаемый элемент в коде программы - это произвести поиск по его ID-номеру. Выяснить этот номер может помочь утилита WinSpy++. Не прекращая работу программы (плагина) запустим утилиту, захватим мышкой прицел и наведем на этот элемент. Утилита отобразит свойства выбранного элемента:

Рис. 2

Правка "невидимых" элементов управления

Но тут нас ждет неудача. Как видите, здесь значение свойства Control ID равно нулю (на рисунке показано красной рамкой), а также видно класс элемента - QWidget. Если бы приложение было написано с применением инструментария WinAPI, то класс элемента был бы указан явно - CheckBox, и он бы имел свой собственный ID-номер. Но в данном случае программисты использовали инструментарий QT и все элементы управления имеют один класс - QWidget. Жаль, поиск элемента по ID-номеру отпадает. Но можно выяснить координаты и размеры элемента и произвести поиск по этим данным. Нажмите кнопку [...] в утилите WinSpy++, напротив свойства Rectangle (см. рис. 2). Откроется окошко с координатами и размерами элемента в пикселях. Подобным образом я выяснил все размеры необходимых элементов и преобразовал значения в шестнадцатеричные. Нам это понадобится при анализе дизассемблированного кода плагина.

Как еще можно найти искомый элемент? Мы точно знаем, что это элемент CheckBox, значит программа должна их как-то распознавать, если он не один. Я решил проверить наличие текста CheckBox в жестко-закодированных строках проекта Radialix. Поиск показал следующее:

Рис. 3

Правка "невидимых" элементов управления

Рамкой синего цвета я указал искомые элементы управления. Вы спросите, как я это узнал. Отвечу. Обычно программисты к названиям элементов добавляют сокращенную надпись функции, которая на них возложена. Это намного упрощает отладку программы на этапе её создания. Поэтому очень просто догадаться, что приставки перед словом CheckBox обозначают надписи этих элементов в интерфейсе приложения.

Рис. 4

Правка "невидимых" элементов управления

Ранее я говорил о том, что с помощью утилиты WinSpy++ необходимо выяснить размеры и координаты этих элементов управления (желательно было чтобы вы записывали себе где-то эти данные). Теперь составим себе небольшой макет (я обычно делаю его в графическом редакторе):

Рис. 5

Правка "невидимых" элементов управления

Очевидно, что предстоит менять ширину (W) всех элементов CheckBox, а у двух еще и координату Х. На рисунке показан еще размер . Я о нем узнал во время редактирования свойств элемента и предполагаю, что это правая граница элемента, точно не скажу, мало опыта. Но если его не изменить, то элемент будет перекрывать собой следующий. На основании этих данных можно будет ориентироваться в дизассемблерном коде программы, а также сделать предварительные расчеты значений для новых размеров и положения.

Теперь перейдем в редактор строк Radialixa (см. рис. 6) к найденным элементам управления. Я установил на них закладки, чтобы долго не искать.

Рис. 6

Правка "невидимых" элементов управления

ID-строки - это адрес размещения данной строки в коде программы, а ссылка - это адрес, откуда идет обращение к этой строке. Нам в первую очередь необходимо изучить именно ссылку. По идее, если идет вызов названия элемента управления, то где-то рядом будет идти его формирование для размещения в интерфейсе программы (установка размеров и координат).

Рассмотрим первый элемент управления smoothEdgesCheckBox (у меня на нем установлена закладка №9). В проекте Radialix сделайте двойной клик по адресу ссылки, а затем, в открывшемся окошке, снова кликните дважды по ссылке.

Рис. 7

Правка "невидимых" элементов управления

После этого вы перейдете по выбранной ссылке в код программы дизассемблера IDA и окажетесь по адресу 1009863D. Что необходимо искать? В первую очередь ищите рядом команды PUSH со значениями установленных размеров элемента управления (мы их определили при помощи утилиты WinSpy++). Например, данный элемент управления имеет ширину 115 пикселей. В шестнадцатеричном формате это число 73h. Значит должна быть команда PUSH 73h. Чуть ниже, по адресу 100986В4, вы увидите эту команду, а перед ней, по адресу 100986В0, будет команда PUSH 13h. Это не что иное как высота элемента - в десятичном формате число 19. Теперь дело техники. Меняем значения на желаемые. Я это делал в редакторе WinHex с уже созданным локализованным файлом. А вот значение было установлено опытным путем.

Рис. 8

Правка "невидимых" элементов управления

Аналогичным образом действуем с остальными элементами управления и устанавливаем свои значения.

Рис. 9

Правка "невидимых" элементов управления

Рис. 10

Правка "невидимых" элементов управления

Рис. 11

Правка "невидимых" элементов управления

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

Рис. 12

Правка "невидимых" элементов управления

Из своего небольшого опыта исследования кода программ на предмет изменения размеров элементов управления, недоступных визуальным редакторам, могу сказать, что обычно размеры (ширина и высота) элементов управления задаются командой PUSH.

На этом все.  Правка "невидимых" элементов управления

Желаю вам успехов!
Leserg

Правка "невидимых" элементов управления

Кто ищет, тот всегда найдет!
Правка "невидимых" элементов управления

Рейтинг поста: 0

Re: Правка "невидимых" элементов управления

Хорошая статья. Правка "невидимых" элементов управления Только не для всех - новичкам сложновата для понимания будет. Правка "невидимых" элементов управления Я бы вообще предложил устанавливать уровень статей - базовый уровень, продвинутый уровень, ну и можно еще профессиональный уровень. Так проще будет ориентироваться в статьях многим пользователям, которые только начинают изучать локализацию.

Рейтинг поста: 0

Re: Правка "невидимых" элементов управления

Класнный материал! По нему у меня получилось в одном 3D редакторе изменить размер панели инструментов с 2-х рядных кнопочек до 3-х рядных. Теперь больше влазит кнопочек туда happy  . Респект! От себя добавлю, что расположение кнопочек выставлял не методом подбора координат, а все понастраивал через WinSpy++, потом позаписывал координаты и потом вбил в код эти значения. Редактор написан на С++.

Рейтинг поста: 0

(09-02-2017 11:31:01 отредактировано WYLEK)

Re: Правка "невидимых" элементов управления

Как всегда все прекрасно Правка "невидимых" элементов управления

Пока один ты отдуёшся за всех Правка "невидимых" элементов управления мне все некогда, хотя три статьи в голове крутятся.

По нему у меня получилось в одном 3D редакторе изменить размер панели инструментов


А мне пришлось другим путем идти - заменить шрифт, окна не вышло перетянуть. В проге на каждый экран свой шрифт можно установить(разделением ссылки)

Верхнее меню с другим шрифтом.

Показать / Скрыть текст

Правка "невидимых" элементов управления

Правка "невидимых" элементов управления

Рейтинг поста: 0

Re: Правка "невидимых" элементов управления

Пока один ты отдуёшся за всех


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

Я бы вообще предложил устанавливать уровень статей - базовый уровень, продвинутый уровень, ну и можно еще профессиональный уровень.


Да я хотел было написать, но в голову ничего не пришло, как это сформулировать. Ясно, что не для начинающих...

Кто ищет, тот всегда найдет!
Правка "невидимых" элементов управления

Рейтинг поста: 0

Re: Правка "невидимых" элементов управления

Хорошо б было втиснуть материал в PDF, чтоб под рукой всегда было, так как это новые возможности модификации программ и по этому нет нигде никакого материала. А, хотя я и сам могу скатать себе...
   Начал писать статью по борьбе с кряками, будет нестолько частей, первый раз в жизни пишу happy  , мммм тяжело это писать статьи, с оперы ""Тяжело начать, сложнее закончить", но ниче, процесс пошел. В первой части опишу издевательство над WinHex.
   P.S. Не могу никому увеличить репу через Оперу! Что такое, неделю назад нормально все было, переустановка браузера не помогла.

Рейтинг поста: 0