login about faq

I read your Chilkat Zip Activex has the capabilities of showing the user progress monitoring while zipping/unzipping

Do you have a Visual Foxpro example of: zip/unzip progress monitoring

Please forgive me if I have overlooked a pre-existing example

asked Jun 15 '12 at 08:30

chilkat's gravatar image

chilkat ♦♦
11.8k316358421


  • uses FTP2 = ChilKat_9_5_0.FTP2 - non SFTP
  • using chilkat ftp2 activeX for upload/download

  • ftpsend.prg - send/upload, verify FTP server's certificate and authenticity.
  • The intent is to verify the authenticity of the server before passing
  • a login/password to it.
  • syntax: llOK=FtpSend(tcFileHere) &&..file here to send ie:c:appnamefilename.txt
  • check cert using chilkat ftp2 activeX
  • see callback at the bottom of this program
  • NOTE: PATH is hardcoded APPNAME **** Function FtpCertTest()

***** begin of testimg area ! DO procchk ! setsys() ! Local lcFtpType ! lcFtpType='U' &&..upload

! * upload ! IF lcFtpType='U' ! lcFile = "d:AppNamebackupsTESTBIGFTP.ZIP" ! lcFileThere = JUSTFNAME(lcFile)

! ELSE

! * download ! lcFile = "d:AppNametempTESTBIGFTP.ZIP" ! lcFileThere = JUSTFNAME(lcFile) ! ENDIF

! ? FtpCertTest(lcFile,'D') &&..U=UPLOAD D=DOWNLOAD ! RETURN ! FUNCTION FtpCertTest ***** end of testimg area begin PARAMETERS tcFileHere,tcFtpOpt tcFileHere is file to upload/download * tcFtpOpt = 'U'=upload 'D'=download


  • set vars ! DO procchk ! setsys() PRIVATE pnThermCnt,pnRecs,plStarted,pcTitle pnThermCnt=1 pnRecs=100 plStarted=.F. LOCAL llOK,lcUserName,lcPassword,lcIpAddress,lcPort,lcOnError,llFailed,; loFtp,lnSuccess,loCert,lcFileHere,lcFileThere,lnWkArea,lcProcs,lcFtpOpt,lcRemoteDir lcFtpOpt=IIF(TYPE('tcFtpOpt')='L','U',tcFtpOpt) lnSuccess=0 lnWkArea=SELECT() lcFileHere=gcAppPath+'FTPOUT'+JUSTFNAME(ALLTRIM(tcFileHere)) lcFileThere=JUSTFNAME(lcFileHere) lcRemoteDir='' tcTitle=''

  • get login settings dbopen('sysinfo') &&..stored info in a DBF file lcUserName = ALLTRIM(qFtpUser) &&..get login,password,ip,port from sysinfo vars lcPassword = ALLTRIM(qFtpPw) lcIpAddress = ALLTRIM(qFtpIp) lcPort = ALLTRIM(qFtpPort) && Default FTP PORT SELECT(lnWkArea)

lcOnError=ON('ERROR') &&..capture error msg *ON ERROR llFailed=.T.


  • does file exist? IF lcFtpOpt='U' IF ! FILE(lcFileHere) MESSAGEBOX(lcFileHere+' is missing','') RETURN .F. ENDIF ELSE IF FILE(lcFileHere) DeleFile(lcFileHere) &&..if file exist delete it, then check if file exist to check received RETURN .F. ENDIF ENDIF

  • talk to user WAIT WINDOW 'Sending....' NOWAIT

