☆TabControlのDrag&Drop
TabControlのTabsは、TStringsなので移動はとても簡単です。
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls;
type
TForm1 = class(TForm)
TabControl1: TTabControl;
procedure TabControl1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
procedure TabControl1DragDrop(Sender, Source: TObject; X, Y: Integer);
procedure TabControl1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormCreate(Sender: TObject);
private
{ Private 宣言 }
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var
I: Integer;
begin
// タブ名の設定
for I := 1 to 10 do
TabControl1.Tabs.Add(IntToStr(I));
end;
procedure TForm1.TabControl1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
// ちょっとややこしいですけど、自分自身の間でしか許可しない設定です。
Accept := ((Sender is TTabControl) and (Source is TTabControl)) and
((Sender as TTabControl) = TabControl1) and
(TabControl1.TabIndex <> TabControl1.IndexOfTabAt(X,Y));
end;
procedure TForm1.TabControl1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if (Button = mbLeft) then
TabControl1.BeginDrag(False, 5);
end;
procedure TForm1.TabControl1DragDrop(Sender, Source: TObject; X, Y: Integer);
var
DstIndex, SrcIndex: Integer;
begin
SrcIndex := TabControl1.IndexOfTabAt(X, Y);
DstIndex := TabControl1.TabIndex;
TabControl1.Tabs.Move(DstIndex,SrcIndex);
end;
end.
| 固定リンク
