Delphi - Több oldalas ClipBoard készítése

forráskód letöltése
Készítsünk egy olyan alkalmazást, melyben tetszőleges számú TMemo komponensben eltárolhatunk tetszőleges szöveget az alábbiak szerint:

Ha bármilyen futó alkalmazásban vagyunk és lenyomjuk az F5 billentyűt, akkor a mi programunk legyen ismét az aktív, jöjjön létre egy új TMemo komponens és ez tartalmazza az aktuálisan a vágólapon elhelyezett szöveget.

Ha pedig lépkedünk az egyes TMemo-k között a saját alkalmazásunkban, akkor mindig annak a tartalma kerüljön automatikusan a vágólapra, melyen éppen állunk.

Így sikerül megvalósítanunk egy több oldalas vágólapot, melynek minden oldalán különböző szövegeket helyezhetünk el. Készítsünk egy olyan alkalmazást, melyben tetszőleges számú TMemo komponensben eltárolhatunk tetszőleges szöveget az alábbiak szerint:

Ha bármilyen futó alkalmazásban vagyunk és lenyomjuk az F5 billentyűt, akkor a mi programunk legyen ismét az aktív, jöjjön létre egy új TMemo komponens és ez tartalmazza az aktuálisan a vágólapon elhelyezett szöveget.

Ha pedig lépkedünk az egyes TMemo-k között a saját alkalmazásunkban, akkor mindig annak a tartalma kerüljön automatikusan a vágólapra, melyen éppen állunk.

Így sikerül megvalósítanunk egy több oldalas vágólapot, melynek minden oldalán különböző szövegeket helyezhetünk el.


Első problémába ott ütközünk, mikor azt szeretnénk elérni, hogy bármilyen alkalmazás is fusson, az F5 lenyomására a mi programunk kapja meg a vezérlést. A probléma ezzel csupán annyi, hogy amikor nem a mi alkalmazásunk az aktív, akkor nem igazán tudjuk figyelni, hogy mikor nyomja a felhasználó az F5 billentyűt egy másik tetszőleges alkalmazás futása alatt.

Ehhez a Windows-t kell megkérnünk, hogy "szóljon" az alkalmazásunknak, ha a fenti esemény bekövetkezik. Ezt a RegisterHotKey függvény hívással tehetjük meg. Itt át kell adnunk a programunk azonosítóját, egy általunk kiválasztott számot, mellyel azonosítjuk az adott billentyű lenyomást. Erre azért van szükség, mert a programunkba akár több ilyen billentyű figyelését is kérhetnénk és ekkor ezzel a számmal tudnánk megkülönböztetni az egyes billentyűket egymástól.
Ezen kívül még arról is rendelkezhetünk a harmadik paraméterben, hogy figyelje-e a Windows, hogy az adott billentyűn kívül a Shilft, Alt, vagy Ctrl is le van-e nyomva vagy sem. Végül pedig azt a kódot kell megadnunk, amely az adott billentyűre utal. Az F5 esetében ez a VK_F5 konstanst.

Fontos, hogy a programunk bezárása előtt az UnRegisterHotKey hívásával tudassuk a Windows-al, hogy már nem kérünk további értesítést az F5 lenyomásáról.

Ezzel a témával az első évfolyam 4. számában már foglalkoztunk a "Globális HotKey" című cikkben.

Amikor bekövetkezik az F5 lenyomása, akkor a Windows küld a programunk számára egy WM_HOTKEY üzenetet.

Ez előtt azonban célszerű valamilyen szöveget ténylegesen kimásolni a vágólapra, különben nem lesz mit eltárolni a saját alkalmazásunkba.

Ennek kezelésére létre kell hoznunk egy üzenetkezelőt., ahol is első lépésként ellenőrizzük az általunk megadott azonosító számmal, hogy az F5 lett-e lenyomva.

Az Application.BringToFront hívásával elérjük, hogy az alkalmazásunk legyen ismét aktív és látható.

Ezek után ellenőrizzük, hogy a vágólap tartalma szöveges formátumú-e és ha igen, akkor létrehozunk egy új TTabSheet lapot a TPageControl komponensen és ezen elhelyezünk egy TMemo komponenst, melynek a szövegét a vágólapon lévő szöveggel adjuk meg.

Ezzel megoldottuk, hogy a vágólap aktuális tartalma mentve legyen a saját alkalmazásunkba.

Ha lépkedünk az egyes TTabSheet lapokon, akkor létrejön a TPageControl OnChange eseménye. Ebben az esetben az aktuális lapon található TMemo komponens tartalmát kimásoljuk a vágólapra. Így azt máris vihetjük át egy másik alkalmazásba.