*** SEND FILE


  • bail-out loop DO WHILE .T.

  • oCtrl will be the object in Visual FoxPro to receive the event notifications.
  • It will implement one or more of the ActiveX's event callback methods loCtrl = CREATEOBJECT("Ftp2SendCtrl")

  • create object loFtp = CREATEOBJECT('Chilkat_9_5_0.Ftp2')

  • unlock component lnSuccess = loFtp.UnlockComponent("your unlock code") IF (lnSuccess <> 1) MESSAGEBOX('Could not Unlock ChilKatFTP2!',64,'Message') EXIT ENDIF

  • The EVENTHANDLER tells the COM object to send events to the VFP object: EVENTHANDLER(loFtp,loCtrl)

  • set login and website loFtp.HOSTNAME = lcIpAddress loFtp.Username = lcUserName loFtp.PASSWORD = lcPassword

  • Set timeouts - in seconds/milliseconds - added 3-24-13 loFtp.CONNECTTIMEOUT= gnFtpTimeOut &&..default 5 seconds - number of seconds loFtp.IdleTimeoutMs = gnFtpIdle &&..default 5000 - 5 seconds - number of milliseconds

**** added for new chilkat 950 * If this example does not work, try using passive mode * by setting this to 1. loFtp.Passive = 0

  • Establish an AUTH SSL secure channel after connection on the standard FTP port 21.
  • some of my companys used one or the other for AuthTls

IF 'BAYOU' $ gcqCompany .or. 'BOO' $ gcqCompany .or. 'BOO2' $ gcqCompany loFtp.AuthTls = 0 ELSE loFtp.AuthTls = 1 ENDIF

  • The Ssl property is for establishing an implicit SSL connection on port 990.
  • Do not set it. loFtp.Ssl = 1

**** added for new chilkat 950 * Indicate that the FTP server must have a verifiable SSL certificate. * Do not accept self-signed certs or certificates that are * expired, revoked, or cannot be verified to a root authority: * loFtp.RequireSslCertVerify = 1 &&..1=dont accept self-signed, 0=accept self-signed

  • In this example, the certificate's Common Name (CN) must match the required string exactly:
  • loFtp.SetSslCertRequirement("subjectcn","AppNameWebName.com")

  • Connect and login to the FTP server. lnSuccess = loFtp.CONNECT() IF (lnSuccess <> 1) MESSAGEBOX('Could not connect to server!',64,'Message') EXIT ENDIF

  • After logging on, you may examine the FTP server's cert: loCert = loFtp.GetSslServerCert() IF (loCert = NULL ) WAIT CLEAR MESSAGEBOX("No server certificate! - Connection is not secure! Disconnecting") EXIT ELSE

    • Display the distinguished name of the SSL cert.
    • MESSAGEBOX(loCert.SubjectDN)
    • MESSAGEBOX("Secure FTP Channel Established!") ENDIF

***** UPLOAD ***** IF lcFtpOpt='U' pcTitle='Uploading' * Change Directory AppNameFTPIN lnSuccess = loFtp.ChangeRemoteDir("IN") IF (lnSuccess <> 1) MESSAGEBOX('Could not change to directory: IN',64,'Message') EXIT ENDIF

*  Upload a file
lnSuccess = loFtp.PUTFILE(lcFileHere,lcFileThere) &&..must used exact path/filename
IF (lnSuccess <> 1)
  MESSAGEBOX('Could not Upload file',64,'Message')
  EXIT
ENDIF

ELSE

************************** DOWNLOAD **************************
pcTitle='Downloading'
* Change Directory \AppName\FTP\IN
*lcStrXml = loFtp.DirTreeXml()  &&..used for testing
lnSuccess = loFtp.ChangeRemoteDir("OUT")
IF (lnSuccess <> 1)
  MESSAGEBOX('Could not change to directory: OUT',64,'Message')
  EXIT
ENDIF

* get remote directory
*lcRemoteDir=loFtp.GetCurrentRemoteDir() &&..used for testing
lnSuccess = loFtp.GETFILE(lcFileThere,lcFileHere)
IF (lnSuccess <> 1)
  MESSAGEBOX('Could not Downloaded file',64,'Message')
  EXIT
ENDIF

ENDIF


  • exit out EXIT ENDDO

  • disconnect loFtp.Disconnect()

  • was it successful? 1=successful, anything else means failed IF lnSuccess=1 llOK=.T. ENDIF

WAIT CLEAR ThermFtpSend() RELEASE loFtp,loCtrl ON ERROR &lcOnError &&..reset ON ERROR SET PROC TO genproc RETURN llOK eof: FtpSend.prg


**** function ThermFtpSend() show progress bar/ to close: ThermFtpSend() by itself or therm(.F.) syntax: ThermFtpSend(.t.,prec/rectot100,msg) ie: ! LOCAL lnThermCnt ! lnThermCnt=1 ! * update therm ! SET DEVICE TO SCREEN ! therm(.T.,((lnThermCnt/pnRecs)100),pcRptName) ! therm(.T.,((lnThermCnt/pnRecs)100),pcRptName) ! lnThermCnt=lnThermCnt+1 ! SET DEVICE TO PRINTER ! * close therm ! therm(.T.,100,'') ! therm(.T.,100,'') ! INKEY(1) !* therm() FUNCTION ThermFtpSend PARAMETERS tlActive, tnPercent, tcMsg &&..tlUpdate

DO CASE

  • print line CASE WEXIST("pcdoneW0") .AND. PARAMETERS()=3 @ 3.846,5.800 TO 4.538, 64.6-58.8*(1-tnPercent/100) PATTERN 1 PEN 1, 8 COLOR RGB(,,,255,196,230) &&..COLOR RGB(,,,255,0,0) RETURN .T.

CASE ! tlActive .AND. WEXIST("pcdoneW0") .OR. PARAMETERS()=0 .AND. WEXIST("pcdoneW0") @ 3.846,5.800 TO 4.538, 64.6-58.8*(1-100/100) PATTERN 1 PEN 1, 8 COLOR RGB(,,,255,196,230) &&..COLOR RGB(,,,128,0,0) INKEY(1) RELEASE WINDOW pcdonew0 SET CURSOR ON RETURN .T.

CASE PARAMETERS()=0 RELEASE WINDOW pcdonew0 SET CURSOR ON RETURN .T.

  • define window CASE ! WEXIST("pcdoneW0") DEFINE WINDOW pcdonew0 AT 0.000, 0.000 SIZE 10,70.600 FONT "Courier New", 10 ; NOFLOAT NOCLOSE NOMINIMIZE COLOR RGB(,,,185,234,253) &&..COLOR RGB(,,,192,192,192) MOVE WINDOW pcdonew0 CENTER ACTIVATE WINDOW pcdonew0 TOP SET CURSOR OFF @ 1.00, 1 SAY tcMsg SIZE 1.000,59.00 FONT "Courier New", 10 STYLE "B" &&..PICTURE "@I" @ 3.769,2.400 SAY "0" FONT "Courier New", 10 STYLE "BT" @ 3.769,66.200 SAY "100%" FONT "Courier New", 10 STYLE "BT" @ 9.00, 1 SAY 'press ESCape to Exit' SIZE 1.000,59.00 FONT "Courier New", 10 STYLE "B" PICTURE "@I" ENDCASE

RETURN .T. ENDFUNC * eofunc: ThermFtpSend()


  • chilkat callback methods

