Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Большая проблема.

404
22 января 2004 года
GooD
108 / / 04.12.2003
Всем привет!

Вот при написании одной очень полезной программы я столкнулся некоторыми проблемами.
Проблемы это такие:
1. У меня в программе есть reg.dll в нем есть String-Table, я загружаю
нужный мне String(Функцией LoadString) здесь все порядке, но для регистрации
мне нужно изменить этот String, но у меня это не получается.
2. Этаже проблема и с BITMAP пробовал пользоваться BeginUpdateResource,UpdateResource,EndUpdateResource
но вместо нужного мне BITMAPa в ресурс сохраняется какая то шняга!

На этом проблемы заканчиваются.

Подскажите, пожалуйста, как их решить!

Спасибо за внимание!

P.S.: Заранее благодарю!
404
23 января 2004 года
GooD
108 / / 04.12.2003
Дополнение:

1. Я использовал этот код:
var
DLL: Cardinal;
Text: array[0..255] of char;
begin
DLL:= LoadLibrary('res.DLL');
LoadString(dll,110,@Text,sizeof(Text));
Edit1.Text:= StrPas(Text);
end;
Тут всё работает, но мне нужно на оборот, чтобы Edit1.Text сохранялся в ресурс, но в Delphi нет функции SaveString!
2. Здесь я использовал этот код:
var
BMP: TFileStream;
S,F: Cardinal;
begin
BMP:= TFileStream.Create('H:\new1.bmp',fmOpenRead);
S:= BMP.Size;
F:= BeginUpdateResource('H:\reg.dll',False);
UpdateResource(F,RT_Bitmap,'New',0,BMP,S);
EndUpdateResource(F,False);
end;
По идеи должно работать но, не работает!

Появились еще проблемы:
3. Использование PNG. Часа 2 по сети лазал ни одного компонента не нашел!

Спасибо за внимание!

P.S.: Заранее благодарю!
402
28 января 2004 года
ToRNaDo
70 / / 27.01.2004
Цитата:

var
BMP: TFileStream;
S,F: Cardinal;
begin
BMP:= TFileStream.Create('H:\new1.bmp',fmOpenRead);
S:= BMP.Size;
F:= BeginUpdateResource('H:\reg.dll',False);
UpdateResource(F,RT_Bitmap,'New',0,BMP,S);
EndUpdateResource(F,False);
end;



Допустим, вместо TFileStream можно использовать TMemoryStream. А если попробывать использовать TBitmap.LoadFrom<...>?

404
28 января 2004 года
GooD
108 / / 04.12.2003
Цитата:
Originally posted by ToRNaDo


Допустим, вместо TFileStream можно использовать TMemoryStream. А если попробывать использовать TBitmap.LoadFrom<...>?



Не понял?

1.9K
29 января 2004 года
AviDen
91 / / 26.12.2003
Цитата:
Originally posted by GooD
Дополнение:

2. Здесь я использовал этот код:
var
BMP: TFileStream;
S,F: Cardinal;
begin
BMP:= TFileStream.Create('H:\new1.bmp',fmOpenRead);
S:= BMP.Size;
F:= BeginUpdateResource('H:\reg.dll',False);
UpdateResource(F,RT_Bitmap,'New',0,BMP,S);
EndUpdateResource(F,False);
end;
По идеи должно работать но, не работает!



Батенька, дык ты мануал по UpdateResource читал?
Там что про пятый параметр (lpData) сказано? Указатель на данные битмапа! А ты ему что суешь? Указатель на VCL-класс TFileStream, который тебе вернул конструктор! Ты должен узнать размер потока (BMP.Size), выделить память (GetMem), в нее считать данные из файла (BMP.ReadBuffer), и указатель на этот участок памяти передать в UpdateResource! Ну и под конец освободить ранее выделенную память (FreeMem). Также не лишним было бы проверять вызовы функций на ошибки и использование Try..Finally при работе с памятью и ресурсом.

Вот так-то.

404
29 января 2004 года
GooD
108 / / 04.12.2003
Цитата:
Originally posted by AviDen


Батенька, дык ты мануал по UpdateResource читал?
Там что про пятый параметр (lpData) сказано? Указатель на данные битмапа! А ты ему что суешь? Указатель на VCL-класс TFileStream, который тебе вернул конструктор! Ты должен узнать размер потока (BMP.Size), выделить память (GetMem), в нее считать данные из файла (BMP.ReadBuffer), и указатель на этот участок памяти передать в UpdateResource! Ну и под конец освободить ранее выделенную память (FreeMem). Также не лишним было бы проверять вызовы функций на ошибки и использование Try..Finally при работе с памятью и ресурсом.

