-
Игорь начал искать смысл. Ты на правильном пути. Что конечно не означает что дойдешь до конца этого пути))
-
> Игорь Шевченко © (14.08.08 09:56)
Особой разницы нет кроме как в отличие от const, эти константы размещаются не в сегменте данных, а в ресурсах, а затем подгружаются оттуда по мере необходимости. Каждая такая константа на вид обычная строка. Но за каждой из них стоит структура:
PResStringRec = ^TResStringRec;
TResStringRec = packed record
Module: ^Cardinal;
Identifier: Integer;
end;
-
Anatoly Podgoretsky © (14.08.08 10:36) [16]
Я про работу с ресурсами несколько в курсе, но ни const, ни ресурсы в своп-файл не выкидываются никогда (за исключением запакованных файлов), так как и const и ресурсы находятся в EXE-файле (ну или в DLL).
Я немножко о другом - я прекрасно понимаю, что вынос строковых констант в ресурсы есть механизм полезный, в частности, для локализации, я к тому, что механизм именно resourcestring мне представляется крайне неудобным.
Мне бы хотелось строковые ресурсы в DLL собирать самостоятельно, вместе с другими ресурсами, битмапами, курсорами и прочими иконами. А если я объявлю resourcestring в программе и resourcestring в DLL у меня получится два набора ресурсов :)
-
DVM © (14.08.08 10:42) [21]
> > Особой разницы нет кроме как в отличие от const, эти константы > размещаются не в сегменте данных, а в ресурсах, а затем > подгружаются оттуда по мере необходимости. Каждая такая > константа на вид обычная строка. Но за каждой из них стоит > структура: > > PResStringRec = ^TResStringRec; > TResStringRec = packed record > Module: ^Cardinal; > Identifier: Integer; > end;
Я в курсе, спасибо. Я хочу понять, в чем преимущества
-
> Игорь Шевченко © (14.08.08 10:43) [23] > Я хочу понять, в чем преимущества
А кто сказал, что они есть?
-
> А кто сказал, что они есть?
Очевидно Borland
-
> Игорь Шевченко © (14.08.08 11:00) [25] > Очевидно Borland
Судя по ссылке в [0], это сказал DVM ©. Анатолий вот еще пытается найти какие-то плюсы. И все. Про Borland поясни.
-
If there is no resourcestring section in your code, the refactoring engine creates one following either the implementation keyword or the uses list. :-() а зачем?
-
> :-() а зачем?
есть такой вид рефакторинга - замена строкового литерала на resourcestring. Удобно, чтобы явные литералы в коде не присутствовали.
-
> Игорь Шевченко © (14.08.08 11:15) [28]
И зачем? Чем удобнее? Почему таки не const? А уж об автоматизме сего промолчу :-х
-
> И зачем? Чем удобнее?
отсутствие литералов оно всяко удобнее.
> Почему таки не const?
вот не знаю :)
-
> Игорь Шевченко (14.08.2008 10:37:17) [17]
А не ты говорил про ITE - это таже самая технология - ресурсные ДЛЛ
-
> Игорь Шевченко (14.08.2008 10:42:22) [22]
Ну тут Борланд пошел своим путем, сделал так, что бы разницы в коде не было, в отличии от использования чистых строковых ресурсов.
Насчет самостоятельной сборки - этого у тебя никто не отнимал, resourcestring автоматизирует не только создание ресурса, но и его использования, в файле же обычный String Table
-
> Игорь Шевченко (14.08.2008 10:43:23) [23]
Читай два сообщения выше, преимущество для Дельфи в автоматизации работы, Дельфи скрывает всю кухню.
-
> oldman (14.08.2008 11:04:26) [26]
Мой ответ Игорю, также и тебе. Локализация между прочим тут ни причем, она делается и другими механизмами. Просто ITE знает и про формы и про resourcestring и про ДЛЛ, много про что знает и предоставляет механизм, но это не из=за resourcestring - оно же преобразовывается в StringTable
-
> Игорь Шевченко (14.08.2008 11:15:28) [28]
Явные литералы худшее зло.
Явный литерал (HardCoded) -> Const -> resource (resourcestring - спецподдержка для строк)
-
> И зачем? Чем удобнее? Почему таки не const?
Для строк нет смысла писать const - поскольку resourcestring абсолютно прозрачен. const
S1 = 'abc';
resourcestring
S1 = 'abc';
S := S1;
-
Anatoly Podgoretsky © (14.08.08 12:11) [32]
> Насчет самостоятельной сборки - этого у тебя никто не отнимал, > resourcestring автоматизирует не только создание ресурса, > но и его использования, в файле же обычный String Table
Вот у меня есть задача локализации.
Я пишу
unit langconsts; interface
resourcestring SYes = 'Да'; SNo = 'Нет';
end.
для другого языка я пишу
unit langconsts; interface
resourcestring SYes = 'Yes'; SNo = 'No';
end.
Хочу сделать две DLL для ресурсов на русском и английском языках.
1. Какой юнит я должен вставлять в приложение ? 2. Как я должен использовать идентификаторы в программе, чтобы ресурсные строки загружались из DLL ? 3. Будут ли соответствовать идентификаторы строк в приложении и в DLL ? 4. Я хочу язык приложения определять самостоятельно, не используя настройки Windows. Как ?
-
> Игорь Шевченко (14.08.2008 12:20:37) [37]
1. Какой юнит я должен вставлять в приложение ? Любой, в Дельфи обычно выбирается один базовый язык, на нем делается интерфейс, потом с помощью ITE создаются языковые файлы, если язык не находится, то используется ресурс не из ДЛЛ, а из программы (язык по умолчанию).
2. Как я должен использовать идентификаторы в программе, чтобы ресурсные строки загружались из DLL ? Не знаю, не интересовался. Но идентификаторы могут быть любые. В Дельфи этот процесс как создание ИД для идентификаторов, так и использования ресурса по его имени автоматизировано. Но я уже ответил, в Дельфи S := S1; и синтаксис использования одинаков и для const и для resourcestring. Не в дельфи это все надо делать ручками, создавать ресурс, создавать файл определений, самостоятельно загружать строки из ресурса.
3. Будут ли соответствовать идентификаторы строк в приложении и в DLL ? Идентификаторы не нужны, нужны ИД из StringTable и они должны быть одинаковы в приложении и во всех ресурсных ДЛЛ, ITE это обеспечивает.
4. Я хочу язык приложения определять самостоятельно, не используя настройки Windows. Как ? Я тебя уже посылал на свою страницу, ну не лезть же мне самому в проект и смотреть как именно я там реализовал, а по памяти я не помню. Учти, что у Борланда своя поддержка, отличающаяся от Микрософт. Но в кратче нужны несколько записей в реестре, а сама поддержка встроена в код.
В ITE все продумано, но к нему надо привыкнуть, ну а это осуществляется с помощью пары матюгов, да и ITE сильно улучшили по сравнению с первыми версиями, где матюгов надо было три.
-
Anatoly Podgoretsky © (14.08.08 12:32) [38]
> В ITE все продумано, но к нему надо привыкнуть,
Я использовал ITE несколько лет назад, потом оставшееся время плевался.
ITE может быть хорошо использовать для готового более-менее неизменного проекта, а для реального, то есть, достаточно часто и интенсивно меняющегося использовать ITE получится только с заклинаниями "твой кролик написал".
То, что сама поддержка встроена в код, я в курсе, но ITE использовать не хочу, потому как неудобно.
> Не в дельфи это все надо делать ручками, создавать ресурс, > создавать файл определений, самостоятельно загружать строки > из ресурса.
Собственно это можно и в Delphi делать, и, собственно, делается. Немного дольше на начальном этапе получается, но при наличии генератора ресурсов вполне сопоставимо с затратами на время с ITE. Кроме того, я могу попросить стороннего переводчика создать .rc файл, а вот просить его же поработать с ITE я, увы, не могу :)
|