**** Define Class FtpSendCtrl methods for callback for ftp * Definition of control class: DEFINE CLASS Ftp2SendCtrl AS SESSION OLEPUBLIC IMPLEMENTS _IChilkatFtp2Events IN "ChilkatAx-9.5.0-win32.dll" &&.."old ChilkatFTP2.dll"


  • init PROCEDURE INIT DOEVENTS ENDPROC

  • AbortCheck

  • [id(2), helpstring("method AbortCheck")] HRESULT AbortCheck([out] long *abort) PROCEDURE _IChilkatFtp2Events_AbortCheck(Abort AS NUMBER) AS VOID; HELPSTRING "method AbortCheck"
  • add user code here *? 'AbortCheck' ThermFtpSend() pnThermCnt=1
  • DOEVENTS ENDPROC

  • ProgressInfo

  • [id(1), helpstring("method ProgressInfo")] HRESULT ProgressInfo([in] cName as String, [in] cValue as String) PROCEDURE _IChilkatFtp2Events_ProgressInfo(cName AS STRING, cValue AS STRING) AS VOID; HELPSTRING "method ProgressInfo"
  • add user code here
  • @ 1,10 SAY 'ProgressInfo cName: '+ALLTRIM(cName)
  • @ 2,10 SAY 'ProgressInfo cValue: '+ALLTRIM(cValue) ? 'ProgressInfo cName: '+ALLTRIM(cName) ? 'ProgressInfo cValue: '+ALLTRIM(cValue) ENDPROC

  • PercentDone

  • [id(1), helpstring("method PercentDone")] HRESULT PercentDone([in] long pctDone) PROCEDURE _IChilkatFtp2Events_PercentDone(PctDone AS NUMBER, ChkAbort AS NUMBER) AS VOID; HELPSTRING "method PercentDone"
  • add user code here ThermFtpSend(.T.,((PctDone/pnRecs)*100),pcTitle) @ 5,10 SAY ' PercentDone: '+ALLTRIM(STR(PctDone))
  • INKEY(.1) ENDPROC

  • VerifyDeleteDir PROCEDURE _IChilkatFtp2Events_VerifyDeleteDir(DirPath AS STRING, SkipFileDir AS NUMBER) AS VOID; HELPSTRING "method VerifyDeleteDir"

  • DOEVENTS ENDPROC

  • VerifyDeleteFile PROCEDURE _IChilkatFtp2Events_VerifyDeleteFile(FilePath AS STRING, SkipFileDir AS NUMBER) AS VOID; HELPSTRING "method VerifyDeleteFile"

  • DOEVENTS ENDPROC

! **** FTP Upload CallBack Procs *** ! * PutProgress ! PROCEDURE _IChilkatFtp2Events_PutProgress(PctDone AS NUMBER) AS VOID; ! HELPSTRING "method PutProgress" ! ThermFtpSend(.T.,((PctDone/pnRecs)100),'UpLoading') ! * ? 'PutProgress' ! DOEVENTS !* ENDPROC

  • BeginUploadFile PROCEDURE _IChilkatFtp2Events_BeginUploadFile(FilePath AS STRING, SkipFile AS NUMBER) AS VOID; HELPSTRING "method BeginUploadFile" pnThermCnt=1
  • ? 'BeginUploadFile'
  • DOEVENTS ENDPROC

  • EndUploadFile PROCEDURE _IChilkatFtp2Events_EndUploadFile(FilePath AS STRING, numBytes AS NUMBER) AS VOID; HELPSTRING "method EndUploadFile"

  • ? 'EndUploadFile' ThermFtpSend()
  • DOEVENTS ENDPROC

  • UploadRate
  • [id(3), helpstring("method UploadRate")] HRESULT UploadRate([in] long byteCount, [in] long bytesPerSec) PROCEDURE _IChilkatFtp2Events_UploadRate(ByteCount AS NUMBER, BytesPerSec AS NUMBER) AS VOID; HELPSTRING "method UploadRate"
  • add user code here @ 6,10 SAY 'Bytes Uploaded: '+ALLTRIM(STR(ByteCount)) @ 7,10 SAY ' Bytes Per Sec: '+ALLTRIM(STR(BytesPerSec)) ENDPROC

  • VerifyUploadDir PROCEDURE _IChilkatFtp2Events_VerifyUploadDir(DirPath AS STRING, SkipFileDir AS NUMBER) AS VOID; HELPSTRING "method VerifyUploadDir" *DOEVENTS ENDPROC

**** FTP Download CallBack Procs ****

  • BeginDownloadFile PROCEDURE _IChilkatFtp2Events_BeginDownloadFile(FilePath AS STRING, SkipFileDir AS NUMBER) AS VOID; HELPSTRING "method BeginDownloadFile" pnThermCnt=1
  • ? 'BeginDownloadFile' *DOEVENTS ENDPROC

  • EndDownloadFile PROCEDURE _IChilkatFtp2Events_EndDownloadFile(FilePath AS STRING, numBytes AS NUMBER) AS VOID; HELPSTRING "method EndDownloadFile"

  • ? 'EndDownloadFile: '+ALLTRIM(FilePath)
  • ? 'FileSize: '+ALLTRIM(STR(numBytes)) ThermFtpSend() *DOEVENTS ENDPROC

