• 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
  • 相关阅读:
    js加载优化三
    js加载优化-二
    js加载优化
    怎样获取元素的高度
    HttpClient
    Android Http请求方法汇总
    table列等宽
    单页面手机开发
    单页面
    【154】C#打包程序成安装包
  • 原文地址:https://www.cnblogs.com/rongxiaoya/p/3984984.html
Copyright © 2020-2023  润新知