![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ресурсы [D5, D6, Win95/98, Win2k, WinXP]
Esa © (2002-04-09 11:54:00)Привет всем.
Здесь было много различных вопросов и ответов по ресурсам, вроде бы все должно быть понятно. Допустим, я создал RC-файл с ресурсомSTRING, но что-то не совсем понятно, как подключить его к проекту и использовать в своей программе. Хотелось бы узнать ответ на этот коварный вопрос подробнее.
Спасибо всем, кто ответит.
Poirot (2002-04-12 15:35:00) [1]
> Anatoly Podgoretsky © (11.04.02 13:36)
> Poirot © (11.04.02 09:49)
> Я имел ввиду, что для resourcestring нет нужды заботиться
> об номерах и их уникальности в рамках приложения.
Мы об одном и том же говорили и непоняли друг друга...
я об номарах в ресурсах... если их в лоб задавать в рц...
Poirot (2002-04-12 15:33:00) [2]Неа... не Char а какой-то из стрингов....
s[0]:="abc"; //очень интересно... это даже если опустить что это символ:=строка... но даже дляна типов не совпадает 1 и у вас 4...
А вот если массив динамическим делать... а....
esa (2002-04-12 10:15:00) [3]Вот именно об этом я и говорил: решение вопроса путем введения массива строк. Не слишком ли много строк будет? И как это будет выглядеть:
Procedure MyProc;
var
S: array[0..15000] ofChar;
Str: string;
i: integer;
resourcestring
S[0] = "abc";
S[1] = "dbe";
...
S[15000] = "xyz";
begin
LoadString(hInstance, @S, SizeOf(S));
fori := 0 to15000 do
Str := S;
end;
Я правильно все понял? И потом, точноS: array[0..15000] ofдолжно бытьChar?
Керик (2002-04-11 17:57:00) [4]Сорри, ошибочка...
Вместо
LoadString(hInstance, @S, SizeOf(S));
Надо
LoadString(hInstance, {Номер строки}, @S, SizeOf(S));
Керик (2002-04-11 17:50:00) [5]Esa, вот то, что тебе надо:
...
var
S: array[0..15000] of Char;
Str: string;
begin
LoadString(hInstance, @S, SizeOf(S));
Str := S;
...
end;
Толик (2002-04-11 14:53:00) [6]to esa
А вообще посмотри исходники System.pas
Там же можно посмотреть ф-ю LoadResString - её в хелпах нет, поэтому см. исходники. Может она чем-то поможет.
Толик (2002-04-11 14:47:00) [7]resourcestring
MyRes = "некий ресурс";
var
id: longint;
begin
id := PResStringRec(@MyRes)^.Identifier;
end;
вот это id и можно использовать в цикле
@MyRes - типа PResStringRec
esa (2002-04-11 14:10:00) [8]Это множество строк необходимо для их перебора. У нас на входе есть строка, на выходе необходимо выдать ответ, есть ли эта строка в том множестве или нет.
Anatoly Podgoretsky (2002-04-11 13:36:00) [9]Poirot © (11.04.02 09:49)
Я имел ввиду, что для resourcestring нет нужды заботиться об номерах и их уникальности в рамках приложения.
esa (11.04.02 13:28)
Какой смысл обращаться в цикле?
esa (2002-04-11 13:28:00) [10]Тогда если вы говорите, что лучше делать так
...
resourcestring
str1="sdsdsd";
sss="eqwrwere";
....
то как тогда мне лучше сделать, чтобы к строкам обращаться в цикле, т.е. пронумеровать их? Строковый массив что ли для этого вводить?
Poirot (2002-04-11 09:49:00) [11]
> Anatoly Podgoretsky ©
Абсолютли согласен, но а как с номарами...
Если там просто влоб 1023, то у меня глюки...
а вот если делаем с низу 1024, 1023 и т.д. всё OK...
или просто... вы просто что-то другое имеете ввиду..
Anatoly Podgoretsky (2002-04-11 08:43:00) [12]Сразу по нескольким вопросам
Raptor © (09.04.02 14:50)
Для Д5/6 не обязательно компилировать, достаточно подключить .rc файл к проекту напрямую.
esa (09.04.02 17:10)
Нельзя, но лишнии это только на твой взгляд, и не лень вычищать каждый раз?
esa (10.04.02 14:47)
Переменных нет совсем, пусть тебя не смущает синтаксис, а ровно столько сколько и в ресурсном файле, но преимущества неоценимы
Poirot © (11.04.02 07:43)
И не надо беспокоиться об конфликтах номеров
Лучше в отдельный модуль.
Poirot (2002-04-11 07:43:00) [13]Ну и что, а самому создавать список строк, сохранять их, заботится о их номерах, каждый раз считывать... По названию вы определите что за строка... а по номеру... сомневаюсь....
докучи дописываем, редактируем без проблем....
вам какая разница куда вводить в рц или в пас... а их как {$I } можите поместить...
Мне больше этот способ нравится...
esa (2002-04-10 14:47:00) [14]Спасибо. Но не слишком ли много переменных прийдется вводить, ведь у меня порядка 2000 строк.
Poirot (2002-04-10 11:40:00) [15]Извините конечно, но не проще-ли без такого вида ввода строк, а просто
...
resourcestring
str1="sdsdsd";
sss="eqwrwere";
....
И тогда юзаем
label1.caption:=str1;
эти строки в ресурсах окажутся...
в интерфейсе модуля
esa (2002-04-10 09:21:00) [16]Спасибо, в общем-то, я так и делаю.
Raptor (2002-04-09 22:15:00) [17]В принципе реально, но надо ли. Там вообще-то особо лишнего ничего нет, только то что нужно.
В крайнем случае, если очень уж хочется, можно после компиляции в готовом ехе-шнике поудалять ненужные, с твоей точки зрения, ресурсы с помощью какого либо ресурс-эдитора (например Restorator).
esa (2002-04-09 17:10:00) [18]2 Raptor ©
Большое спасибо!!! Что и требовалось. Теперь попробуем.
А еще такой вопрос: реально ли компилировать прогу без тех ресурсов, которые туда пихает сам Delphi? А то очень много лишнего.
Raptor (2002-04-09 14:50:00) [19]2 Esa
Для начала надо скомпилировать rc-файл и получить из него res-файл. Это делается так:
Допустим есть rc-файл myres.rc следующего содержания:
STRINGTABLE DISCARDABLE
{
1001 "String 1"
1002 "String 2"
}
Компилируем его:
brcc21 myres.rc
и получаем файл myres.res
Потом в приложении включаем этот файл
{$R myres.res}
И далее делаем так:
....................
Var s:String;
....................
s:=LoadStr(1001);
P.S. Компилятор ресурсов brcc32.exe находится в директории $(DELPHI)\Bin
Esa (2002-04-09 13:29:00) [20]Извини, что я такие глупые вопросы задаю, только не понятно, как обратиться к конкретной строке. Например, у меня строка под номером 1, а там текст, например, "Привет!". Как мне эту строку, например, загнать в label?