Форум: "Основная";
Текущий архив: 2002.12.23;
Скачать: [xml.tar.bz2];
ВнизРесурсы Найти похожие ветки
← →
drin (2002-12-11 00:42) [0]Делаю так:
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 01:03) [1]c помощью SetLength и Move
← →
Юрий Зотов (2002-12-11 01:08) [2]Сам не пробовал, но может быть...
Загрузить через TResourceStream, затем создать TStringStream, сделать CopyFrom и взять DataString.
Еще вариант - загрузить через TResourceStream, затем создать TStringList, сделать LoadFromStream и взять Text.
А вообще-то, для загрузки строк есть функция LoadString. Вот она точно пройдет.
← →
drin (2002-12-11 01:13) [3]>MBo
Сенкс
← →
drin (2002-12-11 01:36) [4]>Юрий Зотов
Эт я сам умею но не использую 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.
???
← →
MBo (2002-12-11 07:49) [5]SizeOf(Res) будет, конечно, 4 - это же размер указателя.
Если не ошибаюсь, надо SizeofResource использовать
← →
Юрий Зотов (2002-12-11 08:04) [6]> не использую Classes
Что ж, осталось только научиться обходиться без него. Например:
1. Знать размер Pointer"а. SizeOf(res) - 4 байта.
2. Понять, что динамическая память сначала выделяется, а потом используется. Сначала SetLength, потом Move.
← →
drin (2002-12-11 12:36) [7]>Юрий Зотов
Если вам не трудно, напишите что нужно вставить на место точек.
var
qResH, qResInfoH : tHandle;
Res: Pointer;
s: String;
begin
qResInfoH := FindResource(HInstance , RT_RCDATA, "TEXT");
qResH := LoadResource(HInstance, qResInfoH );
res:=LockResource(qResH);
........................
end.
Заранее благодарен.
← →
MBo (2002-12-11 13:54) [8]Честно говоря, просто ужас. Хоть бы посмотрел в хелпе порядок параметров 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;
← →
neXt (2002-12-11 14:41) [9]Вообще-то получить 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 - это ж вроде константа для "сырых" ресурсов, а как стрку её использовать странно (или я не прав).
← →
neXt (2002-12-11 14:42) [10]ну не Result, а S конечно, я копировал код, по ошибке не исправил
← →
neXt (2002-12-11 14:44) [11]LoadLibrary("D5NTSCRE.bpl") уменя = hInstance
← →
MBo (2002-12-11 16:21) [12]>neXt
> RT_RCDATA - это ж вроде константа для "сырых" ресурсов, а как >стрку её использовать странно (или я не прав).
Ну раз у автора так изначально было...
Конечно, лучше RT_STRING
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.12.23;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.008 c