A művelet elvégzéséhez az IProgressDialog interfész lehetőségeit használjuk fel. Annak érdekében, hogy ezt megtehessük, szükség van arra, hogy egy típust hozzunk létre, melyben megadjuk az interfész használandó metódusaink deklarációit. Az interfész deklarációja a Shell32.dll állományban található.
IProgressDialog = interface
[SID_IProgressDialog]
function StartProgressDialog(hwndParent: HWND; punkEnableModless: IUnknown;
...
end;
Az alkalmazás űrlapján két gombot találunk, melyek közül az elsővel egy nem-modális, míg a másodikkal egy modális ablakot jeleníthetünk meg. Ezekhez a műveletekhez csak létre kell hozunk egy objektumot a fenti típussal, majd meghívni a metódusait.
pd: IProgressDialog;
pd := CreateComObject(CLSID_ProgressDialog) as IProgressDialog;
A SetTitle metódussal megadhatjuk, hogy milyen fejlécszöveget jelenítsen meg a dialógusablak.
pd.SetTitle('Folyamatjelző ablak');
A SetAnimation metódussal megadhatunk és betölthetünk egy állományt, melyben a megjelenő animáció kapott helyet.
pd.SetAnimation(SafeLoadLibrary('shell32.dll'), 161);
Van lehetőség arra is, hogy a törlés gombra való kattintás után milyen értesítő szöveg jelenjen meg.
pd.SetCancelMsg('Bezárás, kérem várjon...', nil);
És a StartProgressDialog metódussal meg is jeleníthetjük ezt az ablakot.
pd.StartProgressDialog(0, nil, PROGDLG_NOMINIMIZE, nil);
Mivel itt csak a PROGDLG_NOMINIMIZE konstanst adtuk meg, az ablak nem lett modális. Ehhez a metódust a PROGDLG_MODAL paraméterrel kell meghívni.
A dialógusablak számára megadhatjuk, hogy milyen ütemben számoljon, és milyen számadatokat jelenítsen meg a folyamat hátralévő idejével kapcsolatban. Ezt egy ciklussal mi magunk végezzük, vagyis minden lépéskor egy új értéket írunk a dialógusablak felületére.
for i := 1 to 100 do begin
Amennyiben a felhasználó a Törlés gombra kattintott, akkor kilépünk a ciklusból.
if pd.HasUserCancelled then break;
A folyamat aktuális állapotát a SetProgress metódussal adhatjuk meg.
A SetLine metódussal pedig kiírhatjuk a megfelelő szöveget az ablak felületére.
pd.SetLine(1, PWideChar(WideString('Átmásolva: ' + IntToStr(i div 20+1)) + ' darab (5 állományból)'), False, nil);
pd.SetLine(2, PWideChar(WideString('Százalék: ' + IntToStr(i)) + ' %'), False, nil);
Sleep(100);
end;
A művelet végén leállítjuk a folyamatot, és eltüntetjük az ablakot is.