IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

PB avec Extration 7z


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    T-B
    T-B est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 69
    Par défaut PB avec Extration 7z
    bonsoir,
    J'ai un problème avec le composant suivant que j'essaie de faire fonctionner sans succès.

    ce composant permet de compresser ou d'extraire des archives 7z

    // Delphi interface to 7-zip32.dll
    // Written by Dominic Dumée (dominic@psas.co.za)
    // Purpose: to create and extract files in the 7-zip format (www.7-zip.org)

    // 7-zip32.dll written by Akky. Download it here:
    // http://akky.cjb.net/download/7-zip32.html

    // NB: I don't understand Japanese (no english docs are available for the dll)
    // so I don't understand the purpose of all of the functions available,
    // such as Set/GetCursorInterval, Cursormode etc...

    // If anyone out there can provide more info on all the functions in the dll
    // please let me know...

    //-----------------------------------------------------------------------------
    // HOW TO USE IT:
    // Your program first needs to call LoadSevenZipDLL before any of the functions
    // will work. Call UnloadSevenZipDLL when your program terminates...
    // Obviously 7-zip32.dll file must be available to program (such as in the
    // app's exe folder).

    // Use SevenZipCreateArchive, SevenZipExtractArchive function to easily create
    // and extract 7z files (with optional callback function)

    // If you know what you're doing use SevenZipCommand function (works just like
    // command line version of 7-zip). See 7-zip docs for command syntax.

    // To get contents of archive file use SevenZipOpenArchive, SevenZipFindFirst,
    // SevenZipFindNext and SevenZipCloseArchive (works like FindFirst, FindNext)

    //-----------------------------------------------------------------------------
    // Revision history:
    // v1.00 17 June 2005 - First release
    // If you find any bugs or add any features please let me know

    // v1.01 1 September 2005
    // new feature:
    // --> Add parameter Password in SevenZipCreateArchive and SevenZipExtractArchive function
    // by Jéter Rabelo Ferreira (jeter.rabelo@jerasoft.com.br)

    // --> Added BaseDirectory parameter to SevenZipCreateArchive for easier handling of
    // relative paths (note that absolute paths ARE NOT supported by the DLL) [Dominic Dumée]

    unit SevenZip;

    interface
    uses windows;

    const
    // codes returned by SevenZipCreateArchive and SevenZipExtractArchive
    SZ_OK = 0;
    SZ_ERROR = 1;
    SZ_CANCELLED = 2;
    SZ_DLLERROR = 3;

    FNAME_MAX32 = 512;
    // these get returned as nState in the Callback function
    ARCEXTRACT_BEGIN = 0;
    ARCEXTRACT_INPROCESS = 1;
    ARCEXTRACT_END = 2;
    ARCEXTRACT_OPEN = 3;
    ARCEXTRACT_COPY = 4;

    // functions (QueryFunctionList)
    ISARC = 0 ; (* SevenZip *)
    ISARC_GET_VERSION = 1 ; (* SevenZipGetVersion *)
    ISARC_GET_CURSOR_INTERVAL = 2 ; (* SevenZipGetCursorInterval *)
    ISARC_SET_CURSOR_INTERVAL = 3 ; (* SevenZipSetCursorInterval *)
    ISARC_GET_BACK_GROUND_MODE = 4 ; (* SevenZipGetBackGroundMode *)
    ISARC_SET_BACK_GROUND_MODE = 5 ; (* SevenZipSetBackGroundMode *)
    ISARC_GET_CURSOR_MODE = 6 ; (* SevenZipGetCursorMode *)
    ISARC_SET_CURSOR_MODE = 7 ; (* SevenZipSetCursorMode *)
    ISARC_GET_RUNNING = 8 ; (* SevenZipGetRunning *)

    ISARC_CHECK_ARCHIVE = 16 ; (* SevenZipCheckArchive *)
    ISARC_CONFIG_DIALOG = 17 ; (* SevenZipConfigDialog *)
    ISARC_GET_FILE_COUNT = 18 ; (* SevenZipGetFileCount *)
    ISARC_QUERY_FUNCTION_LIST = 19 ; (* SevenZipQueryFunctionList *)
    ISARC_HOUT = 20 ; (* SevenZipHOut *)
    ISARC_STRUCTOUT = 21 ; (* SevenZipStructOut *)
    ISARC_GET_ARC_FILE_INFO = 22 ; (* SevenZipGetArcFileInfo *)

    ISARC_OPEN_ARCHIVE = 23 ; (* SevenZipOpenArchive *)
    ISARC_CLOSE_ARCHIVE = 24 ; (* SevenZipCloseArchive *)
    ISARC_FIND_FIRST = 25 ; (* SevenZipFindFirst *)
    ISARC_FIND_NEXT = 26 ; (* SevenZipFindNext *)
    ISARC_EXTRACT = 27 ; (* SevenZipExtract *)
    ISARC_ADD = 28 ; (* SevenZipAdd *)
    ISARC_MOVE = 29 ; (* SevenZipMove *)
    ISARC_DELETE = 30 ; (* SevenZipDelete *)
    ISARC_SETOWNERWINDOW = 31 ; (* SevenZipSetOwnerWindow *)
    ISARC_CLEAROWNERWINDOW = 32 ; (* SevenZipClearOwnerWindow *)
    ISARC_SETOWNERWINDOWEX = 33 ; (* SevenZipSetOwnerWindowEx *)
    ISARC_KILLOWNERWINDOWEX = 34 ; (* SevenZipKillOwnerWindowEx *)

    ISARC_GET_ARC_FILE_NAME = 40 ; (* SevenZipGetArcFileName *)
    ISARC_GET_ARC_FILE_SIZE = 41 ; (* SevenZipGetArcFileSize *)
    ISARC_GET_ARC_ORIGINAL_SIZE = 42 ; (* SevenZipArcOriginalSize *)
    ISARC_GET_ARC_COMPRESSED_SIZE = 43 ; (* SevenZipGetArcCompressedSize *)
    ISARC_GET_ARC_RATIO = 44 ; (* SevenZipGetArcRatio *)
    ISARC_GET_ARC_DATE = 45 ; (* SevenZipGetArcDate *)
    ISARC_GET_ARC_TIME = 46 ; (* SevenZipGetArcTime *)
    ISARC_GET_ARC_OS_TYPE = 47 ; (* SevenZipGetArcOSType *)
    ISARC_GET_ARC_IS_SFX_FILE = 48 ; (* SevenZipGetArcIsSFXFile *)
    ISARC_GET_ARC_WRITE_TIME_EX = 49 ; (* SevenZipGetArcWriteTimeEx *)
    ISARC_GET_ARC_CREATE_TIME_EX = 50 ; (* SevenZipGetArcCreateTimeEx *)
    ISARC_GET_ARC_ACCESS_TIME_EX = 51 ; (* SevenZipGetArcAccessTimeEx *)
    ISARC_GET_ARC_CREATE_TIME_EX2 = 52 ; (* SevenZipGetArcCreateTimeEx2 *)
    ISARC_GET_ARC_WRITE_TIME_EX2 = 53 ; (* SevenZipGetArcWriteTimeEx2 *)
    ISARC_GET_FILE_NAME = 57 ; (* SevenZipGetFileName *)
    ISARC_GET_ORIGINAL_SIZE = 58 ; (* SevenZipGetOriginalSize *)
    ISARC_GET_COMPRESSED_SIZE = 59 ; (* SevenZipGetCompressedSize *)
    ISARC_GET_RATIO = 60 ; (* SevenZipGetRatio *)
    ISARC_GET_DATE = 61 ; (* SevenZipGetDate *)
    ISARC_GET_TIME = 62 ; (* SevenZipGetTime *)
    ISARC_GET_CRC = 63 ; (* SevenZipGetCRC *)
    ISARC_GET_ATTRIBUTE = 64 ; (* SevenZipGetAttribute *)
    ISARC_GET_OS_TYPE = 65 ; (* SevenZipGetOSType *)
    ISARC_GET_METHOD = 66 ; (* SevenZipGetMethod *)
    ISARC_GET_WRITE_TIME = 67 ; (* SevenZipGetWriteTime *)
    ISARC_GET_CREATE_TIME = 68 ; (* SevenZipGetCreateTime *)
    ISARC_GET_ACCESS_TIME = 69 ; (* SevenZipGetAccessTime *)
    ISARC_GET_WRITE_TIME_EX = 70 ; (* SevenZipGetWriteTimeEx *)
    ISARC_GET_CREATE_TIME_EX = 71 ; (* SevenZipGetCreateTimeEx *)
    ISARC_GET_ACCESS_TIME_EX = 72 ; (* SevenZipGetAccessTimeEx *)
    ISARC_SET_ENUM_MEMBERS_PROC = 80 ; (* SevenZipSetEnumMembersProc *)
    ISARC_CLEAR_ENUM_MEMBERS_PROC = 81 ; (* SevenZipClearEnumMembersProc *)
    ISARC_GET_ARC_FILE_SIZE_EX = 82 ; (* SevenZipGetArcFileSizeEx *)
    ISARC_GET_ARC_ORIGINAL_SIZE_EX = 83 ; (* SevenZipArcOriginalSizeEx *)
    ISARC_GET_ARC_COMPRESSED_SIZE_EX = 84 ; (* SevenZipGetArcCompressedSizeEx *)
    ISARC_GET_ORIGINAL_SIZE_EX = 85 ; (* SevenZipGetOriginalSizeEx *)
    ISARC_GET_COMPRESSED_SIZE_EX = 86 ; (* SevenZipGetCompressedSizeEx *)
    ISARC_SETOWNERWINDOWEX64 = 87 ; (* SevenZipSetOwnerWindowEx64 *)
    ISARC_KILLOWNERWINDOWEX64 = 88 ; (* SevenZipKillOwnerWindowEx64 *)
    ISARC_SET_ENUM_MEMBERS_PROC64 = 89 ; (* SevenZipSetEnumMembersProc64 *)
    ISARC_CLEAR_ENUM_MEMBERS_PROC64 = 90 ; (* SevenZipClearEnumMembersProc64 *)
    ISARC_OPEN_ARCHIVE2 = 91 ; (* SevenZipOpenArchive2 *)
    ISARC_GET_ARC_READ_SIZE = 92 ; (* SevenZipGetArcReadSize *)
    ISARC_GET_ARC_READ_SIZE_EX = 93 ; (* SevenZipGetArcReadSizeEx*)


    // Errors
    ERROR_START = $8000;

    // (* WARNING *)
    ERROR_DISK_SPACE = $8005;
    ERROR_READ_ONLY = $8006;
    ERROR_USER_SKIP = $8007;
    ERROR_UNKNOWN_TYPE = $8008;
    ERROR_METHOD = $8009;
    ERROR_PASSWORD_FILE = $800A;
    ERROR_VERSION = $800B;
    ERROR_FILE_CRC = $800C;
    ERROR_FILE_OPEN = $800D;
    ERROR_MORE_FRESH = $800E;
    ERROR_NOT_EXIST = $800F;
    ERROR_ALREADY_EXIST = $8010;

    ERROR_TOO_MANY_FILES = $8011;

    // (* ERROR *)
    ERROR_MAKEDIRECTORY = $8012;
    ERROR_CANNOT_WRITE = $8013;
    ERROR_HUFFMAN_CODE = $8014;
    ERROR_COMMENT_HEADER = $8015;
    ERROR_HEADER_CRC = $8016;
    ERROR_HEADER_BROKEN = $8017;
    ERROR_ARC_FILE_OPEN = $8018;
    ERROR_NOT_ARC_FILE = $8019;
    ERROR_CANNOT_READ = $801A;
    ERROR_FILE_STYLE = $801B;
    ERROR_COMMAND_NAME = $801C;
    ERROR_MORE_HEAP_MEMORY = $801D;
    ERROR_ENOUGH_MEMORY = $801E;
    ERROR_ALREADY_RUNNING = $801F;
    ERROR_USER_CANCEL = $8020;
    ERROR_HARC_ISNOT_OPENED = $8021;
    ERROR_NOT_SEARCH_MODE = $8022;
    ERROR_NOT_SUPPORT = $8023;
    ERROR_TIME_STAMP = $8024;
    ERROR_TMP_OPEN = $8025;
    ERROR_LONG_FILE_NAME = $8026;
    ERROR_ARC_READ_ONLY = $8027;
    ERROR_SAME_NAME_FILE = $8028;
    ERROR_NOT_FIND_ARC_FILE = $8029;
    ERROR_RESPONSE_READ = $802A;
    ERROR_NOT_FILENAME = $802B;
    ERROR_TMP_COPY = $802C;
    ERROR_EOF = $802D;
    ERROR_ADD_TO_LARC = $802E;
    ERROR_TMP_BACK_SPACE = $802F;
    ERROR_SHARING = $8030;
    ERROR_NOT_FIND_FILE = $8031;
    ERROR_LOG_FILE = $8032;
    ERROR_NO_DEVICE = $8033;
    ERROR_GET_ATTRIBUTES = $8034;
    ERROR_SET_ATTRIBUTES = $8035;
    ERROR_GET_INFORMATION = $8036;
    ERROR_GET_POINT = $8037;
    ERROR_SET_POINT = $8038;
    ERROR_CONVERT_TIME = $8039;
    ERROR_GET_TIME = $803a;
    ERROR_SET_TIME = $803b;
    ERROR_CLOSE_FILE = $803c;
    ERROR_HEAP_MEMORY = $803d;
    ERROR_HANDLE = $803e;
    ERROR_TIME_STAMP_RANGE = $803f;
    ERROR_MAKE_ARCHIVE = $8040;
    ERROR_NOT_CONFIRM_NAME = $8041;
    ERROR_UNEXPECTED_EOF = $8042;
    ERROR_INVALID_END_MARK = $8043;
    ERROR_INVOLVED_LZH = $8044;
    ERROR_NO_END_MARK = $8045;
    ERROR_HDR_INVALID_SIZE = $8046;
    ERROR_UNKNOWN_LEVEL = $8047;
    ERROR_BROKEN_DATA = $8048;

    FA_RDONLY = $01;
    FA_HIDDEN = $02;
    FA_SYSTEM = $04;
    FA_LABEL = $08;
    FA_DIREC = $10;
    FA_ARCH = $20;
    FA_ENCRYPTED = $40;

    ERROR_7ZIP_START = $8100;

    ERROR_WARNING = $8101;
    ERROR_FATAL = $8102;
    ERROR_DURING_DECOMPRESSION = $8103;
    ERROR_DIR_FILE_WITH_64BIT_SIZE = $8104;
    ERROR_FILE_CHANGED_DURING_OPERATION = $8105;

    ARCHIVETYPE_ZIP = 1;
    ARCHIVETYPE_7Z = 2;


    type

    HARC = integer;

    TSevenZipEXTRACTINGINFO = record
    dwFileSize : DWORD;
    dwWriteSize : DWORD;
    szSourceFileName : array[ 0..FNAME_MAX32 ] of char;
    dummy1 : array[ 0..2 ] of char;
    szDestFileName : array[ 0..FNAME_MAX32 ] of char;
    dummy : array[ 0..2 ] of char;
    end;

    TSevenZipEXTRACTINGINFOEX = record
    exinfo : TSevenZipEXTRACTINGINFO;
    dwCompressedSize : DWORD;
    dwCRC : DWORD;
    uOSType : UINT;
    wRatio : WORD;
    wDate : WORD;
    wTime : WORD;
    szAttribute : array[ 0..7 ] of char;
    szMode : array[ 0..7 ] of char;
    end;

    TSevenZipINDIVIDUALINFO = record
    dwOriginalSize : DWORD;
    dwCompressedSize : DWORD;
    dwCRC : DWORD;
    uFlag : UINT;
    uOSType : UINT;
    wRatio : WORD;
    wDate : WORD;
    wTime : WORD;
    szFilename : array[ 0..FNAME_MAX32 ] of char;
    dummy1 : array[ 0..2 ] of char;
    szAttribute : array[ 0..7 ] of char;
    szMode : array[ 0..7 ] of char;
    end;

    TSevenZipCommand = function (const hWnd: HWND; szCmdLine: PChar; szOutput: PChar; dwSize: DWORD): Integer; stdcall;
    TSevenZipGetVersion = function : WORD; stdcall;
    TSevenZipGetCursorMode = function : BOOL; stdcall;
    TSevenZipSetCursorMode = function( CursorMode : BOOL ) : BOOL; stdcall;
    TSevenZipGetCursorInterval = function : WORD; stdcall;
    TSevenZipSetCursorInterval = function( CursorInterval : WORD ) : WORD; stdcall; // millisecs
    TSevenZipGetBackgroundMode = function : BOOL; stdcall;
    TSevenZipSetBackgroundMode = function( BackgroundMode : BOOL ) : BOOL; stdcall;
    TSevenZipGetRunning = function : BOOL; stdcall;

    TSevenZipConfigDialog = function( hwnd : HWND; szOptionBuffer : PChar; iMode : integer ) : BOOL; stdcall;
    TSevenZipCheckArchive = function( szFilename : PChar; iMode : integer ) : BOOL; stdcall;
    TSevenZipGetFileCount = function( szArcFile : PChar ) : integer; stdcall;
    TSevenZipQueryFunctionList = function( iFunction : integer ) : BOOL; stdcall;

    TSevenZipOpenArchive = function( hwnd : HWND; szFileName : PChar; dwMode : DWORD ) : HARC; stdcall;
    TSevenZipCloseArchive = function( harc : HARC ) : integer; stdcall;
    TSevenZipFindFirst = function( harc : HARC; szFilename : PChar; var lpSubInfo : TSevenZipINDIVIDUALINFO ) : integer; stdcall;
    TSevenZipFindNext = function( harc : HARC; var lpSubInfo : TSevenZipINDIVIDUALINFO ) : integer; stdcall;
    TSevenZipGetArcFileName = function( harc : HARC; lpBuffer : pchar; nSize : integer ) : integer; stdcall;
    TSevenZipGetArcFileSize = function( harc : HARC ) : DWORD; stdcall;
    TSevenZipGetArcOriginalSize = function( harc : HARC ) : DWORD; stdcall;
    TSevenZipGetArcCompressedSize = function( harc : HARC ) : DWORD; stdcall;
    TSevenZipGetArcRatio = function( harc : HARC ) : WORD; stdcall;
    TSevenZipGetArcDate = function( harc : HARC ) : WORD; stdcall;
    TSevenZipGetArcTime = function( harc : HARC ) : WORD; stdcall;
    TSevenZipGetArcOSType = function( harc : HARC ) : UINT; stdcall;
    TSevenZipIsSFXFile = function( harc : HARC ) : integer; stdcall;
    TSevenZipGetFileName = function( harc : HARC ; lpBuffer : PChar; nsize : integer) : integer; stdcall;
    TSevenZipGetOriginalSize = function( harc : HARC ) : DWORD; stdcall;
    TSevenZipGetCompressedSize = function( harc : HARC ) : DWORD; stdcall;
    TSevenZipGetRatio = function( harc : HARC ) : WORD; stdcall;
    TSevenZipGetDate = function( harc : HARC ) : WORD; stdcall;
    TSevenZipGetTime = function( harc : HARC ) : WORD; stdcall;
    TSevenZipGetCRC = function( harc : HARC ) : DWORD; stdcall;
    TSevenZipGetAttribute = function( harc : HARC ) : integer; stdcall;
    TSevenZipGetOSType = function( harc : HARC ) : UINT; stdcall;
    TSevenZipGetMethod = function( harc : HARC ; lpBuffer : PChar; nsize : integer) : integer; stdcall;
    TSevenZipGetWriteTime = function( harc : HARC ) : DWORD; stdcall;
    TSevenZipGetWriteTimeEx = function( harc : HARC; var lpftLastWriteTime : FILETIME ) : BOOL; stdcall;
    TSevenZipGetArcCreateTimeEx = function( harc : HARC; var lpftCreationTime : FILETIME ) : BOOL; stdcall;
    TSevenZipGetArcAccessTimeEx = function( harc : HARC; var lpftLastAccessTime : FILETIME ) : BOOL; stdcall;
    TSevenZipGetArcWriteTimeEx = function( harc : HARC; var lpftLastWriteTime : FILETIME ) : BOOL; stdcall;
    TSevenZipGetArcFileSizeEx = function( harc : HARC; var lpllSize : TLargeInteger ) : BOOL; stdcall;
    TSevenZipGetArcOriginalSizeEx = function( harc : HARC; var lpllSize : TLargeInteger ) : BOOL; stdcall;
    TSevenZipGetArcCompressedSizeEx = function( harc : HARC; var lpllSize : TLargeInteger ) : BOOL; stdcall;
    TSevenZipGetOriginalSizeEx = function( harc : HARC; var lpllSize : TLargeInteger ) : BOOL; stdcall;
    TSevenZipGetCompressedSizeEx = function( harc : HARC; var lpllSize : TLargeInteger ) : BOOL; stdcall;

    // Callback func should return FALSE to cancel the archiving process, else TRUE
    TSevenZipCallbackProc = function( hWnd : HWND; uMsg, nState : UINT; var ExInfo : TSevenZipEXTRACTINGINFOEX ) : BOOL; stdcall;

    TSevenZipSetOwnerWindow = function( hwnd : HWND ) : BOOL; stdcall;
    TSevenZipClearOwnerWindow = function : BOOL; stdcall;
    TSevenZipSetOwnerWindowEx = function( hwnd : HWND; CallbackProc : TSevenZipCallbackProc ) : BOOL; stdcall;
    TSevenZipKillOwnerWindowEx = function( hwnd : HWND ) : BOOL; stdcall;

    TSevenZipGetSubVersion = function : WORD; stdcall;
    TSevenZipGetArchiveType = function( szFileName : pchar ) : integer; stdcall;
    TSevenZipSetUnicodeMode = function( bUnicode : BOOL ) : BOOL; stdcall;

    function LoadSevenZipDLL : Boolean;
    function UnloadSevenZipDLL : Boolean;

    // NB: add '-hide' to command line switches if you want the CallBack function to be called
    // (set up via SevenZipSetOwnerWindowEx).
    // otherwise the DLL uses it's own internal progress dialog
    function SevenZipCommand( hWnd : HWND; // parent window
    CommandLine : string; // 7zip command line (see 7zip docs)
    var CommandOutput : string; // returns 7zip output
    MaxCommandOutputLen : integer = 32768 ) : integer;

    // simplified func to create archive
    function SevenZipCreateArchive( hWnd : HWND; // parent window handle
    ArchiveFilename : string;
    BaseDirectory : string; // all filenames in FileList must be relative to this directory (absolute paths e.g. "c:\temp\test.txt" not allowed, but "temp\test.txt" allowed)
    FileList : string; // comma separated files to be added to archive (wildcards ok)
    CompressionLevel : integer; // 0 = none, 9=max
    CreateSolidArchive : Boolean; // solid = better compression for multiple files
    RecurseFolders : Boolean; // recurse folders?
    Password: String; // '' Nothing happens
    ShowProgress : Boolean; // if true uses dll's internal progress indicator (callback func ignored)
    Callback : TSevenZipCallbackProc = nil ) // optional callback (ShowProgress must be false)
    : integer;

    // simplified func to extract archive
    function SevenZipExtractArchive( hWnd : HWND; // parent window handle
    ArchiveFilename : string;
    FileList : string; // comma separated files to be extracted (wildcards ok)
    RecurseFolders : Boolean;
    Password: String; // '' Nothing happens
    ExtractFullPaths : Boolean;
    ExtractBaseDir : string;
    ShowProgress : Boolean; // if true uses dll's internal progress indicator (callback func ignored)
    Callback : TSevenZipCallbackProc = nil ) // optional callback (ShowProgress must be false)
    : integer; // 0 = success


    var
    _SevenZipCommand : TSevenZipCommand = nil;
    SevenZipGetVersion : TSevenZipGetVersion = nil;
    SevenZipGetCursorMode : TSevenZipGetCursorMode = nil;
    SevenZipSetCursorMode : TSevenZipSetCursorMode = nil;
    SevenZipGetCursorInterval : TSevenZipGetCursorInterval = nil;
    SevenZipSetCursorInterval : TSevenZipSetCursorInterval = nil;
    SevenZipGetBackgroundMode : TSevenZipGetBackgroundMode = nil;
    SevenZipSetBackgroundMode : TSevenZipSetBackgroundMode = nil;
    SevenZipGetRunning : TSevenZipGetRunning = nil;

    SevenZipConfigDialog : TSevenZipConfigDialog = nil;
    SevenZipCheckArchive : TSevenZipCheckArchive = nil;
    SevenZipGetFileCount : TSevenZipGetFileCount = nil;
    SevenZipQueryFunctionList : TSevenZipQueryFunctionList = nil;

    SevenZipOpenArchive : TSevenZipOpenArchive = nil;
    SevenZipCloseArchive : TSevenZipCloseArchive = nil;
    SevenZipFindFirst : TSevenZipFindFirst = nil;
    SevenZipFindNext : TSevenZipFindNext = nil;
    SevenZipGetArcFileName : TSevenZipGetArcFileName = nil;
    SevenZipGetArcFileSize : TSevenZipGetArcFileSize = nil;
    SevenZipGetArcOriginalSize : TSevenZipGetArcOriginalSize = nil;
    SevenZipGetArcCompressedSize : TSevenZipGetArcCompressedSize = nil;
    SevenZipGetArcRatio : TSevenZipGetArcRatio = nil;
    SevenZipGetArcDate : TSevenZipGetArcDate = nil;
    SevenZipGetArcTime : TSevenZipGetArcTime = nil;
    SevenZipGetArcOSType : TSevenZipGetArcOSType = nil;
    SevenZipIsSFXFile : TSevenZipIsSFXFile = nil;
    SevenZipGetFileName : TSevenZipGetFileName = nil;
    SevenZipGetOriginalSize : TSevenZipGetOriginalSize = nil;
    SevenZipGetCompressedSize : TSevenZipGetCompressedSize = nil;
    SevenZipGetRatio : TSevenZipGetRatio = nil;
    SevenZipGetDate : TSevenZipGetDate = nil;
    SevenZipGetTime : TSevenZipGetTime = nil;
    SevenZipGetCRC : TSevenZipGetCRC = nil;
    SevenZipGetAttribute : TSevenZipGetAttribute = nil;
    SevenZipGetOSType : TSevenZipGetOSType = nil;
    SevenZipGetMethod : TSevenZipGetMethod = nil;
    SevenZipGetWriteTime : TSevenZipGetWriteTime = nil;
    SevenZipGetWriteTimeEx : TSevenZipGetWriteTimeEx = nil;
    SevenZipGetArcCreateTimeEx : TSevenZipGetArcCreateTimeEx = nil;
    SevenZipGetArcAccessTimeEx : TSevenZipGetArcAccessTimeEx = nil;
    SevenZipGetArcWriteTimeEx : TSevenZipGetArcWriteTimeEx = nil;
    SevenZipGetArcFileSizeEx : TSevenZipGetArcFileSizeEx = nil;
    SevenZipGetArcOriginalSizeEx : TSevenZipGetArcOriginalSizeEx = nil;
    SevenZipGetArcCompressedSizeEx: TSevenZipGetArcCompressedSizeEx= nil;
    SevenZipGetOriginalSizeEx : TSevenZipGetOriginalSizeEx = nil;
    SevenZipGetCompressedSizeEx : TSevenZipGetCompressedSizeEx = nil;

    SevenZipSetOwnerWindow : TSevenZipSetOwnerWindow = nil;
    SevenZipClearOwnerWindow : TSevenZipClearOwnerWindow = nil;
    SevenZipSetOwnerWindowEx : TSevenZipSetOwnerWindowEx = nil;
    SevenZipKillOwnerWindowEx : TSevenZipKillOwnerWindowEx = nil;

    SevenZipGetSubVersion : TSevenZipGetSubVersion = nil;
    SevenZipGetArchiveType : TSevenZipGetArchiveType = nil;
    SevenZipSetUnicodeMode : TSevenZipSetUnicodeMode = nil;

    implementation
    uses classes, sysutils, dialogs;

    var
    _SevenZipDLLHandle : THandle = 0;

    function LoadSevenZipDLL : Boolean;

    begin
    Result := FALSE;

    if _SevenZipDLLHandle <> 0 then
    exit;

    _SevenZipDLLHandle := LoadLibrary( '7-zip32.dll' );
    if _SevenZipDLLHandle > 0 then
    begin
    _SevenZipCommand := GetProcAddress( _SevenZipDLLHandle, 'SevenZip' );

    SevenZipGetVersion := GetProcAddress( _SevenZipDLLHandle, 'SevenZipGetVersion' );
    SevenZipGetCursorMode := GetProcAddress( _SevenZipDLLHandle, 'SevenZipGetCursorMode' );
    SevenZipSetCursorMode := GetProcAddress( _SevenZipDLLHandle, 'SevenZipSetCursorMode' );
    SevenZipGetCursorInterval := GetProcAddress( _SevenZipDLLHandle, 'SevenZipGetCursorInterval' );
    SevenZipSetCursorInterval := GetProcAddress( _SevenZipDLLHandle, 'SevenZipSetCursorInterval' );
    SevenZipGetBackgroundMode := GetProcAddress( _SevenZipDLLHandle, 'SevenZipGetBackgroundMode' );
    SevenZipSetBackgroundMode := GetProcAddress( _SevenZipDLLHandle, 'SevenZipSetBackgroundMode' );
    SevenZipGetRunning := GetProcAddress( _SevenZipDLLHandle, 'SevenZipGetRunning' );

    SevenZipConfigDialog := GetProcAddress( _SevenZipDLLHandle, 'SevenZipConfigDialog' );
    SevenZipCheckArchive := GetProcAddress( _SevenZipDLLHandle, 'SevenZipCheckArchive' );
    SevenZipGetFileCount := GetProcAddress( _SevenZipDLLHandle, 'SevenZipGetFileCount' );
    SevenZipQueryFunctionList := GetProcAddress( _SevenZipDLLHandle, 'SevenZipQueryFunctionList' );

    SevenZipOpenArchive := GetProcAddress( _SevenZipDLLHandle, 'SevenZipOpenArchive' );
    SevenZipCloseArchive := GetProcAddress( _SevenZipDLLHandle, 'SevenZipCloseArchive' );
    SevenZipFindFirst := GetProcAddress( _SevenZipDLLHandle, 'SevenZipFindFirst' );
    SevenZipFindNext := GetProcAddress( _SevenZipDLLHandle, 'SevenZipFindNext' );
    SevenZipGetArcFileName := GetProcAddress( _SevenZipDLLHandle, 'SevenZipGetArcFileName' );
    SevenZipGetArcFileSize := GetProcAddress( _SevenZipDLLHandle, 'SevenZipGetArcFileSize' );
    SevenZipGetArcOriginalSize := GetProcAddress( _SevenZipDLLHandle, 'SevenZipGetArcOriginalSize' );
    SevenZipGetArcCompressedSize := GetProcAddress( _SevenZipDLLHandle, 'SevenZipGetArcCompressedSize' );
    SevenZipGetArcRatio := GetProcAddress( _SevenZipDLLHandle, 'SevenZipGetArcRatio' );
    SevenZipGetArcDate := GetProcAddress( _SevenZipDLLHandle, 'SevenZipGetArcDate' );
    SevenZipGetArcTime := GetProcAddress( _SevenZipDLLHandle, 'SevenZipGetArcTime' );
    SevenZipGetArcOSType := GetProcAddress( _SevenZipDLLHandle, 'SevenZipGetArcOSType' );
    SevenZipIsSFXFile := GetProcAddress( _SevenZipDLLHandle, 'SevenZipIsSFXFile' );
    SevenZipGetFileName := GetProcAddress( _SevenZipDLLHandle, 'SevenZipGetFileName' );
    SevenZipGetOriginalSize := GetProcAddress( _SevenZipDLLHandle, 'SevenZipGetOriginalSize' );
    SevenZipGetCompressedSize := GetProcAddress( _SevenZipDLLHandle, 'SevenZipGetCompressedSize' );
    SevenZipGetRatio := GetProcAddress( _SevenZipDLLHandle, 'SevenZipGetRatio' );
    SevenZipGetDate := GetProcAddress( _SevenZipDLLHandle, 'SevenZipGetDate' );
    SevenZipGetTime := GetProcAddress( _SevenZipDLLHandle, 'SevenZipGetTime' );
    SevenZipGetCRC := GetProcAddress( _SevenZipDLLHandle, 'SevenZipGetCRC' );
    SevenZipGetAttribute := GetProcAddress( _SevenZipDLLHandle, 'SevenZipGetAttribute' );
    SevenZipGetOSType := GetProcAddress( _SevenZipDLLHandle, 'SevenZipGetOSType' );
    SevenZipGetMethod := GetProcAddress( _SevenZipDLLHandle, 'SevenZipGetMethod' );
    SevenZipGetWriteTime := GetProcAddress( _SevenZipDLLHandle, 'SevenZipGetWriteTime' );
    SevenZipGetWriteTimeEx := GetProcAddress( _SevenZipDLLHandle, 'SevenZipGetWriteTimeEx' );
    SevenZipGetArcCreateTimeEx := GetProcAddress( _SevenZipDLLHandle, 'SevenZipGetArcCreateTimeEx' );
    SevenZipGetArcAccessTimeEx := GetProcAddress( _SevenZipDLLHandle, 'SevenZipGetArcAccessTimeEx' );
    SevenZipGetArcWriteTimeEx := GetProcAddress( _SevenZipDLLHandle, 'SevenZipGetArcWriteTimeEx' );
    SevenZipGetArcFileSizeEx := GetProcAddress( _SevenZipDLLHandle, 'SevenZipGetArcFileSizeEx' );
    SevenZipGetArcOriginalSizeEx := GetProcAddress( _SevenZipDLLHandle, 'SevenZipGetArcOriginalSizeEx' );
    SevenZipGetArcCompressedSizeEx := GetProcAddress( _SevenZipDLLHandle, 'SevenZipGetArcCompressedSizeEx' );
    SevenZipGetOriginalSizeEx := GetProcAddress( _SevenZipDLLHandle, 'SevenZipGetOriginalSizeEx' );
    SevenZipGetCompressedSizeEx := GetProcAddress( _SevenZipDLLHandle, 'SevenZipGetCompressedSizeEx' );

    SevenZipSetOwnerWindow := GetProcAddress( _SevenZipDLLHandle, 'SevenZipSetOwnerWindow' );
    SevenZipClearOwnerWindow := GetProcAddress( _SevenZipDLLHandle, 'SevenZipClearOwnerWindow' );
    SevenZipSetOwnerWindowEx := GetProcAddress( _SevenZipDLLHandle, 'SevenZipSetOwnerWindowEx' );
    SevenZipKillOwnerWindowEx := GetProcAddress( _SevenZipDLLHandle, 'SevenZipKillOwnerWindowEx' );

    SevenZipGetSubVersion := GetProcAddress( _SevenZipDLLHandle, 'SevenZipGetSubVersion' );
    SevenZipGetArchiveType := GetProcAddress( _SevenZipDLLHandle, 'SevenZipGetArchiveType' );
    SevenZipSetUnicodeMode := GetProcAddress( _SevenZipDLLHandle, 'SevenZipSetUnicodeMode' );

    Result := TRUE;
    end;

    end;

    function UnloadSevenZipDLL : Boolean;

    begin
    Result := FALSE;

    if _SevenZipDLLHandle <> 0 then
    begin
    FreeLibrary( _SevenZipDLLHandle );
    _SevenZipDLLHandle := 0;
    Result := TRUE;
    end;
    end;

    function SevenZipCommand( hWnd : HWND;
    CommandLine : string;
    var CommandOutput : string;
    MaxCommandOutputLen : integer = 32768 ) : integer;

    begin
    SetLength( CommandOutput, MaxCommandOutputLen );
    Result := _SevenZipCommand( hWnd, PChar( CommandLine), PChar( CommandOutput ), MaxCommandOutputLen - 1 );
    CommandOutput := string( PChar( CommandOutput ) );
    end;

    function RemoveQuotes( s : string ) : string;

    begin
    if ( Copy( s, 1, 1 ) = '"' ) and ( Copy( s, Length( s ), 1 ) = '"' ) then
    Result := Copy( s, 2, Length( s ) - 2 )
    else
    Result := s;
    end;

    function SevenZipCreateArchive( hWnd : HWND; // parent window handle
    ArchiveFilename : string;
    BaseDirectory : string; // all filenames in FileList must be relative to this directory (absolute paths e.g. "c:\temp\test.txt" not allowed, but "temp\test.txt" allowed)
    FileList : string; // comma separated files to be added to archive (wildcards ok) - all relative to BaseDirectory
    CompressionLevel : integer; // 0 = none, 9=max
    CreateSolidArchive : Boolean; // solid = better compression for multiple files
    RecurseFolders : Boolean; // recurse folders?
    Password: String; // '' Nothing happens
    ShowProgress : Boolean; // if true uses dll's internal progress indicator (callback func ignored)
    Callback : TSevenZipCallbackProc = nil ) // optional callback (ShowProgress must be false)
    : integer; // 0 = success

    var
    flist : TStringList;
    S7ResultOutput : string;
    s7cmd : string;
    i : integer;
    cwd : string;

    begin
    //
    cwd := GetCurrentDir;

    // change to base dir so relative paths work correctly
    if not SetCurrentDir( BaseDirectory ) then
    begin
    Result := SZ_ERROR;
    exit;
    end;

    flist := TStringList.Create;
    flist.CommaText := FileList;

    if @Callback <> nil then
    ShowProgress := FALSE;

    try
    s7cmd := 'a "' + ArchiveFilename + '" "' + RemoveQuotes( flist[ 0 ] ) + '"';

    for i := 1 to flist.count - 1 do
    begin
    s7cmd := s7cmd + ' -i';
    if RecurseFolders then
    s7cmd := s7cmd + 'r';

    s7cmd := s7cmd + '!"' + RemoveQuotes( flist[ i ] ) + '"';
    end;

    s7cmd := s7cmd + ' -mx' + IntToStr( CompressionLevel );
    if RecurseFolders then
    s7Cmd := s7cmd + ' -r';

    if Password <> '' then
    s7Cmd := s7Cmd + ' -p' + Password;

    if CreateSolidArchive then
    s7cmd := s7cmd + ' -ms=on'
    else
    s7cmd := s7cmd + ' -ms=off';

    if not ShowProgress then
    s7cmd := s7cmd + ' -hide';

    try
    SevenZipSetOwnerWindowEx( hwnd, Callback );

    SevenZipCommand( hWnd, s7cmd, s7ResultOutput );

    SevenZipSetOwnerWindowEx( hwnd, nil );

    S7ResultOutput := string(PChar(S7ResultOutput));

    if Pos( 'operation aborted', Lowercase( S7ResultOutput ) ) > 0 then
    Result := SZ_CANCELLED
    else
    if Pos('error:', LowerCase(S7ResultOutput)) > 0 then
    Result := SZ_ERROR
    else
    Result := SZ_OK;
    except
    on e : exception do
    begin
    Result := SZ_DLLERROR;
    end;
    end;

    finally
    flist.Free;
    SetCurrentDir( cwd ); // back to where we were
    end;
    end;

    function SevenZipExtractArchive( hWnd : HWND; // parent window handle
    ArchiveFilename : string;
    FileList : string; // comma separated files to be extracted (wildcards ok)
    RecurseFolders : Boolean;
    Password: String; // '' Nothing happens
    ExtractFullPaths : Boolean;
    ExtractBaseDir : string;
    ShowProgress : Boolean; // if true uses dll's internal progress indicator (callback func ignored)
    Callback : TSevenZipCallbackProc = nil ) // optional callback (ShowProgress must be false)
    : integer; // 0 = success

    var
    flist : TStringList;
    S7ResultOutput : string;
    s7cmd : string;
    i : integer;

    begin
    //
    flist := TStringList.Create;
    flist.CommaText := FileList;

    if @Callback <> nil then
    ShowProgress := FALSE;

    if FileList = '' then
    FileList := '*.*';

    try
    if ExtractFullPaths then
    s7cmd := 'x'
    else
    s7cmd := 'e';

    s7cmd := s7cmd + ' "' + ArchiveFilename + '" -o"' + ExtractBaseDir + '"';

    s7cmd := s7cmd + ' "' + flist[ 0 ] + '"';


    for i := 1 to flist.count - 1 do
    begin
    s7cmd := s7cmd + ' -i';
    if RecurseFolders then
    s7cmd := s7cmd + 'r';

    s7cmd := s7cmd + '!"' + RemoveQuotes( flist[ i ] ) + '"';
    end;

    if RecurseFolders then
    s7cmd := s7cmd + ' -r';

    if Password <> '' then
    s7Cmd := s7Cmd + ' -p' + Password;

    if not ShowProgress then
    s7cmd := s7cmd + ' -hide';

    s7cmd := s7cmd + ' -y'; // yes on all queries (will overwrite)

    try
    SevenZipSetOwnerWindowEx( hwnd, Callback );

    SevenZipCommand( hWnd, s7cmd, s7ResultOutput );

    SevenZipSetOwnerWindowEx( hwnd, nil );

    S7ResultOutput := string(PChar(S7ResultOutput));

    if Pos( 'operation aborted', Lowercase( S7ResultOutput ) ) > 0 then
    Result := SZ_CANCELLED
    else
    if Pos('error:', LowerCase(S7ResultOutput)) > 0 then
    Result := SZ_ERROR
    else
    Result := SZ_OK;
    except
    on e : exception do
    begin
    Result := SZ_DLLERROR;
    end;
    end;

    finally
    flist.Free;
    end;
    end;


    end.
    Voici le bout de code que j'ai fait pour tester et ça plante a l'appel de

    SevenZipCommand( hWnd, s7cmd, s7ResultOutput );



    procedure TForm1.Button1Click(Sender: TObject);
    var
    handle : Thandle;
    begin
    LoadSevenZipDLL;
    OpenDialog1.Title :='Ouvrir un fichier';
    Try
    if OpenDialog1.Execute then
    begin
    SevenZipExtractArchive( handle ,
    Opendialog1.FileName,
    '*.*',
    True,
    '',
    True,
    'c:\temp1',
    False);

    end;
    finally
    UnloadSevenZipDLL;
    end;
    end;

    merci si vous avez une solution

  2. #2
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Par défaut
    Waw que de code et même pas le texte du message d'erreur
    Comment tu veux qu'on réponde à ta question?
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  3. #3
    T-B
    T-B est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 69
    Par défaut
    il n'y a pas de message d'erreur, juste un plantage blocage du PC

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 184
    Par défaut
    Et le format 7-zip est-il différent du format zip? Si c'est pas le cas je te suggère d'essayer un autre composant zip comme zipmaster (que j'utilise) http://www.delphizip.net/index.html

    Il y en a d'autres sur torry.net

  5. #5
    T-B
    T-B est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 69
    Par défaut
    merci je ne connaissais pas je vais essayer, mais j'aurrais voulu comprendre

  6. #6
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    Citation Envoyé par sfpx
    Et le format 7-zip est-il différent du format zip?
    Oui, absolument. Le format 7-zip compresse beaucoup mieux ( arrive à des perfs proches du CAB si mes souvenirs sont bons ) et un fichier 7z n'a rien à voir avec un fichier zip

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 184
    Par défaut
    Citation Envoyé par smyley
    Citation Envoyé par sfpx
    Et le format 7-zip est-il différent du format zip?
    Oui, absolument. Le format 7-zip compresse beaucoup mieux ( arrive à des perfs proches du CAB si mes souvenirs sont bons ) et un fichier 7z n'a rien à voir avec un fichier zip
    Dac, merci de l'info

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 26
    Par défaut
    bon Ok la question à été posé il y a plus d'un an .

    oui mais voilà moi aussi je me penche sur le problème et donc je fais une petite recherche sur le sujet ZIP 7z et là whouaou !! une superbe interface de compression en Delphi, c'est pas magique ça ...

    donc juste un truc dans le code il y une erreur au moins :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    procedure TForm1.Button1Click(Sender: TObject);
    var
    handle : Thandle;
    begin
    LoadSevenZipDLL;
    OpenDialog1.Title :='Ouvrir un fichier';
    Try
    if OpenDialog1.Execute then
    begin
    SevenZipExtractArchive( handle ,
    .......
    il est pas necessaire de crée une variable de type Handle, juste passer à la fonction le handle de l'application. Dans le cas ici on passe à la fonction un handle nil donc ça plante ça me semble logique.

    il faudrait plutôt faire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    LoadSevenZipDLL;
    OpenDialog1.Title :='Ouvrir un fichier';
    Try
    if OpenDialog1.Execute then
    begin
    SevenZipExtractArchive( application.handle ,
    Opendialog1.FileName,
    '*.*',
    True,
    '',
    True,
    'c:\temp1',
    True);
    
    end;
    finally
    UnloadSevenZipDLL;
    end;
    end;
    voilà si ça peut aider quelqu'un, chez moi ça marche comme ça !!!!!

    Par contre aprés avoir jeté un oeil dans le code de l'unité fourni, je trouve que la solution n'a rien d'élegante puisqu'elle consiste à reconstituer une ligne de commande avec les paramètres fourni....

    il y a les infos mais elles ne sont en Russe ou ukrainien et j'avoue avoir des difficulté avec ces deux langues ....

    A+

Discussions similaires

  1. requete avec OBCD et visual c++
    Par Anonymous dans le forum MFC
    Réponses: 12
    Dernier message: 18/11/2004, 16h15
  2. [langage] Comparer Perl avec d'autres langages comme C ?
    Par Anonymous dans le forum Langage
    Réponses: 3
    Dernier message: 10/08/2002, 23h52
  3. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10
  4. [Kylix] Runtime error 230 avec INDY
    Par Anonymous dans le forum EDI
    Réponses: 2
    Dernier message: 23/03/2002, 11h51
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo