HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

OpenDialog és SaveDialog Windows 2000-es változata


Példaprogram letöltése

6415 bájt

Windows 2000-től egy újabb típusú fájl megnyitás illetve mentés dialógus ablakkal találkozhatunk. Ebben ikonok formájában megtalálhatók a speciális mappák (Sajátgép, Dokumentumok, stb.), amiknek segítségével könnyedén az adott helyre ugorhatunk. Ebben a példában egy olyan komponenst készítünk, amely egy ilyen dialógus ablakot jelenít meg, ráadásul egy property-n keresztül azt is meghatározhatjuk, hogy fájl megnyitás, vagy mentés lesz-e. Azok is használhatják a komponenst, akik nem Windows 2000-et vagy Me-t használnak, ugyanis a komponens figyelembe veszi az adott operációs rendszer verzióját, és régebbi verzió esetén az eredeti dialógus ablakot jeleníti meg.
A mellékelt példaprogram megnyitása előtt a FileNameDialog.pas-ban lévő komponenst telepítenie kell a Delphi alá.

A komponenst a TOpenDialog osztályból származtatjuk, amit kiegészítünk néhány új property-vel és metódussal. A ShowPlaces logikai típusú property-vel megadhatjuk, hogy a panel az ikonokkal megjelenjen-e, vagy sem. A DialogType property-vel azt határozhatjuk meg, hogy fájl megnyitás (Open Dialog), vagy fájl-mentés (Save Dialog) dialógus ablakot szeretnénk megnyitni.
A komponens konstruktorában lekérdezzük az operációs rendszer verziószámát, és az FWin2000 logikai változó értékét ennek megfelelően állítjuk be.
Szükség lesz a TOpenFileName rekord kibővítésére. Ez csupán annyit jelent, hogy az eredeti struktúrához hozzájön még egy FlagsEx nevű DWORD típusú mező. Ebben tudjuk majd megadni, hogy legyen-e ikon panel, vagy sem. Ehhez deklarálunk egy konstanst, aminek az értéke 1. Ha ezt a konstanst értékül adjuk a FlagsEx mezőnek, akkor az ikon panel nem jelenik meg.
A dialógus ablak megnyitásához kell egy függvény, aminek a deklarációja így néz ki:
function DlgFunc(var DialogData: TOpenFileName): Bool; stdcall;
Mint látható, ennek paramétere TOpenFileName típusú. Ebben nincs benne a FlagsEx mező, ezért ezt egy globális változón keresztül adjuk meg, a dialógus ablak típusával együtt. Ehhez deklaráltunk egy új típust, amiben a két adatot megadhatjuk:
  TDialogOpts = record
    DialogType: TFileNameDialogType;
    FlagsEx: DWORD;
  end;
...
var
  DialogOpts: TDialogOpts;
A dialógus ablak megnyitása az Execute függvény meghívásával történik. Ebben ellenőrizzük, hogy az operációs rendszer megfelelő-e, és ha nem, akkor az eredeti Execute függvényt hívjuk meg. Ha megfelelő, akkor a DialogOpts változót feltöltjük a szükséges adatokkal, majd a DoExecute függvénnyel meghívjuk a DlgFunc függvényt. A DoExecute függvény paramétereként át kell adni a DlgFunc függvény címét. A DoExecute függvény visszatérési értéke a DlgFunc függvény visszatérési értéke lesz, és ez lesz az Execute függvényé is.

Most nézzük meg részletesen, hogy mi is történik a DlgFunc függvényben:
var ExData : TOpenFileNameEx;
...
   Move(DialogData, ExData, sizeof(DialogData));
   ExData.lStructSize := sizeof(TOpenFileNameEx);
   ExData.FlagsEx := DialogOpts.FlagsEx;
Az ExData változó TOpenFileNameEx típusú, ami már tartalmazza a FlagsEx mezőt is. A paraméterként megkapott DialogData változó tartalmát átmásoljuk az ExData változóba. Ezután az lStructSize mező értékét beállítjuk az ExData változó méretére, mivel itt eredetileg a DialogData változó mérete van eltárolva. A FlagsEx mezőnek átadjuk a DialogOpts globális változó FlagsEx mezőjének értékét.
A következő lépésben megnézzük, hogy milyen dialógus ablakot kell megnyitni (Open vagy Save Dialog), és ennek megfelelően meghívjuk a szükséges függvényt, paraméterként átadva neki az ExData változót.
   if DialogOpts.DialogType=dtOpenDialog then
     result := GetOpenFileNameEx(ExData)
   else
     result := GetSaveFileNameEx(ExData);
end;

Cikksorozat

#IDKategóriaCikk címeSorozat
1063DelphiInterbase 6 alkalmazása Delphi-ben1. rész
1072DelphiInterbase 6 alkalmazása Delphi-ben2. rész
1084DelphiInterbase 6 alkalmazása Delphi-ben3. rész
1092DelphiTIBTable komponens4. rész
1102DelphiTIBTransaction komponens5. rész
1111DelphiTIBQuery komponens6. rész
1120DelphiTIBStoredProc komponens7. rész
1128DelphiTIBDataSet komponens8. rész
1141DelphiTIBSQL komponens9. rész
1150DelphiTIBSQLMonitor komponens10. rész
1159DelphiTIBUpdateSQL komponens11. rész
1167DelphiIBEvents komponens12. rész
1177DelphiIBDatabaseInfo komponens használata13. rész
1183DelphiTIBConfigService komponens14. rész
1192DelphiTIBSecurityService komponens15. rész
1204DelphiTIBServerProperties komponens16. rész
1213DelphiTIBBackupService komponens17. rész
1222DelphiTIBRestoreService komponens18. rész
1231DelphiTIBValidationService komponens19. rész
1240DelphiTIBStatisticalService komponens20. rész
1249DelphiTIBLogService komponens21. rész
1258DelphiTIBUninstall komponens22. rész
1267DelphiInterBase Express komponenscsomag23. rész


Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2001 évkönyv 448. 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 |