Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Ресурсы [D5, D6, Win95/98, Win2k, WinXP]


Страницы:   1 2

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?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо