TabSet 实现拖动后并保存配置

一、实现拖动

    在运行时当用户把一个标签拖动到另一个标签的位置时,该标签将移动到该位置并引起
  标签集的重新布置。

  1.1开始拖动操作

    当拖动模式(DragMode)设置为dmAutomatic时,用户在源控件上按下鼠标时拖动自动
  开始;当设置为dmManual时通过处理鼠标事件来决定拖动是否开始。如果想开始拖动调
  用BeginDrag方法。

    在TabSet拖放中,我们用下面的MouseDown事件处理过程来开始一个标签的拖动。

  首先判断按下的是否是左键,而后再判断项目是否合法。

  

procedure TFormMain.TabSetDJNRMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
    DragItem: Integer;
begin
    DragItem := TabSetDJNR.ItemAtPos(Point(X, Y));

    if (DragItem > -1) and (DragItem < TabSetDJNR.Tabs.Count) then
        TabSetDJNR.BeginDrag(False);
end;
View Code

  1.2接收拖动项目

    一个控件能否接收拖动项目是由该控件的OnDragOver事件决定的。在TabSet拖动中,主要是利用鼠标的位置进行判断。

procedure TFormMain.TabSetDJNRDragOver(Sender, Source: TObject; X,
  Y: Integer; State: TDragState; var Accept: Boolean);
var
    DropPos: Integer;
begin
    if Source = TabSetDJNR then
    begin
        DropPos := TabSetDJNR.ItemAtPos(Point(X, Y));
        Accept := (DropPos > -1) and (DropPos <> TabSetDJNR.TabIndex) and (DropPos < TabSetDJNR.Tabs.Count);
    end
    else
        Accept := False;
end;
View Code

  1.3放下拖动项目

    当OnDragOver事件处理过程返回的Accept为True且项目被放下时,由OnDragDrop事
件处理过程来完成拖动放下后的响应。在TabSet拖放实例中是改变标签的位置。

procedure TFormMain.TabSetDJNRDragDrop(Sender, Source: TObject; X,
  Y: Integer);
var
    OldPos: Integer;
    NewPos: Integer;
    bcanchange: Boolean;
begin
    if Source = TabSetDJNR then
    begin
        OldPos := TabSetDJNR.TabIndex;
        NewPos := TabSetDJNR.ItemAtPos(Point(X, Y));
        if (NewPos > -1) and (NewPos <> OldPos) then
            TabSetDJNR.Tabs.Move(OldPos, NewPos);
        TabSetDJNRChange(self,  NewPos, bcanchange);//刷新拖动后的页内容
    end;
end;
View Code

参考文档:http://blog.csdn.net/cureshy/article/details/177420

二、实现拖动页与页内容对应

  在change事件中改变页的顺序

procedure TFormMain.TabSetDJNRChange(Sender: TObject; NewTab: integer;
    var AllowChange: Boolean);
begin
    if TabSetDJNR.Tabs[NewTab]='选项卡1' then 
    begin
        NotebookDJNR.PageIndex := 0;    
    end
    else if TabSetDJNR.Tabs[NewTab] = '选项卡2' then  
    begin
        NotebookDJNR.PageIndex := 1;       
    end
    else
    begin
        NotebookDJNR.PageIndex := 2;
    end;
end;
View Code

三、保存拖动后的界面配置到磁盘中

  1.1保存配置

procedure TFormMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
    TabSetDJNR.Tabs.SaveToFile( 'c:\tempTabSet.ini');
end;
View Code

  1.2加载配置

procedure TFormMain.FormCreate(Sender: TObject);
var
    strTmp: string;
    nmrts: integer;
begin
    if FileExists('c:\tempTabSet.ini') then
    begin
        TabSetDJNR.Tabs.LoadFromFile('c:\tempTabSet.ini');
    end;
end;
View Code
原文地址:https://www.cnblogs.com/rongxiaoya/p/3984984.html