Этот сайт создан как клуб русификаторщиков. Для нас существуют три основных правила.
1. Мы никому и ничего не должны!
2.Один пришедший на сайт толковый русификаторщик дороже всех пользователей.
3. Мы делаем русификаторы для своего сайта, но в оригинале ими могут пользоваться все в интернете.
Есть строка при переводе, с двумя ссылками на ней. При переводе строки в одном месте строка в интерфейсе видна полностью, в другом выглядит обрезанной. Может быть кто-то подскажит что поменять чтобы везде строка была полной
Строка может быть неполной по двум причинам: 1) В коде используется указатель на длину строки. Обычно его инициализация идет непосредственно перед объявление строки. 2) Ограничение размером элемента управления, в котором выводится строка. 3) Перекрытие элемента управления другим элементом.
По первому варианту. Длина строки "Hubble Shift" - 12 символов. В шестнадцатеричной системе счисления - 0Ch. Смотрим код.
В зависимости от перевода и кодировки это значение нужно изменить. Например, перевод "Смещение Хаббла". Тогда длину строки в зависимости от кодировки перевода нужно указать одно из следующих (0Fh, 1Eh или 1Dh):
По второму варианту. При помощи оконных сканеров определяем идентификатор элемента управления, в котором выводится строка. Затем он ищется в отладчике и определяется место в коде инициализации размеров этого элемента управления. В данном случае нас интересует ширина. Вот это значение и корректируется так, чтобы строка полностью помещалась в этом элементе управления. Также, если элемент управления указан в ресурсах, то там же легко можно изменить его размеры и положение под текущую строку.
По третьему варианту. Аналогично второму, только нужно изменить положение элемента, который перекрывает элемент со строкой. То есть отодвинуть элемент по координате Х на величину, на которую увеличился элемент со строкой. Пример:
Если элемент 2 расположен выше (над) элемента 1, то даже если мы увеличим размер (ширину) элемента 1, то строка в нём все равно будет обрезана элементом 2. То есть элемент 2 перекрывает элемент 1. Нужно изменить координату Х элемента 2, то есть отодвинуть его. Соответственно также нужно изменить ширину элемента 2 на то же значение, чтобы он не выходил заграницы вкладки, на которой находится.
С помощью оконного сканера вы можете быстро определить суть проблемы: ограничение строки границами элемента управления или количеством символов (счётчик). Например берем WinSpy++, наводим прицел на проблемную строку и смотрим полученные значения. Если строка в заголовке полная, значит ограничение шириной элемента управления (если следом идет другой элемент управления, то может быть наложение). Если строка неполная, значит счётчик.
Вот у нас в программе строка "Смещение Хаббла" отображается как "Смещение Хаб" и сканер показывает это значение строки:
Однозначно в коде на эту строку определён счётчик.
Запускаем программу под отладчиком (или цепляемся к запущенному процессу программы), ставим точку останова на вызов проблемной строки. Строка имеет две ссылки. Поэтому получается две точки останова: по одной полет нормальный, а по другой - нет. Щелкая по функциям программы, отключаем в отладчике ту из точек останова, по которой строка отображается нормально. А итоге останется одна заветная точка, где строка обрезается. Дальше в пошаговом режим нужно смотреть, что происходит со строкой. В итоге вы наткнётесь на счётчик. Как я говорил ранее, обычно счётчик находится перед вызовом строки. Но здесь счётчик оказался после, поэтому в сообщении выше я ошибся и указал его неверно.
Значение счётчика - 0Сh (12 символов). У нас в строке "Смещение Хаббла" 15 (0Fh) символов в кодировке ANSI. Изменяем в отладчике это значение на новое.
Весьма удобно для этих целей "Textify" - приложение маленькое, всегда запущено (у меня), кроме того, удобно для поиска термина в Radialix, или в шест. редакторе.
Все можно. Только нужно найти место в коде, где объявляются их размеры. Мне пока это не удалось.
Сложность заключается в том, что используется приватный класс, у которого один идентификатор - 3E7h (десятич. 999). Каждое такое окошко рисуется пятью элементами - панель и границы (сверху, снизу, слева, справа) - и все эти элементы имеют один идентификатор. Сюда же относятся левая и правая главные панели и заголовки. Начальные размеры всех этих элементов нулевые (ширина - 0, высота - 0, координата Х - 0, координата Y - 0). Откуда потом берутся их оконные размеры - загадка.
У меня пока нет никаких идей, как это выловить. Может кто чего посоветует или подскажет?
Дополнено: Все, нашел. Два вечера голова дымилась. Позже озвучу.
После запуска программы ширина панелей равна 141 пикс.
Это значение получается следующим образом.
Сначала вычисляется базовое значение ширины (в файле Vitascene50EpGui.dll).
Как видно оно получается из двух констант: 2Dh и 5Fh. Их сумма даёт значение 8Ch (140).
Затем, в зависимости от ширины основной панели, на которой находятся эти панельки, к базовому значению прибавляется единица или же отнимается. В данном моменте прибавляется. Вот здесь (файл Vitascene50EpGui.dll):
В этой функции в цикле прогоняются размеры (ширина и координата X) всех дочерних элементов управления, зависимых от размеров родительских. Такая же функция, но уже со знаком минус, работает на уменьшение.
Так вот, чтобы увеличить ширину этих панелей, необходимо увеличить значение 2Dh или 5Fh, или оба сразу. Имейте ввиду, что размер первого слагаемого 2Dh равен 4 байта. То есть максимальное значение может быть FFFFFFFFh (4294967295). Размер второго слагаемого 5Fh составляет 1 байт (!), т.е максимальное значение может быть 7Fh (127). Если укажете большее значение, то число превратится в отрицательное. И получится операция не сложения, а вычитания.
Итак, место в коде уже известно, поэтому для быстрого изменения значения ширины на желаемое берём любимый НЕХ-редактор и открываем в нём файл Vitascene50EpGui.dll. Переходим на смещение @9F900 и меняем необходимые данные:
Например, я изменил второе значение ширины 5Fh на 7Fh. В итоге получилось: 2D + 5F = AC (172). Максимальное значение ширины в программе будет AC + 01 = AD (173), т.е. ширина всех панелей подобного типа станет равна 173 пикс.
Я вобще начинающий, первая моя тренировочная попытка сделать перевод на свой лад. Помогите пожалуйста, как сделать что бы слово отображалось полностью без точек в конце. (Получится в Radialix или нет?) (думал сам справлюсь не получается) Ссылка
vaskamy, дело в том, что шаблонные редакторы (любые, в том числе и Radialix) не позволяют добавлять элементам управления новые свойства, только редактировать. Поэтому сначала в простейшем редакторе, типа Restorator, XN Resource Editor, Resource Hacker и других, добавьте в элементу управления TListView свойство IconOptions.WrapText = False и сохраните изменения. Потом можете создать проект перевода в шаблонном редакторе.
На будущее смотрите на каком языке написана программа и с помощью поисковых систем ищите свойства интересуемого элемента управления, например, TListView - дельфи. Многие свойства элементов управления используются по умолчанию и в сценариях форм/диалогов не объявляются. Поэтому, чтобы иметь возможность их изменять, необходимо их объявить, что и было сделано в данном примере.
Сообщение отредактировал Leserg 20 августа 2023 - 22:07