Delphi ActiveX
Delphi ActiveX
Create Self-Extracting Executable (Windows-only)
Demonstrates how to create a Windows self-extracting EXE.Chilkat Delphi ActiveX Downloads
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Chilkat_TLB;
...
procedure TForm1.zipAbortCheck(ASender: TObject; out abort: Integer);
begin
// TThread.Synchronize provides safety for callbacks that occur in a background thread..
TThread.Synchronize(nil, procedure begin
end);
end;
procedure TForm1.zipPercentDone(ASender: TObject; percentDone: Integer; out abort: Integer);
begin
// TThread.Synchronize provides safety for callbacks that occur in a background thread..
TThread.Synchronize(nil, procedure begin
Memo1.Lines.Add('Percent Done: ' + IntToStr(percentDone));
// Explicitly abort at 25% or greater.
// Remove this to allow for the HTTP download to run to completion.
if (percentDone > 25) then
begin
abort := 1;
end;
end);
end;
procedure TForm1.zipProgressInfo(ASender: TObject; const name: WideString; const value: WideString);
begin
// TThread.Synchronize provides safety for callbacks that occur in a background thread..
TThread.Synchronize(nil, procedure begin
Memo1.Lines.Add(name + ': ' + value);
end);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
success: Integer;
zip: TChilkatZip;
recurse: Integer;
begin
success := 0;
// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
zip := TChilkatZip.Create(Self);
zip.OnAbortCheck := zipAbortCheck;
zip.OnPercentDone := zipPercentDone;
zip.OnProgressInfo := zipProgressInfo;
// Initialize the zip object. Because we're creating
// a self-extracting EXE in this example, the filename
// passed to NewZip will never actually be created.
success := zip.NewZip('notUsed.zip');
if (success <> 1) then
begin
Memo1.Lines.Add(zip.LastErrorText);
Exit;
end;
// Append a directory tree. The AppendFiles does
// not read the file contents or append them to the zip
// object in memory. It simply appends references
// to the files so that when WriteExe (or WriteZipAndClose,
// or WriteZip, etc.) is called, the files are compressed
// and added to the archive.
recurse := 1;
zip.AppendFiles('c:/temp/a/*',recurse);
// Write "sfx.exe"
success := zip.WriteExe('c:/temp/sfx.exe');
if (success <> 1) then
begin
Memo1.Lines.Add(zip.LastErrorText);
Exit;
end;
end;