HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Utoljára megnyitott állomány nevek listája


Példaprogram letöltése

7474 bájt

Olyan alkalmazásokban, ahol különböző fájlokat szerkesztünk, például szövegszerkesztők, vagy maga a Delphi, a Fájl menüben találhatunk egy listát az utoljára megnyitott fájlokról. Mindegyik fájlhoz egy menüpont tartozik, amit kiválasztva az adott fájlt betölthetjük. Ha hasonló alkalmazást szeretnénk készíteni, akkor ennek a feladatnak a megoldása viszonylag bonyolult, sok programozást kíván. Kivéve, ha van egy komponensünk, ami mindezt a feladatot magára vállalja, a lista kezelésétől, tárolásától kezdve egészen a menübe való beillesztésig.
A mellékelt példaprogram megnyitása előtt a MRUList.pas-ban lévő komponenst telepítenie kell a Delphi alá.

A komponens feladata abból áll, hogy kezel egy tetszőleges számú elemből álló listát, mely lista elemeit egy szintén tetszőlegesen megadható menüpont után beilleszt egy menübe. Amikor a listához egy új elemet adunk, akkor az kerül a lista elejére, míg a többi elem egy hellyel lejjebb kerül. Ha a megadott számúnál több elemet tartalmaz a lista, akkor az utolsó elemek törlődnek. A menüpontok kezelését is meg kell oldani, méghozzá egy eseménnyel, ami akkor jön létre, amikor valamelyik menüpontot kiválasztotta a felhasználó. Ennél az eseménynél megkapjuk a kiválasztott menüponthoz tartozó lista elemet, illetve annak sorszámát. A listának akkor van értelme, ha azt el is lehet menteni, és a program újbóli indításakor az utoljára használt lista jelenik meg a menüben.
A listának nem feltétlenül kell fájlneveket tartalmaznia, de valószínűleg ez a leggyakoribb alkalmazás.
A komponens MRUList property-je TStringList típusú, és ebben adhatjuk meg a lista elemeit. Az elemek maximális száma a MaxEntries property-ben adható meg. Ha Numbers property értéke igaz, akkor a menüben a menüpontok előtt a sorszámuk is megjelenik. A MenuItem property-ben kell megadni azt a menüpontot, ami után a lista elemek megjelennek a menüben. Ez lehetőleg egy elválasztó vonal legyen (Caption='-'). Az elemek után egy elválasztó vonal automatikusan megjelenik, ezért ezt nem kell előzőleg létrehozni.
A lista mentése a Registry-be történik, ezért a kulcsot a RegistryKey property-ben meg kell adni. A listát a Save metódussal lehet menteni, míg a Load-dal betölteni. Az eljárásoknak nem kell külön paramétert megadni. Természetesen a lista fájlba is elmenthető, illetve onnan betölthető, az MRUList property SaveToFile, illetve LoadFromFile metódusaival.
A lista törléséhez a Clear eljárást kell meghívni.

A menüpontokat egy egyedi azonosítóval látjuk el, amit a Tag property-ben fogunk tárolni. Hogy ne ütközzön a már meglévő menüpontokkal ez az érték, ezért létrehozunk egy típusos konstanst, aminek az értéke lesz az egyedi azonosító kiinduló értéke. Ennek a konstansnak az értékét programból is megváltoztathatjuk, de nem valószínű, hogy erre szükség van.
  FIRSTTAGID: longint = 10000;
Minden menüpont OnClick eseményéhez hozzárendeljük a DoClick eljárást. Ebben az eljárásban generálunk egy OnClick eseményt, amihez egy külön típust definiálunk. Az eseménynek a szokásos Sender-en kívül még plusz két paramétere van. Az első aTMenuItem típusú, és a kiválasztott menüpont objektumát adja meg, míg a második a kiválasztott lista elem. Ha a menüpontok sorszámmal vannak ellátva (Numbers=true), akkor is az eredeti sztringet kapjuk meg.

A menüpontok létrehozása, és hozzáadása a menühöz az AddMenuItems eljárásban történik. Ebben először meghívjuk a RemoveMenuItems eljárást, ami törli az előzőleg létrehozott menüpontokat. A törlés egy ciklusban történik, amiben végigmegyünk az adott menü összes menüpontján, és ahol a Tag property értéke nagyobb, vagy egyenlő a FIRSTTAGID konstansban megadott értéknél, azt a menüpontot töröljük.
    i:=0;
    while i<FMenuItem.Parent.Count do begin
      if FMenuItem.Parent.Items[i].Tag>=FIRSTTAGID then
        FMenuItem.Parent.Delete(i) else inc(i);
    end;
Miután töröltük a menüpontokat, az ndx változóban eltároljuk a MenuItem property-ben megadott menüpont index-ét, illetve ahhoz még hozzáadunk egyet, mivel az első létrehozandó menüpontot ezután a menüpont után kell beszúrni.
    ndx:=FMenuItem.Parent.IndexOf(FMenuItem)+1;
Egy ciklussal végigmegyünk a lista elemein, és mindegyikhez létrehozunk egy TMenuItem típusú objektumot. Beállítjuk ennek Tag és Caption property-jeit, és az OnClick eseményhez hozzárendeljük a komponens DoClick eljárását. Ezután beszúrjuk az új menüpontot a megfelelő sorszámú pozícióba.
    for i:=0 to FMRUList.Count-1 do begin
      mitem:=TMenuItem.Create(self);
      mitem.Tag:=FIRSTTAGID+i;  mitem.Caption:=FMRUList[i];
      if FNumbers then mitem.Caption:=IntToStr(i+1)+'. '+mitem.Caption;
      mitem.OnClick:=DoClick;
      FMenuItem.Parent.Insert(ndx+i, mitem);
    end;
Miután az összes listában lévő elemet beszúrtuk a menübe, még egy elválasztó vonalat is létrehozunk a menüben. Ez egy egyszerű menüpont, aminek a Caption property-jébe egy "-" jelet kell írni.
    if FMRUList.Count>0 then begin
      mitem:=TMenuItem.Create(self);
      mitem.Tag:=FIRSTTAGID+FMRUList.Count;
      mitem.Caption:='-';
      FMenuItem.Parent.Insert(ndx+FMRUList.Count, mitem);
    end;
A mellékelt példaprogramból a komponens használata egyértelműen látszik. Amikor megnyitunk egy fájlt, a komponens Add eljárásával hozzáadjuk azt a listához, ezután a komponens a többit elintézi. Beszúrja az új fájlnevet menübe, és törli a már felesleges elemeket. Amikor kiválasztjuk az egyik fájlnevet a menüből, akkor létrejön egy OnClick esemény, amiben megkapjuk a kiválasztott fájl nevét.


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 467. 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 |