The Chilkat Delphi DLL (non-ActiveX) supports callbacks starting in version 9.5.0.82, to be released in Feb 2020. Pre-release Beta builds are available upon request.

Also see:

1) First define a function exactly as shown here. Make sure to use the “cdecl” calling convention. Returning a non-zero Result will cause the Chilkat method to abort.

function MyAbortCheck(): Integer; cdecl;
begin
    Form1.Memo1.Lines.Add('AbortCheck!');
    Result := 0;
end;

2) Set the abort check callback by calling the appropriate SetAbortCheck function. For the CkZip object it is CkZip_SetAbortCheck(zip,MyAbortCheck);

Note: This example shows AbortCheck events using CkZip.  The same technique applies to any Chilkat class having callbacks. 
For example, CkRest_SetAbortCheck.

procedure TForm1.Button1Click(Sender: TObject);
var
zip: HCkZip;
success: Boolean;
recurse: Boolean;

begin

zip := CkZip_Create();
success := CkZip_NewZip(zip,'C:/temp/out.zip');
if (success == False) then
  begin
    Memo1.Lines.Add(CkZip__lastErrorText(zip));
    Exit;
  end;

recurse := True;
success := CkZip_AppendFiles(zip,'c:/temp/someDir/*',recurse);
if (success == False) then
  begin
    Memo1.Lines.Add(CkZip__lastErrorText(zip));
    Exit;
  end;

// Setup the abort check callback.
// The HeartbeatMs property defines the number of milliseconds between AbortCheck callbacks.
CkZip_putHeartbeatMs(zip,25);
CkZip_SetAbortCheck(zip,MyAbortCheck);

// The MyAbortCheck function will be called from within CkZip_WriteZipAndClose
success := CkZip_WriteZipAndClose(zip);
if (success == False) then
  begin
    Memo1.Lines.Add(CkZip__lastErrorText(zip));
    Exit;
  end;

Memo1.Lines.Add('Zip Created!');

CkZip_Dispose(zip);

end;