A délután folyamán megakadtam egy roppant idióta helyzetben: egy Explorer (értsd Windows Intéző) szerű felületet biztosító komponens, a MustangPeak féle VirtualShellTools egyik részével “játszottam”, azzal a céllal, hogy legalább user experience (Felhasználói élménynek kell az ilyet fordítani?) szintjén drag-and-dropot tudjak biztosítani egy felületen.
(Fyi, a VST-nek van egy sokkal naprakészebb verziója a letöltések rovatban, fel nem tudom fogni, miért nincs jobban kiemelve.)
Na de nem is a komponens a lényeg, hanem az életérzés: a drag-and-drop funkció alig indul be. Oké, rájöttem, hogy a fejlesztő csinált egy tucatnyi set jellegű beállítás-tömböt, amikben látszólag logikusan - valójában teljesen random módon - vannak jelen a mindenféle beállítások, egy AcceptActiveXDropEvents, vagy hasonló nevű (ezt majd holnap korrigálom) tulajdonságot és az EnableDragDropot kellett true-ra állítani. Már ez önmagában olyan volt, hogy édes istenem, ha az összes komponensnek van egy DragMode tulajdonsága, itt miért kellett újrafelfedezni a spanyolviaszt, miért nem lehetett volna kiemelni ezt a beállítást? Na de ugorgyunk: a dnd elkezdett működni, volt onDragStart esemény, örülünk. A másik felületen beállítottam a DragMode-ot dmAutomatic-ra és vártam, hogy kapjak onDragOver-t meg onDragDrop-ot, ahogy az a nagykönyvben meg van írva - természetesen semmi sem történt.
Végül kiderült, hogy mindez azért, mert Windows alatt van minimum kétféle (eddig ennyibe mentem bele) dnd eseménytípus, a sima és az, amelyik IDataObject-et használ és természetesen véletlenül sem kompatibilisek egymással. Igaza volt mindenkinek, aki azt írta Twitteren, hogy fogom még a fejem csapkodni az asztalba. ;)
Az IDataObject - remélem csak azért, mert kihagytam pár évet a Windows API közeli programozásban - feldolgozása egyelőre egy ordenáré módon túlbonyolított, erőltetett folyamatnak tűnik, ahol mindenki módszeresen azon kínlódik, hogy minél nyakatekertebb formában kaphassak kézhez egy stringlist-et.
Sóhaj, mélylevegő, holnap újult erővel folytatom a tracskolást.