Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.06.17;
Скачать: CL | DM;

Вниз

Ресурсы   Найти похожие ветки 

 
Esa   (2002-04-09 11:54) [0]

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


 
Fellomena   (2002-04-09 13:21) [1]


...
implementation

{$R *.DFM}
{$R STRINGS.RES}
...
procedure TForm1.Button1Click(Sender: TObject);
var
MyDll1: TResourceStream;
begin
MyDll1:=TResourceStream.Create(hInstance, "something", RT_RCDATA);
//...
MyDll1.Free;
end;

end;



 
Esa   (2002-04-09 13:29) [2]

Извини, что я такие глупые вопросы задаю, только не понятно, как обратиться к конкретной строке. Например, у меня строка под номером 1, а там текст, например, "Привет!". Как мне эту строку, например, загнать в label?


 
Raptor ©   (2002-04-09 14:50) [3]

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 17:10) [4]

2 Raptor ©

Большое спасибо!!! Что и требовалось. Теперь попробуем.
А еще такой вопрос: реально ли компилировать прогу без тех ресурсов, которые туда пихает сам Delphi? А то очень много лишнего.


 
Raptor ©   (2002-04-09 22:15) [5]

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


 
esa   (2002-04-10 09:21) [6]

Спасибо, в общем-то, я так и делаю.


 
Poirot ©   (2002-04-10 11:40) [7]

Извините конечно, но не проще-ли без такого вида ввода строк, а просто
...
resourcestring
str1="sdsdsd";
sss="eqwrwere";
....

И тогда юзаем

label1.caption:=str1;
эти строки в ресурсах окажутся...

в интерфейсе модуля


 
esa   (2002-04-10 14:47) [8]

Спасибо. Но не слишком ли много переменных прийдется вводить, ведь у меня порядка 2000 строк.


 
Poirot ©   (2002-04-11 07:43) [9]

Ну и что, а самому создавать список строк, сохранять их, заботится о их номерах, каждый раз считывать... По названию вы определите что за строка... а по номеру... сомневаюсь....
докучи дописываем, редактируем без проблем....
вам какая разница куда вводить в рц или в пас... а их как {$I } можите поместить...
Мне больше этот способ нравится...


 
Anatoly Podgoretsky ©   (2002-04-11 08:43) [10]

Сразу по нескольким вопросам

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 09:49) [11]


> Anatoly Podgoretsky ©

Абсолютли согласен, но а как с номарами...
Если там просто влоб 1023, то у меня глюки...
а вот если делаем с низу 1024, 1023 и т.д. всё OK...
или просто... вы просто что-то другое имеете ввиду..



 
esa   (2002-04-11 13:28) [12]

Тогда если вы говорите, что лучше делать так
...
resourcestring
str1="sdsdsd";
sss="eqwrwere";
....

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


 
Anatoly Podgoretsky ©   (2002-04-11 13:36) [13]

Poirot © (11.04.02 09:49)
Я имел ввиду, что для resourcestring нет нужды заботиться об номерах и их уникальности в рамках приложения.

esa (11.04.02 13:28)
Какой смысл обращаться в цикле?


 
esa   (2002-04-11 14:10) [14]

Это множество строк необходимо для их перебора. У нас на входе есть строка, на выходе необходимо выдать ответ, есть ли эта строка в том множестве или нет.


 
Толик ©   (2002-04-11 14:47) [15]

resourcestring
MyRes = "некий ресурс";
var
id: longint;
begin
id := PResStringRec(@MyRes)^.Identifier;
end;

вот это id и можно использовать в цикле
@MyRes - типа PResStringRec


 
Толик ©   (2002-04-11 14:53) [16]

to esa
А вообще посмотри исходники System.pas
Там же можно посмотреть ф-ю LoadResString - её в хелпах нет, поэтому см. исходники. Может она чем-то поможет.


 
Керик   (2002-04-11 17:50) [17]

Esa, вот то, что тебе надо:
...
var
S: array[0..15000] of Char;
Str: string;
begin
LoadString(hInstance, @S, SizeOf(S));
Str := S;
...
end;


 
Керик   (2002-04-11 17:57) [18]

Сорри, ошибочка...
Вместо
LoadString(hInstance, @S, SizeOf(S));
Надо
LoadString(hInstance, {Номер строки}, @S, SizeOf(S));


 
esa   (2002-04-12 10:15) [19]

Вот именно об этом я и говорил: решение вопроса путем введения массива строк. Не слишком ли много строк будет? И как это будет выглядеть:

Procedure MyProc;
var
S: array[0..15000] of Char;
Str: string;
i: integer;
resourcestring
S[0] = "abc";
S[1] = "dbe";
...
S[15000] = "xyz";
begin
LoadString(hInstance, @S, SizeOf(S));
for i := 0 to 15000 do
Str := S;
end;

Я правильно все понял? И потом, точно S: array[0..15000] of должно быть Char?


 
Poirot ©   (2002-04-12 15:33) [20]

Неа... не Char а какой-то из стрингов....
s[0]:="abc"; //очень интересно... это даже если опустить что это символ:=строка... но даже дляна типов не совпадает 1 и у вас 4...
А вот если массив динамическим делать... а....


 
Poirot ©   (2002-04-12 15:35) [21]


> Anatoly Podgoretsky © (11.04.02 13:36)
> Poirot © (11.04.02 09:49)
> Я имел ввиду, что для resourcestring нет нужды заботиться
> об номерах и их уникальности в рамках приложения.

Мы об одном и том же говорили и непоняли друг друга...
я об номарах в ресурсах... если их в лоб задавать в рц...



Страницы: 1 вся ветка

Текущий архив: 2002.06.17;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.015 c
14-55304
VID
2002-05-15 16:44
2002.06.17
А есть такой Plugin ?


14-55307
Malder
2002-05-15 17:02
2002.06.17
Ответ на задачку


6-55250
Romanew
2002-04-09 12:53
2002.06.17
Как из программы открыть Explorer с заданным файлом


6-55241
novomod
2002-04-07 15:17
2002.06.17
Help.TClientSocket and TServerSocket.


3-55043
nedden
2002-05-23 16:41
2002.06.17
Тормозит ClientDataSet+DataSource+Grid