PROCEDURE _IChilkatFtp2Events_GetProgress(percentDone AS NUMBER) AS VOID;


  • DownloadRate
  • [id(4), helpstring("method DownloadRate")] HRESULT DownloadRate([in] long byteCount, [in] long bytesPerSec) PROCEDURE _IChilkatFtp2Events_DownloadRate(ByteCount AS NUMBER, BytesPerSec AS NUMBER) AS VOID; HELPSTRING "method DownloadRate"
  • add user code here ? 'DownloadRate: '+ALLTRIM(STR(ByteCount))+' Bytes Per Sec: '+ALLTRIM(STR(BytesPerSec)) @ 6,10 SAY 'DownLoad Rate: '+ALLTRIM(STR(ByteCount)) @ 7,10 SAY 'Bytes Per Sec: '+ALLTRIM(STR(BytesPerSec)) ENDPROC

! * GetProgress ! PROCEDURE _IChilkatFtp2Events_GetProgress(percentDone AS NUMBER) AS VOID; ! HELPSTRING "method GetProgress" ! * ? 'GetProgress' ! ThermFtpSend(.T.,((percentDone/pnRecs)100),'DownLoading') ! DOEVENTS !* ENDPROC

  • VerifyDownloadDir PROCEDURE _IChilkatFtp2Events_VerifyDownloadDir(DirPath AS STRING, SkipFileDir AS NUMBER) AS VOID; HELPSTRING "method VerifyDownloadDir" DOEVENTS ENDPROC

ENDDEFINE * eoClass: FtpSendCtrl()


  • ftpsend.prg

link

answered Apr 11 at 10:27

ixl's gravatar image

ixl
261

I'm very sorry for the lack of documentation for event callbacks. It is on our long "TO DO" list.

A general discussion of using ActiveX event callbacks in Foxpro is at this Chilkat blog post: http://www.cknotes.com/?p=118

The ActiveX events (in IDL format) are listed here: http://www.cknotes.com/?p=119

Any argument that is a "long *" named "skip", "exclude", or "abort" are arguments that your application may set to 1 to skip, or exclude the next file, or to abort the entire operation.

link

answered Jun 15 '12 at 08:36

chilkat's gravatar image

chilkat ♦♦
11.8k316358421

Matt...thanks for info:

however _IChilkatZip2Events_SkippedForUnzip is missing when CTRL is instantiated below is the list you gave me...using IDL I need tge PARAMETERS for: _IChilkatZip2Events_SkippedForUnzip() also, are there any OTHER Methods missing???

Zip: dispinterface _IChilkatZip2Events { properties: methods:

HRESULT UnzipPercentDone([in] long percentDone, [out] long *abort);

HRESULT WriteZipPercentDone([in] long percentDone, [out] long *abort);

HRESULT AddFilesEnd();

HRESULT FileUnzipped([in] BSTR filename, [in] long compressedSize, [in] long uncompressedSize, [out] long abort); HRESULT ToBeAdded([in] BSTR filename, [in] long fileSize, [out] long exclude);

HRESULT FileAdded([in] BSTR filename, [in] long fileSize, [out] long *abort);

HRESULT UnzipBegin();

HRESULT UnzipEnd();

HRESULT WriteZipBegin();

HRESULT WriteZipEnd();

HRESULT ToBeZipped([in] BSTR filename, [in] long fileSize, [out] long *exclude);

HRESULT FileZipped([in] BSTR filename, [in] long fileSize, [in] long compressedSize, [out] long *abort);

HRESULT ToBeUnzipped([in] BSTR filename, [in] long compressedSize, [in] long uncompressedSize, [out] long *exclude);

HRESULT AddFilesBegin(); };


****** FOXPRO CODE BEGIN OF ZIP-CALLBACK *****


  • Definition of control class: DEFINE CLASS ZipCtrl AS SESSION OLEPUBLIC

  • init class vars
  • The IMPLEMENTS... line below is what makes Foxpro take control over the methods
  • Long as you have DOEVENTS in it VFP keeps process events, although not as fast as normal.

  • NOTE - This path part of the IMPLEMENTS must point to the dll, so locate and
  • correct it before you are using the program. IMPLEMENTS _IChilkatZip2Events IN "d:ltswinChilkatZip2.dll" nProgress = 0

  • init PROCEDURE INIT

ENDPROC


  • UnzipPercentDone
  • HRESULT UnzipPercentDone([in] long percentDone, [out] long *abort) PROCEDURE _IChilkatZip2Events_UnzipPercentDone(percentDone AS NUMBER, Abort AS NUMBER) AS VOID; HELPSTRING "method UnzipPercentDone"
  • add user code here ? 'UnzipPercentDone' ENDPROC

  • WriteZipPercentDone
  • HRESULT WriteZipPercentDone([in] long percentDone, [out] long *abort) PROCEDURE _IChilkatZip2Events_WriteZipPercentDone(percentDone AS NUMBER, Abort AS NUMBER) AS VOID; HELPSTRING "method WriteZipPercentDone"
  • add user code here ? 'WriteZipPercentDone' ENDPROC

  • AddFilesEnd
  • HRESULT AddFilesEnd() PROCEDURE _IChilkatZip2Events_AddFilesEnd() AS VOID; HELPSTRING "method AddFilesEnd"
  • add user code here ? 'AddFilesEnd' THIS.nProgress = percentDone ACTIVATE SCREEN @0,0 SAY "Sending: " + TRANSFORM(THIS.nProgress) DOEVENTS ENDPROC

  • FileUnzipped
  • HRESULT FileUnzipped([in] BSTR filename, [in] long compressedSize, [in] long uncompressedSize,[out] long *abort) PROCEDURE _IChilkatZip2Events_FileUnzipped(FileName AS STRING, CompressedSize AS NUMBER,; UnCompressedSize AS NUMBER, Abort AS NUMBER) AS VOID; HELPSTRING "method FileUnzipped"
  • add user code here ? 'FileUnzipped' ENDPROC

  • ToBeAdded
  • HRESULT ToBeAdded([in] BSTR filename, [in] long fileSize, [out] long *exclude) PROCEDURE _IChilkatZip2Events_ToBeAdded(FileName AS STRING, FileSize AS NUMBER,; Exclude AS NUMBER) AS VOID; HELPSTRING "method ToBeAdded"
  • add user code here ? 'ToBeAdded' ENDPROC

  • FileAdded
  • HRESULT FileAdded([in] BSTR filename, [in] long fileSize, [out] long *abort) PROCEDURE _IChilkatZip2Events_FileAdded(FileName AS STRING, FileSize AS NUMBER, Abort AS NUMBER) AS VOID; HELPSTRING "method FileAdded"
  • add user code here ? 'FileAdded' ENDPROC

  • UnzipBegin
  • HRESULT UnzipBegin() PROCEDURE _IChilkatZip2Events_UnzipBegin() AS VOID; HELPSTRING "method UnzipBegin"
  • add user code here ? 'UnzipBegin' ENDPROC

  • UnzipEnd
  • HRESULT UnzipEnd() PROCEDURE _IChilkatZip2Events_UnzipEnd() AS VOID; HELPSTRING "method UnzipEnd"
  • add user code here ? 'UnzipEnd' ENDPROC

  • WriteZipBegin
  • HRESULT WriteZipBegin() PROCEDURE _IChilkatZip2Events_WriteZipBegin() AS VOID; HELPSTRING "method WriteZipBegin"
  • add user code here ? 'WriteZipBegin' ENDPROC

  • WriteZipEnd
  • HRESULT WriteZipEnd() PROCEDURE _IChilkatZip2Events_WriteZipEnd() AS VOID; HELPSTRING "method WriteZipEnd"
  • add user code here ? 'WriteZipEnd' ENDPROC

  • ToBeZipped
  • HRESULT ToBeZipped([in] BSTR filename, [in] long fileSize, [out] long *exclude) PROCEDURE _IChilkatZip2Events_ToBeZipped(FileName AS STRING, FileSize AS NUMBER,; Exclude AS NUMBER) AS VOID; HELPSTRING "method ToBeZipped"
  • add user code here ? 'ToBeZipped' ENDPROC

  • FileZipped
  • HRESULT FileZipped([in] BSTR filename, [in] long fileSize, [in] long compressedSize, [out] long *abort) PROCEDURE _IChilkatZip2Events_FileZipped(FileName AS STRING, FileSize AS NUMBER,; CompressSize AS NUMBER, Abort AS NUMBER) AS VOID; HELPSTRING "method FileZipped"
  • add user code here ? 'FileZipped' ENDPROC

  • ToBeUnzipped
  • HRESULT ToBeUnzipped([in] BSTR filename, [in] long compressedSize, [in] long uncompressedSize, [out] long *exclude) PROCEDURE _IChilkatZip2Events_ToBeUnzipped(FileName AS STRING, CompressedSize AS NUMBER,; UnCompressSize AS NUMBER, Exclude AS NUMBER) AS VOID; HELPSTRING "method ToBeUnzipped"
  • add user code here ? 'ToBeUnzipped' ENDPROC

  • AddFilesBegin
  • HRESULT AddFilesBegin() PROCEDURE _IChilkatZip2Events_AddFilesBegin() AS VOID; HELPSTRING "method AddFilesBegin"
  • add user code here ? 'AddFilesBegin' ENDPROC

