![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ресурсы [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