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

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

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


drin ©   (2002-12-11 00:42:00) 

Делаю так:


var.
qResH, qResInfoH : tHandle;
Res: Pointer;
begin
qResInfoH := FindResource(HInstance , RT_RCDATA, "TEXT");
qResH := LoadResource(HInstance, qResInfoH );
res:=LockResource(qResH);
end.


А теперь вопрос: как мне сохранить данные в переменную, например String.


MBo   (2002-12-11 16:21:00) [1]

>neXt
> RT_RCDATA - это ж вроде константа для "сырых" ресурсов, а как >стрку её использовать странно (или я не прав).
Ну раз у автора так изначально было...
Конечно, лучше RT_STRING


neXt   (2002-12-11 14:44:00) [2]

LoadLibrary("D5NTSCRE.bpl") уменя = hInstance


neXt   (2002-12-11 14:42:00) [3]

ну не Result, а S конечно, я копировал код, по ошибке не исправил


neXt   (2002-12-11 14:41:00) [4]

Вообще-то получить String из ресурса можно простым приведением типов.
var
hRes: HRSRC;
hMem: HGLOBAL;
S: String;
begin
hRes := FindResource(LoadLibrary("D5NTSCRE.bpl"), "MYRES", RT_RCDATA);
hMem := LoadResource(hInstance, hRes);
Result := Copy(PChar(LockResource(hMem)), 1, SizeofResource(hInstance, hRes));
end;

MBo:
RT_RCDATA - это ж вроде константа для "сырых" ресурсов, а как стрку её использовать странно (или я не прав).


MBo   (2002-12-11 13:54:00) [5]

Честно говоря, просто ужас. Хоть бы посмотрел в хелпе порядок параметров FindResource.


procedure TForm1.Button1Click(Sender: TObject);
var
HR : THandle;
p: Pointer;
RSize:Integer;
s: String;
begin
HR := FindResource(HInstance , "B", "RT_RCDATA");
if HR<>0 then begin
RSize:=SizeOfResource(HInstance,HR);
HR := LoadResource(HInstance, HR );
if HR<>0 then begin
p:=LockResource(HR);
if p<>nil then begin
SetLength(s,RSize);
move(p^,s[1],RSize);
Edit1.Text:=s;
end;
end;
end;
end;


drin   (2002-12-11 12:36:00) [6]

>Юрий Зотов

Если вам не трудно, напишите что нужно вставить на место точек.


var
qResH, qResInfoH : tHandle;
Res: Pointer;
s: String;
begin
qResInfoH := FindResource(HInstance , RT_RCDATA, "TEXT");
qResH := LoadResource(HInstance, qResInfoH );
res:=LockResource(qResH);

........................

end.


Заранее благодарен.


Юрий Зотов   (2002-12-11 08:04:00) [7]

> не использую Classes

Что ж, осталось только научиться обходиться без него. Например:

1. Знать размер Pointer"а. SizeOf(res) - 4 байта.

2. Понять, что динамическая память сначала выделяется, а потом используется. Сначала SetLength, потом Move.


MBo   (2002-12-11 07:49:00) [8]

SizeOf(Res) будет, конечно, 4 - это же размер указателя.
Если не ошибаюсь, надо SizeofResource использовать


drin   (2002-12-11 01:36:00) [9]

>Юрий Зотов

Эт я сам умею но не использую Classes.

>MBo
А что передавать в качестве Count, може так:


var
qResH, qResInfoH : tHandle;
Res: Pointer;
s: String;
begin
qResInfoH := FindResource(HInstance , RT_RCDATA, "TEXT");
qResH := LoadResource(HInstance, qResInfoH );
res:=LockResource(qResH);
Move(res, S, SizeOf(res));
SetLength(S, SizeofResource(HInstance, qResInfoH ));
end.

???


drin   (2002-12-11 01:13:00) [10]

>MBo
Сенкс


Юрий Зотов   (2002-12-11 01:08:00) [11]

Сам не пробовал, но может быть...

Загрузить через TResourceStream, затем создать TStringStream, сделать CopyFrom и взять DataString.

Еще вариант - загрузить через TResourceStream, затем создать TStringList, сделать LoadFromStream и взять Text.

А вообще-то, для загрузки строк есть функция LoadString. Вот она точно пройдет.


MBo   (2002-12-11 01:03:00) [12]

c помощью SetLength и Move


Наверх

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