*** MATT I NEED THE PARAMETERS * SkippedForUnzip * HRESULT SkippedForUnzip() PROCEDURE _IChilkatZip2Events_SkippedForUnzip(FileName AS NUMBER,Abort AS NUMBER,) AS VOID; HELPSTRING "method SkippedForUnzip" * add user code here ? 'SkippedForUnzip' ENDPROC

ENDDEFINE


****** END OF ZIP-CALLBACK *******


link

answered Jun 16 '12 at 20:35

Raezer's gravatar image

Raezer
1

And how is it in the new 9_5_0 Version ?

link

answered Apr 09 at 02:28

Flashlight's gravatar image

Flashlight
1

It works Perfect ! I have all of Chilkat's Callback ActiveX modules working in Foxpro 9 flawlessly. Been using Chilkat for years, Chilkat Rocks!

link

answered Apr 10 at 21:13

ixl's gravatar image

ixl
261

But can you post a little example?

I wrote in an other blog: I wrote in VFP :

loFtp = CreateObject('Chilkat_9_5_0.Ftp2') ... loCtrl = CREATEOBJECT("ChilkatCtrl") && Create controlling object:

EVENTHANDLER(toFTP, loCtrl)

but EVENTHANDLER return .F. and nothing is fired in the events.. Any sample code for me would be great beacuse chilkat has nothing there for the new version (i coundln't find)

link

answered Apr 11 at 04:55

Flashlight's gravatar image

Flashlight
1

I generated .prg samples/templates for each of the Chilkat ActiveX classes that have events. See http://www.chilkatforum.com/questions/10182/chilkat-foxpro-events-prg-event-classes

link

answered Apr 11 at 13:03

chilkat's gravatar image

chilkat ♦♦
11.8k316358421

Your answer
toggle preview

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Markdown Basics

  • *italic* or __italic__
  • **bold** or __bold__
  • link:[text](http://url.com/ "title")
  • image?![alt text](/path/img.jpg "title")
  • numbered list: 1. Foo 2. Bar
  • to add a line break simply add two spaces to where you would like the new line to be.
  • basic HTML tags are also supported

Tags:

×96
×87
×22
×18

Asked: Jun 15 '12 at 08:30

Seen: 1,911 times

Last updated: Apr 11 at 13:03

powered by OSQA