Salut,
Regarde ceci :
[ Lien ]
La deuxième solution permet de déplacer dans un autre PageControl.
Voici un "mix" des deux solutions que j'ai fait au plus simple :
La propriété DragMode des PageControl = dmManual
3 procédures pour PageControl1 : OnMouseDown, OnDragOver, OnDragDrop
Le ou les autres PageControl utilisent les procédures de PageControl1.
* * *
function GetTabIndex(APageControl:TPageControl; MoveToOther: boolean; X, Y: Integer): Integer;
begin
Result := APageControl.IndexOfTabAt(X,Y);
if MoveToOther and (Result >= 0) then
with APageControl.TabRect(Result) do
if X > ((Left + Right) div 2) then Inc(Result);
// ceci permet d'insérer avant ou après un onglet suivant la position de la souris.
end;
procedure TForm1.PageControl1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if Button = mbLeft then
TPageControl(Sender).BeginDrag(False);
end;
procedure TForm1.PageControl1DragOver(Sender, Source: TObject; X,
Y: Integer; State: TDragState; var Accept: Boolean);
begin
Accept := Source is TPageControl;
end;
procedure TForm1.PageControl1DragDrop(Sender, Source: TObject; X,
Y: Integer);
var
Tab: TTabSheet;
TabIndex: integer;
begin
TabIndex:= GetTabIndex(TPageControl(Sender), (Sender <> Source), X, Y);
if TabIndex >= 0 then
begin
if TPageControl(Source) = TPageControl(Sender) then
begin
if TPageControl(Sender).ActivePage.PageIndex <> TabIndex then
TPageControl(Sender).ActivePage.PageIndex := TabIndex;
end
else
begin
Tab:= TPageControl(Source).ActivePage;
Tab.PageControl:= TPageControl(Sender);
Tab.PageIndex:= TabIndex;
TPageControl(Sender).ActivePage:= Tab;
end;
end;
TPageControl(Source).EndDrag(true);
end;
* * *
A +
Thierry