Содержание материала

 
Извлекаем ресурс в файл

Code:

function ExtractResource: Boolean;

const

ResName = 'RES_MDB';

 

function FileWrite(Handle: Integer; const Buffer; Count: LongWord): Integer;

const

   BlockSize = 1024;

 

type

   TArray = array of Byte;

 

var

   Buff: array [0..BlockSize - 1] of Byte;

   Counter,

   CurCount, A, I: LongWord;

begin

   Counter := 0;

   Result := Count;

   I := 10;

   repeat

     if Count - Counter > BlockSize then

       CurCount := BlockSize

     else

       CurCount := Count - Counter;

 

     Move(TArray(@Buffer)[Counter], Buff[0], CurCount);

     if WriteFile(THandle(Handle), Buff, CurCount, LongWord(Result), nil) then

       Inc(Counter, CurCount)

     else

     begin

       Result := -1;

       Exit;

     end;

 

     A := Round((Counter / Count) * 100);

     if A > I then

     begin

       I := A;

       SendMessage(Progress, PBM_SETPOS, A, 0);

     end;

 

   until Counter = Count;

end;

 

var

ResHandle: HWND;

ResData: HWND;

LockRes: Pointer;

fHandle: Integer;

Size: Integer;

begin

Result := False;

try

   ResHandle := FindResource(HInstance,

     PChar(ResName), 'INSTALL');

   if ResHandle = 0 then Exit;

   ResData := LoadResource(HInstance, ResHandle);

   if ResData = 0 then Exit;

   try

     LockRes := LockResource(ResData);

     if not Assigned(LockRes) then Exit;

     try

       fHandle := FileCreate(BasePath + '\MainDB.~mdb');

       if fHandle = -1 then Exit;

       try

         Size := SizeofResource(HInstance, ResHandle);

 

         if FileWrite(fHandle, LockRes^, Size) = -1 then Exit;

 

         Result := True;

         StatusDone := True;

       finally

         CloseHandle(THandle(fHandle));

       end;

     finally

       UnlockResource(ResData);

     end;

   finally

     FreeResource(ResData);

   end;

finally

   PostMessage(Handle, WM_NOTIFY_THREAD_RESULT, Integer(Result), 0);

end;

end;

 

 

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить