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

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.018 c
1-74713
Tik
2002-12-13 06:11
2002.12.23
Проблема


3-74570
----
2002-12-03 15:58
2002.12.23
Обмен данными с приложениями на разных языках......


14-74957
Yuri Btr
2002-12-02 10:48
2002.12.23
Запись в реестр загружаемых значений для всех пользователей


3-74582
Сантёр
2002-12-04 18:10
2002.12.23
RxDBGrid


1-74821
BlackTiger
2002-12-10 20:41
2002.12.23
Как получить ВСЕ Caption ы контролов на форме?