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

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

Замена ресурсов из файлов? [D7]


Nikfel ©   (2009-05-30 18:02:00) 

Помогите перевести с языка си на Delphi:

bool ReplaceBitmap(WORD Number)
{

// Переменные для чтения и добавления ресурса
DWORD dwResSize, dwRead;
HANDLE File,hUpdateRes;

// Открываем файл для дальнейшего чтения (файл new.bmp)
File = CreateFile("new.bmp", GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
// Если открыть не удалось, то выходим
if(File == INVALID_HANDLE_VALUE) return FALSE;

// Сохраняем его размер исключив BITMAPFILEHEADER (для остальных ресурсов, исключать размер заголовка не нужно)
dwResSize = GetFileSize(File, NULL)-sizeof(BITMAPFILEHEADER);
// Если не удалось получить размер, то выходим
if(dwResSize


Nikfel   (2009-05-30 20:01:00) [1]


> if not ReadFile(File, pRes^, dwResSize, dwRead, nil)


Все понял вот об этом забыл что надо pRes^. Еще надо будет добавить проверку на ошибки для правильной работы.

Спасибо. Все работает.


Сергей М.   (2009-05-30 19:59:00) [2]


> Вот попробовал так переписать


Ты даже передрать один-в-один мой код не смог, что уж тут о какой-то работоспособности говорить ?)


Nikfel   (2009-05-30 19:53:00) [3]

Вот попробовал так переписать, но работает не правильно, т.е. запись происходит, но получается не правильный рисунок( смотрел в программе Restorator). Где же тут ошибка?

procedure TForm1.Button1Click(Sender: TObject);
var dwResSize, dwRead:DWORD;
hUpdateRes:Cardinal;
pRes: PChar;
f:thandle;
begin
F:=CreateFile('new.bmp', GENERIC_READ, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
dwResSize:=GetFileSize(F, nil)-sizeof(BITMAPFILEHEADER);
pRes:=SysGetMem(dwResSize);
SetFilePointer(F,sizeof(BITMAPFILEHEADER),0,0);
ReadFile(F, pRes, dwResSize, dwRead, nil);
hUpdateRes:=BeginUpdateResource('ResourceKeeper.exe', FALSE);
UpdateResource(hUpdateRes, RT_BITMAP, 'bmp', LANG_NEUTRAL, pRes, dwResSize);
EndUpdateResource(hUpdateRes, FALSE);
CloseHandle(F);
end;


Сергей М.   (2009-05-30 19:27:00) [4]


> char *pRes=new char[dwResSize];


var
 pRes: PChar;
..
pRes := SysGetMem(dwResSize);


> if(ReadFile(File, (LPVOID)pRes, dwResSize, &dwRead, NULL)
> == NULL)


if not ReadFile(File, pRes^, dwResSize, dwRead, nil)


Наверх

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