Delphi - TPageControl lapok sorrendjének változtatása DragAndDrop-al

forráskód letöltése
Ha egy TPageControl komponens lapjainak (TTabSheet) sorrendjét kell meghatároznunk, akkor erre egyedüli lehetőség a PageIndex property átírogatása, ami viszont nem túl felhasználó barát megoldás.

Ennél sokkal egyszerűbb lenne DragAndDrop-al mozgatni az egyes lapokat, mint a mellékelt példában is. Ha egy TPageControl komponens lapjainak (TTabSheet) sorrendjét kell meghatároznunk, akkor erre egyedüli lehetőség a PageIndex property átírogatása, ami viszont nem túl felhasználó barát megoldás.

Ennél sokkal egyszerűbb lenne DragAndDrop-al mozgatni az egyes lapokat, mint a mellékelt példában is.


A TPageControl komponensnél az OnMouseDown eseményt felhasználva az X, Y koordináták segítségével és egy TCM_HITTEST üzenet küldésével meghatározhatjuk azt, hogy melyik fejléc szövegre is kattintott a felhasználó.

Ennél a lapnál (TTabSheet) elindíthatjuk ezek után a DragAndDrop műveletet a BeginDrag hívásával.

Minden DragAndDrop műveletnél el kell dönteni az egér mozgatásakor, hogy az aktuális pozíció, ahol az egérrel állunk, elfogadhatja-e DragAndDrop-ot vagy sem. Erre az OnDragOver esemény szolgál. Itt a kapott Accept változónak igaz értéket kell adnunk, ha az aktuális pozíción elengedheti a felhasználó az egeret.

Itt most az egyszerűség kedvéért minden TTabSheet-ről érkező DragAndDrop-ot elfogadunk.

Mikor a felhasználó elengedte az egeret, akkor jön létre az OnDragDrop esemény.

Ekkor hasonlóan az OnMouseDown-nál használt módszerhez meghatározzuk, hogy melyik lapra történt a dobás, majd állítjuk ennek megfelelően a PageIndex property-t, így az adott lap az új helyre kerül.

Sajnos ez a módszer ebben a formában csak futási időben működik.