Delphi programozási blog, változtassa meg az ablakok mennyiségét a pda használatával

A távirányítóval való munkavégzés

Az első probléma megoldásához van egy TV-tuner Van TV H6 távirányító, mint a hardver. A konzolhoz való munkához a BeholdRC.dll könyvtárat kell létrehozni, az exportált függvények leírása, valamint a Delphi munkájának példája megtalálható a fejlesztő webhelyén. Azonban csak néhány funkció van. Kétféleképpen kaphat információkat a billentyűleütésekről: ellenőrizze az állapotot időzítéssel, vagy használjon külön szálat. A második lehetőség hatékonyabbnak és érdekesebbnek tűnik. Tehát a végrehajtott osztály neve TRemoteVolumeControl lesz, és a TThread örököse lesz. A fejlesztés ezen szakaszában a fő forma kódja 3 dologért felel:
  1. TRemoteVolumeControl objektum létrehozása az alkalmazás indításakor
  2. Üzenetek fogadása a hangerő-váltó gombok megnyomásával (lehetőség van frissíteni a program interfészt)
  3. Túlcsordulás, ha a program bezáródik
Mindezekhez adjon hozzá egy egyéni üzenetet, egy feldolgozási eljárást és egy TRemoteVolumenControl típusú változót. Átcsoportosítjuk az áramlási osztályunk konstruktorát, hogy átadjuk az ablak paramétereit, hogy megkapjuk az üzenetet és az üzenetkódot paraméterként. Amikor üzenetet küld, a WParam tartalmazza a megnyomott gomb kódját. Táblák eltérő változatban, különböző gombok száma, leírjuk az alábbi felsorolás (távvezérlő megkapjuk segítségével BeholdRC könyvtárak): Ahhoz, hogy működjön együtt a könyvtár, meg kell leírni az aláírásokat az exportált függvények. Mindegyikük a cdecl hívási modellt használja. A hívás algoritmus általában a következő: megtalálja a kártyák számát, indítsa el a térképet index szerint. Megkaphatja a nevét és a konzoltípust, megkérdezi a nyomógomb kódjait. A munka végén meg kell hívnia az UnInit eljárást. Azonnal adok egy leírást TRemoteVolumeControl osztály: Amint látjuk a kivitelező paramétereit tárolja a magán FNotifyWindow tagok FNotifyMessage. Ahhoz, hogy inicializálja a működés távirányítóval, és a hangerő két InitRemoteControl funkció (távoli) és InitVolumeControl (hangerő). Amikor a szál befejeződik, a Done módot hívják. Így az osztály konstruktor elvégzi a könyvtárak beállításait és inicializálását. Ha nem tudja inicializálni a műveletet a konzolon, vagy szabályozza a hangerőt, akkor az adatfolyam leáll. Ebben az esetben törölnie kell a hangkezelés COM objektumára vonatkozó hivatkozásokat, és zárja be a konzol könyvtárat. A konzollal való együttműködéshez be kell töltenie a könyvtárat, be kell állítania a beviteli pontokat az exportált függvényekhez, ki kell választania az eszközt. A megfelelő kód triviális, de legyen: a „leírás”, mondta API könyvtár, amely az optimális intervallum állapotának ellenőrzésére 30-50msek le gombokat. Ezzel a kijelentéssel nem értek egyet. Gyakorlati tapasztalatok azt mutatják, hogy a gomb megnyomása és felengedése ez kb 150-200ms, ami nagyon jól bizonyítja megnyomásával némítógombként Mute (lekérdezési intervallum 50 ms, a hang kikapcsolt 2-3 alkalommal). Az alapvető munka- ciklus a program nagyon egyszerű: kihallgatni az állam a távoli (getRemoteCode), ha a gomb megnyomása (a kód eltér a $ FF), hogy elvégezze a szükséges manipulációk (eljárás RCKeyPress), menj aludni 180 ms-ig a következő tesztet. A szükséges manipulációk ebben az esetben az alkalmazás fő formájának bejelentése és a hangerő módosítása. De eddig nem vettük figyelembe a részleteket. Amint láthatja, a távirányítóval való munka nagyon egyszerű.

Hangkezelés

Általában soha nem gondoltam, hogy hogyan változtathatom meg a hang hangerejét a rendszerben. Így tanulmányoztam a dokumentációt. Azonban nem mentem bele részletesen. Amint ezt megértem, a Windows Vista óta a hangkezelési módszerek drámaian megváltoztak. Ezt az MSDN Core Audio API mondja el nekünk. A hangot globális szinten tudjuk szabályozni, vagy csak a hangfolyamot változtatjuk meg. Az első lehetőség iránt érdeklődünk. A munkához több interfész szükséges: az IMMDeviceEnumerator multimédiás eszközök gyűjteménye; Az IMMDevice egy eszközt és az IAudioEndpointVolume felületet jelent a hangerőszabályozáshoz. Sajnos a Delphi nem tartalmaz interfészeket, így a header fájlok újrarendelésére volt szükség mmDeviceApi.h EndpointVolume.h (az eredmény a cikk végén található). A Google-ban az mmDevApi.pas nevű fájl megtalálható a Delphi interfészek leírásával, de csak azok a csatolók vannak leírva, amelyek szükségesek a kötet megváltoztatásához, és nem teljesen a megfelelő fejlécfájlok. Érdemes megjegyezni, hogy ezen interfészek használatával nemcsak a kötetet tudjuk vezérelni, hanem a hangerő megváltoztatásával kapcsolatos értesítéseket is kaphatunk (IAudioEndpointVolumeCallback). Most, hogy rövid, a funkció InitVolumeControl kell egy hivatkozást IAudioEndpointVolume felületet fogunk tenni: Most már leírni a funkció RCKeyPress. Először is értesítjük az űrlapot a megnyomott kulcsról, elküldjük a kódot. Továbbá, a megnyomott gombtól függően növeljük vagy csökkentjük a hangerőt (VolumeStepUp / VolumeStepDown). A némítás gomb megnyomásakor meg kell határoznunk az aktuális állapotot és meg kell fordítanunk. A kikapcsoló gomb megnyomásával WM_CLOSE üzenetet küldhetünk az űrlapnak, de a kódot elküldtük. Most az alkalmazásunk megváltoztathatja a teljes hangerőt az ablakban 7. Szeretnék néhány szép felületet megvalósítani, átlátható formában és a hangszóró képével, de tudom, hogyan kell ezt csinálni a Direct2D-ben. mert utoljára bajba kerültem. A leírt osztály forráskódja, valamint az MMDeviceAPI és az EndpointVolume interfészleíró fájlok itt tölthetők le.