Przesuwanie kart w TExtendedNotebook

0

TExtendedNotebook umożliwia automatyczne przesuwanie kart (TabDragAcceptMode+TabDragMode); problem jest - jak wykryć, że nastąpiło przesunięcie karty (tj.skąd oraz dokąd)?

Wcześniej próbowałem jeszcze korzystać z kodu na ręczne robienie takich rzeczy, który działa w Delphi 7:
http://delphi.about.com/cs/adptips2004/a/bltip0304_3.htm
Lecz w Lazarusie nie mogę go doprowadzić do działania (z tego co przeczytałem, to u innych również są z tym problemy) :/

Lazarus v.1.1, rev.39905 wraz z FPC 2.6.1 (tj.dzisiejszy snapshot, lecz kod również nie działa na stabilnej wersji 1.0.4).


Edit: jak zwykle ja się trudzę, a gotowe rozwiązanie już istnieje: Zdarzenie `OnTabDragDropEx` posiada odpowiednie parametry: `OldIndex, NewIndex: Integer;` ;)
1
Patryk27 napisał(a):

Edit: jak zwykle ja się trudzę, a gotowe rozwiązanie już istnieje:
Zdarzenie OnTabDragDropEx posiada odpowiednie parametry: OldIndex, NewIndex: Integer; ;)

No tak... a co do tamtego kodu to problem jest dość banalny (przynajmniej w PageControl):

const
   TCM_GETITEMRECT = $130A;
var
   TabRect: TRect;
   j: Integer;
   p: Point;
begin
   if (Sender is TPageControl) then
   for j := 0 to PageControl1.PageCount - 1 do
   begin
     PageControl1.Perform(TCM_GETITEMRECT, j, LParam(@TabRect));
     p.x:= X;
     p.Y:= Y;
     //tu poprawka oczywiscie z lenistwa to zadziala tylko gdy zakladki
     //na gorze (TabPosition = tpTop) w kazdym razie trzeba brac korekte
     //paramtrow X, Y na szerokosc/wysokosc zakladek w zaleznosci
     //od ustawienia TabPosition
     p.Y:= p.Y + TabRect.Bottom;
     if PtInRect(TabRect, p) then
     begin
       if PageControl1.ActivePage.PageIndex <> j then
         PageControl1.ActivePage.PageIndex := j;
       Exit;
     end;
   end;
end; 

1 użytkowników online, w tym zalogowanych: 0, gości: 1