HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Melyik ablak birtokolja a fókuszt?


Példaprogram letöltése

3907 bájt

Ha ezt a kérdést saját alkalmazásunkban kell eldöntenünk, akkor egyszerű a helyzetünk. Ha viszont egy másik program az aktív, akkor már kissé bonyolultabb a helyzet, hiszen a mi programunk nem tudhat arról, hogy éppen melyik TEdit-ben, vagy TListBox-ban, vagy bármi egyéb komponensben is van a fókusz.
Mellékelt példában egy olyan függvényt készítünk mely képes arra, hogy az éppen aktív alkalmazás fókuszt birtokló ablakának az azonosítóját (Handle) lekérdezze. Ha ez az azonosító adott a programunk számára, akkor már bármilyen üzenetet is küldhetünk ennek az ablaknak, tehát befolyásolhatjuk a másik program tulajdonságait!

Készítünk egy függvényt GetSystemFocus néven, mely képes arra, hogy visszaadja az aktív program azon ablakának azonosítóját mely birtokolja a fókuszt.
function GetSystemFocus: Integer;
var
  h1, h2: Integer;
begin
Első lépésként meghatározzuk, hogy melyik az aktív alkalmazás aktív ablaka. Ezt a GetForegroundWindow függvény szolgáltatja.
  h1:=GetForegroundWindow;
Szükségünk lesz továbbá e program folyamatazonosító számára is. Ezt a GetWindowThreadProcessID függvény adja vissza, melynek első paraméterként az imént lekérdezett ablak azonosítót kell átadni.
  h2:=GetWindowThreadProcessID(h1, nil);
Következő lépésként csatlakozunk az aktuálisan futó alkalmazás beviteli szálához. Ettől kezdve minden olyan tevékenységünk, mely az adatbevitelhez kötődik valamilyen szinten az már nem a saját alkalmazásunkra, hanem a másikra fog vonatkozni. Ehhez az AttachThreadInput függvény kell meghívnunk. Első paraméterként a saját alkalmazásunk szálának azonosítójával, másodikként pedig annak a programnak a szálát kell megadni, melyhez csatlakozni szeretnénk, végül a harmadik paraméter ha igaz, akkor a csatlakozás létrejön, míg hamis esetén helyre áll az eredeti állapot.
Ezt követően a GetFocus függvény hívása már a másik alkalmazás fókuszt birtokló ablakának azonosítóját adja vissza.
  if AttachThreadInput(GetCurrentThreadID, h2, true) then begin
    result:=GetFocus;
A fókusz lekérdezése után visszaállítjuk az eredeti állapotot.
    AttachThreadInput(GetCurrentThreadID, h2, false);
Abban az esetben, ha a saját alkalmazásunk az aktív, akkor a csatlakozás nem fog sikerülni, viszont ez esetben nincs is rá szükség, hiszen saját alkalmazásunk fókuszt birtokló ablakának azonosítóját egyszerűen csak le kell kérdeznünk a GetFocus által.
  end else begin
    result:=GetFocus;
  end;
end;

Cikksorozat

#IDKategóriaCikk címeSorozat
1488DelphiMS SQL tárolt eljárások1. rész
1499DelphiMS SQL tárolt eljárások2. rész
1507DelphiMS SQL tárolt eljárások3. rész
1519DelphiMS SQL tárolt eljárások4. rész
1526DelphiMS SQL tárolt eljárások5. rész
1537DelphiMS SQL tárolt eljárások6. rész
1546DelphiMS SQL tárolt eljárások7. rész
1553DelphiMS SQL tárolt eljárások8. rész
1564DelphiMS SQL tárolt eljárások9. rész
1573DelphiMS SQL tárolt eljárások10. rész
1582DelphiMS SQL tárolt eljárások11. rész
1591DelphiMS SQL tárolt eljárások12. rész
1600DelphiMS SQL tárolt eljárások13. rész
1609DelphiMS SQL tárolt eljárások14. rész
1617DelphiMS SQL tárolt eljárások15. rész
1626DelphiMS SQL tárolt eljárások16. rész


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