;Autor: El_Choni EnableExplicit Procedure Ansi2Uni(st$) Protected blen Protected wbuf blen = (Len(st$)*2)+2 wbuf = AllocateMemory(blen) MultiByteToWideChar_(#CP_ACP, 0, st$, -1, wbuf, blen) ProcedureReturn wbuf EndProcedure #CLSCTX_INPROC_SERVER = 1 #PROGDLG_NORMAL = 0 #PROGDLG_AUTOTIME = 2 #PDTIMER_RESET = 1 #IDA_COPY_ANIMATION = 160 Define ProgressLimit = 1000 Define hr Define ppv.IProgressDialog Define *Title Define hShell Define *Cancel Define *Line1 Define dwCompleted Define *Line2 CoInitialize_(0) hr = CoCreateInstance_(?CLSID_ProgressDialog, #Null, #CLSCTX_INPROC_SERVER, ?IID_IProgressDialog, @ppv.IProgressDialog) If hr=#S_OK *Title = Ansi2Uni("System progress dialog box") ppv\SetTitle(*Title) hShell = OpenLibrary(0, "shell32.dll") If hShell ppv\SetAnimation(hShell, #IDA_COPY_ANIMATION) EndIf *Cancel = Ansi2Uni("Cancel") ppv\SetCancelMsg(*Cancel, 0) *Line1 = Ansi2Uni("System progress dialog test in PureBasic") ppv\SetLine(1, *Line1, #True, 0) ppv\StartProgressDialog(#Null, 0, #PROGDLG_AUTOTIME|#PROGDLG_NORMAL, 0) ppv\Timer(#PDTIMER_RESET, 0) Repeat If ppv\HasUserCancelled() MessageRequester("Messsage", "Progress cancelled") Break Else ppv\SetProgress(dwCompleted, ProgressLimit) If dwCompleted>=ProgressLimit MessageRequester("Messsage", "Progress completed") Break Else dwCompleted+1 *Line2 = Ansi2Uni("We are at progress point number "+Str(dwCompleted)) ppv\SetLine(2, *Line2, #True, 0) FreeMemory(*Line2) EndIf EndIf Delay(100) ForEver ppv\StopProgressDialog() ppv\Release() FreeMemory(*Title) FreeMemory(*Cancel) FreeMemory(*Line1) If hShell:CloseLibrary(0):EndIf Else Debug Hex(hr) EndIf CoUninitialize_() DataSection CLSID_ProgressDialog: Data.l $f8383852 Data.w $fcd3, $11d1 Data.b $a6, $b9, 0, $60, $97, $df, $5b, $d4 IID_IProgressDialog: Data.l $ebbc7c04 Data.w $315e, $11d2 Data.b $b6, $2f, 0, $60, $97, $df, $5b, $d4 EndDataSection