Delphi - Az egérkurzor alatt kontrol lekérdezése

forráskód letöltése
A mellékelt példából kiderül, hogy hogyan tudjuk lekérdezni azt, hogy egy adott pozícióban melyik kontrol (pl. Button) található. A lekérdezés segítségével megoldjuk azt, hogy annak a komponensnek a nevét, amelyik fölött a komponens van, kiírjuk egy StatusBar komponensre. A megoldás kulcsa a TWinControl osztály ControlAtPos függvénye. Ennek első paramétere egy TPoint típusú rekord, amiben az X és az Y koordinátát adjuk meg. A koordináták az ablak kliens területén belüli értéket jelentenek, és a kontrol kliens területének bármelyik pontját meghatározhatják. A második paramétere egy logikai érték, amivel azt adjuk meg, hogy azokat a komponenseket is figyelembe vegye-e, amelyek Enabled property-jének értéke hamis. Ha a paraméter értéke igaz, akkor ez történik. A harmadik paraméter szintén egy logikai érték, amely azt határozza meg, hogy a TWinControl osztályból származó komponenseket is figyelembe vegye-e. A paraméter alapértelmezett értéke hamis.
A függvény visszatérési értéke a komponens objektuma (TControl), vagy nil, ha a megadott koordinátán nincs komponens. A megadott koordinátának a komponens kliens területén belül lévő pont koordinátája kell, hogy legyen.
A példaprogramban a komponensek OnMouseMove eljárásában kérdezzük le az adott kurzorpozíció alatti komponens objektumát. Ez nem a legjobb megoldás, ehelyett használhatóbb, ha globálisan ellenőrizzük az egér pozícióját. Ehhez szükség van egy Hook eljárásra, amely az egér pozícióját és tulajdonságait figyeli.