Вот так-то.



Привет AviDen спасибо за то, что сказал, где у меня ошибка.
Но у меня проблема с BMP.ReadBuffer что там надо указывать
в качестве второго параметра (Count)???

Спасибо за внимание!

1.9K
30 января 2004 года
AviDen
91 / / 26.12.2003
Цитата:
Originally posted by GooD


Привет AviDen спасибо за то, что сказал, где у меня ошибка.
Но у меня проблема с BMP.ReadBuffer что там надо указывать
в качестве второго параметра (Count)???

Спасибо за внимание!



Количество байтов, которое необходимо считать из буфера (вдруг тебе нужна только часть данных). В твоет случае это - BMP.Size.

404
30 января 2004 года
GooD
108 / / 04.12.2003
Цитата:
Originally posted by AviDen


Количество байтов, которое необходимо считать из буфера (вдруг тебе нужна только часть данных). В твоет случае это - BMP.Size.



У меня вылазеет Ошибка "Stream read eroor"!!!

p.s.:Код у меня такой:
var
BMP: TFileStream;
S,F: Cardinal;
P: pointer;
begin
BMP:= TFileStream.Create('H:\new.bmp',fmOpenRead);
S:= BMP.Size;
GetMem(P,S);
bmp.ReadBuffer(P,S);
F:= BeginUpdateResource('H:\1.exe',False);
UpdateResource(F,RT_BITMAP,'New',0,P,S);
EndUpdateResource(F,False);
Freemem(P,S);

1.9K
31 января 2004 года
AviDen
91 / / 26.12.2003
Цитата:
Originally posted by GooD


У меня вылазеет Ошибка "Stream read eroor"!!!

p.s.:Код у меня такой:
var
BMP: TFileStream;
S,F: Cardinal;
P: pointer;
begin
BMP:= TFileStream.Create('H:\new.bmp',fmOpenRead);
S:= BMP.Size;
GetMem(P,S);
bmp.ReadBuffer(P,S);
F:= BeginUpdateResource('H:\1.exe',False);
UpdateResource(F,RT_BITMAP,'New',0,P,S);
EndUpdateResource(F,False);
Freemem(P,S);



ээх, батенька, что ж ты так!

А нужно так:

bmp.ReadBuffer(P^,S);

404
31 января 2004 года
GooD
108 / / 04.12.2003
Цитата:
Originally posted by AviDen


ээх, батенька, что ж ты так!

А нужно так:

bmp.ReadBuffer(P^,S);



Большое спасибо тебе AviDen твои советы мне ОЧЕНЬ помогли!
p.s.:Ты случайно незнаеш как с помощью этих функций можно изменять STRING-TABLS? Или есть другие функции специально для этих целей???

Спасибо за внимание!

1.9K
02 февраля 2004 года
AviDen
91 / / 26.12.2003
Цитата:
Originally posted by GooD


Большое спасибо тебе AviDen твои советы мне ОЧЕНЬ помогли!
p.s.:Ты случайно незнаеш как с помощью этих функций можно изменять STRING-TABLS? Или есть другие функции специально для этих целей???

Спасибо за внимание!



Ну, дык если речь идет о строковых ресурсах - точно так же. Только все строки должны быть Unicode - в Delphi WideString. Т.е., что-то типа

UpdateResource(UpdateHandle, RT_STRING, 'Resource_Name', 0, @(MyString[1]), Length(MyString) * 2);

404
03 февраля 2004 года
GooD
108 / / 04.12.2003
Цитата:
Originally posted by AviDen


Ну, дык если речь идет о строковых ресурсах - точно так же. Только все строки должны быть Unicode - в Delphi WideString. Т.е., что-то типа

UpdateResource(UpdateHandle, RT_STRING, 'Resource_Name', 0, @(MyString[1]), Length(MyString) * 2);




Он у меня записывается под фонарным ID :( , и удаляет остальные строки из этого ресурса!
:( :( :(

1.9K
03 февраля 2004 года
AviDen
91 / / 26.12.2003
Цитата:
Originally posted by GooD



Он у меня записывается под фонарным ID :( , и удаляет остальные строки из этого ресурса!
:( :( :(



Значит, нужно пихать туда всю кучу, наверное...

Но тут я уже не шарю - сорри...

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог