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

Вниз

Доброго времени суток, знатоки. Не подскажете ли ламеру ответ на   Найти похожие ветки 

 
allrussia ©   (2002-04-22 21:03) [0]

Доброго времени суток, знатоки. Не подскажете ли ламеру ответ на один вопрос?

Есть такой юнит, я его прописываю в uses своего проекта и хочу его использовать. Нужно, чтобы при нажатии на кнопку Button1 распаковывался архив (полностью, все файлы), и прогресс бар показывал текущее состояние распаковки, т.е. ВСЕГО 2 ФУНКЦИИ. Но так как я не бум-бум в нижеследующем, то прошу совета у вас. Заранее спасибо.

unit UnRAR;

{$ALIGN OFF}

interface

uses Windows;

const
ERAR_END_ARCHIVE = 10;
ERAR_NO_MEMORY = 11;
ERAR_BAD_DATA = 12;
ERAR_BAD_ARCHIVE = 13;
ERAR_UNKNOWN_FORMAT = 14;
ERAR_EOPEN = 15;
ERAR_ECREATE = 16;
ERAR_ECLOSE = 17;
ERAR_EREAD = 18;
ERAR_EWRITE = 19;
ERAR_SMALL_BUF = 20;

RAR_OM_LIST = 0;
RAR_OM_EXTRACT = 1;

RAR_SKIP = 0;
RAR_TEST = 1;
RAR_EXTRACT = 2;

RAR_VOL_ASK = 0;
RAR_VOL_NOTIFY = 1;

RAR_DLL_VERSION = 2;

UCM_CHANGEVOLUME = 0;
UCM_PROCESSDATA = 1;
UCM_NEEDPASSWORD = 2;

type
RARHeaderData = record
ArcName,
FileName: array[0..Pred(260)] of Char;
Flags,
PackSize,
UnpSize,
HostOS,
FileCRC,
FileTime,
UnpVer,
Method,
FileAttr: UINT;
CmtBuf: PChar;
CmtBufSize,
CmtSize,
CmtState: UINT;
end;

RAROpenArchiveData = record
ArcName: PChar;
OpenMode,
OpenResult: UINT;
CmtBuf: PChar;
CmtBufSize,
CmtSize,
CmtState: UINT;
end;

TUnrarCallback = function (Msg: UINT; UserData, P1, P2: Integer) :Integer; stdcall;

const
_unrar = "unrar.dll";

function RAROpenArchive(var ArchiveData: RAROpenArchiveData): THandle;
stdcall; external _unrar;
function RARCloseArchive(hArcData: THandle): Integer;
stdcall; external _unrar;
function RARReadHeader(hArcData: THandle; var HeaderData: RARHeaderData): Integer;
stdcall; external _unrar;
function RARProcessFile(hArcData: THandle; Operation: Integer; DestPath, DestName: PChar): Integer;
stdcall; external _unrar;
procedure RARSetCallback(hArcData: THandle; UnrarCallback: TUnrarCallback; UserData:Integer);
stdcall; external _unrar;
procedure RARSetPassword(hArcData: THandle; Password: PChar);
stdcall; external _unrar;

function RARGetDllVersion: integer;

type
TChangeVolProc = function(ArcName: PChar; Mode: Integer): Integer; stdcall;
TProcessDataProc = function(Addr: PUChar; Size: Integer): Integer; stdcall;

procedure RARSetChangeVolProc(hArcData: THandle; ChangeVolProc: TChangeVolProc);
stdcall; external _unrar;
procedure RARSetProcessDataProc(hArcData: THandle; ProcessDataProc: TProcessDataProc);
stdcall; external _unrar;

implementation

type
TRARGetDllVersion = function: integer; stdcall;

function RARGetDllVersion: integer;
var
h: THandle;
f: TRARGetDllVersion;
begin
h:= LoadLibrary(_unrar);
if h=0 then begin Result:= -1; Exit end;
f:= GetProcAddress(h, "RARGetDllVersion");
if @f=nil then Result:= 0 else Result:= f;
FreeLibrary(h);
end;

end.


 
Song ©   (2002-04-22 22:05) [1]

А запустить через TShellExcuteInfo никак?


 
allrussia ©   (2002-04-22 22:46) [2]

Если с помощью TShellExcuteInfo можно использовать unrar.dll (а не WinRAR/UnRAR.EXE), то как?


 
Song ©   (2002-04-23 08:15) [3]

Нет. Через ShellExecute можно запустить архиватор с нужными Вам ключами.
В Вашем вариате прогресс бар не сделаешь, потому что его изменение нужно вставлять в сам unrar.dll



Страницы: 1 вся ветка

Текущий архив: 2002.05.06;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.008 c
3-17469
Кирилл2
2002-04-11 18:58
2002.05.06
DBGrid+16 цветов = глюк


6-17655
Light Elf
2002-02-22 08:29
2002.05.06
Http запрос.


3-17495
Ander
2002-04-12 09:10
2002.05.06
Создание таблиц.


3-17502
Natalishka
2002-04-12 18:31
2002.05.06
Update


7-17713
Nikolay
2002-02-09 14:29
2002.05.06
Вопрос...