HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Rendszer-folyamatjelző ablak megjelenítése


Példaprogram letöltése

4684 bájt

A rendszerben számtalan beépített dialógusablakot találunk, melyeket elérhetünk az egységek valamelyikében deklarált metódusok segítségével. Amennyiben valamilyen hosszabb feladatot végez a program, és ezt jelezni is akarjuk a felhasználónak, akkor igénybe vehetjük a rendszer egy ilyen dialógusablakát, mely megjeleníti a kívánt információkat. Cikkünkben bemutatjuk, hogyan szabható testre az adott dialógusablak.

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.
  pd.SetProgress(i, 100);
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.
pd.StopProgressDialog;

Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2003 évkönyv 727. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |