
Miután a mellékelt alkalmazást elindítottuk, csak a Kilép feliratú gomb segítségével tudunk kilépni belőle. Ha a bezárás ikonra kattintunk, vagy ALT+F!-et nyomunk, az alkalmazás a háttérbe kerül. A háttérbe került alkalmazás bármikor megjeleníthető a CTRL+SHIFT+F12 billentyűkombináció lenyomásával.
Az elindítandó programokat és az indítások időpontjait egy adattáblában tároljuk el. A mellékelt példában Paradox 7 típusú adattáblát használunk, Data.db néven.
Egy TTimer komponens segítségével figyeljük, hogy melyek azok az alkalmazások, amelyeket el kell indítanunk az adott pillanatban. A TTimer 5 másodpercenként nézi végig az adattábla tartalmát.
A Data.db tábla „Elindítva” mezője segítségével figyeljük azokat a bejegyzéseket, amelyek még nem lettek elindítva. Ha a mező értéke hamis, akkor az a program elindításra vár. Elindítás után a mező értékét azonnal igazra állítjuk.
Az elindítandó programot a „Program” mező tárolja. Elindításához a ShellApi unit ShellExecute függvényét használjuk.
ShellExecute(0,'open',PChar('"'+FieldByName('Program').AsString+'"'),'','',SW_SHOW);
A ShellExecute függvénynek bármilyen állományt megadhatunk, amelyet a Windows ismer. Az operációs rendszer automatikusan megnyitja az állományhoz rendelt programot.
A ShellExecute függvény paraméterei közül az ’open’ a megnyitást jelenti. A futtatandó program elérési útját és nevét a harmadik paraméterben kell megadnunk. Ha az elérési út vagy állománynév szóközöket is tartalmaz, akkor célszerű azt „” jelek közé tennünk. Ha a megnyitandó programnak paraméterei is vannak, akkor azt a negyedik paraméterben állíthatjuk be. Az ötödik paraméter a megnyitandó program munkakönyvtárát jelenti. Ha a programot csak a háttérben akarjuk megnyitni, akkor az SW_SHOW paraméter helyett az SW_HIDE-ot kell alkalmaznunk.
Az alkalmazás lehetővé teszi, hogy a futtatandó programok mellé egy üzenetet is megjelenítsünk. Ilyenkor megjelenik a Form2 ablak. A fókuszt a SetForeGroundWindow függvény segítségével adhatjuk át egy látható ablaknak.
SetForeGroundWindow(Form2.Handle);
A függvény paraméterében az ablak azonosítóját kell megadnunk.
Ha azt akarjuk, hogy alkalmazásunk ikonja ne jelenjen meg a tálcán, a SetWindowLong függvény segítségével módosítanunk kell a tulajdonságait a következő módon.
SetWindowLong(Application.Handle, GWL_EXSTYLE,GetWindowLong(Application.Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW);
A Form OnCreate eseményében kell gondoskodnunk arról, hogy alkalmazásunk ikonja az óra mellett jelenjen meg.
Az óra mellé a Shell_NotifyIcon függvény segítségével helyezhetünk el és törölhetünk egy saját ikont.
Shell_NotifyIcon(NIM_ADD,@FIconData);
A fenti függvényhívás egy ikon létrehozására szolgál. Ha az első paraméterben NIM_DELETE-et adunk meg, akkor a függvény törli az ikont.
Azt, hogy az ikon ilyen képpel és tulajdonságokkal jelenjen meg, a második paraméterben adhatjuk meg egy TNotifyIconData típusú változó segítségével.
Az FCanClose logikai változó segítségével felügyeljük, hogy az alkalmazás bezárható-e. A változó értékét hamisra állítjuk. A hamis értéket csak a Kilép feliratú gomb állíthatja át igazra.
A változó értékét a Form OnCloseQuery eseményében használjuk fel.
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
...
if FCanClose=False then
Hide;
Ha az FCanClose változó értékét hamisra állítjuk, az meggátolja az ablak bezárását. A bezárás helyett elrejtjük a Form-ot.
A Form visszaállítását a CTRL+SHIFT+F12 billentyűkombinációval végezzük el.
procedure TForm1.WMHotKey(var Msg: TWMHotKey);
begin
if Msg.HotKey=123 then begin
Visible:=True;
SetForeGroundWindow(Handle);
end;
end;
Ahhoz, hogy a CTRL+SHIFT+F11 billentyűkombinációt ismerje a Windows, a Form OnCreate eseményében regisztrálnunk kell azt.
RegisterHotKey(Handle,123,MOD_CONTROL+MOD_SHIFT,123);
A RegisterHotKey első paramétere a Form azonosítója. A második paraméterben egy számot kell megadnunk, amely a továbbiakban a billentyűkombinációt azonosítani fogja. A harmadik paraméterben kell megadnunk a használandó módosító billentyűket (CTRL és SHIFT). Végül a negyedik paraméterbe kerül a billentyű kódja.
A billentyűkombináció lenyomásának kezeléséhez implementálnunk kell a WMHotKey metódust.
A Form OnDestroy eseményében töröljük a regisztrált billentyűkombinációt, valamint az óra mellett elhelyezett ikont.
UnRegisterHotKey(Form1.Handle,123);
Shell_NotifyIcon(NIM_DELETE,@FIconData);