⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uexpmgr.pas

📁 一个基于不需引擎的文件管理系统,使用了许多界面比较好的控件
💻 PAS
📖 第 1 页 / 共 2 页
字号:
unit uExpMgr;

interface

uses Controls,classes,uIHintInf,uDllfrmList,DB,DBClient,ComCtrls,SysUtils,
     ShellAPI,Windows,TBX,SpTBXItem,Dialogs,uSecPlugInf;

type
  AHead=array[0..1] of string;
  TItemEditingEvent=procedure(Sender:TObject;Item:TListItem) of object;


const
  PDAHead:array[0..2] of AHead=(
            ('Name','名称'),
            ('Url','目标位置'),
            ('Desc','说明'));

  TaskHead:array[0..5] of AHead=(
            ('Name','任务名称'),
            ('Text','任务内容'),
            ('TypeDesc','类型'),
            ('CircleDesc','执行这个任务'),
            ('Date','起始日期'),
            ('Time','起始时间'));

  CustomHead:array[0..2] of AHead=(
            ('Name','名称'),
            ('Path','目标位置'),
            ('Desc','说明'));

  LinkManHead:array[0..4] of AHead=(
            ('Name','名称'),
            ('Phone','电话'),
            ('Fax','手机'),
            ('EMail','电邮'),
            ('Address','地址'));

  FolderHead:array[0..1] of AHead=(
            ('Text','名称'),
            ('CreatDate','创建日期'));

type
  TExpMgr = class
  private
    FListWindow: TListView;
    FPlugMenu: TTBXPopupMenu;
    FPlugbar: TTBXToolbar;
    FITheOprList: IOprList;
    Fcds: TClientDataSet;
    FOnItemAdding: TNotifyEvent;
    FThefrmType: frmType;
    FParams: variant;
    FOnItemEditing: TItemEditingEvent;
    FPlugList:TInterfaceList;
    procedure SetListWindow(const Value: TListView);
    procedure SetITheOprList(const Value: IOprList);
    procedure Setcds(const Value: TClientDataSet);
    procedure SetOnItemAdding(const Value: TNotifyEvent);
    procedure SetThefrmType(const Value: frmType);
    procedure SetParams(const Value: variant);
    procedure SetOnItemEditing(const Value: TItemEditingEvent);
  public
    constructor create(AListWindow:TListView;APlugMenu:TTBXPopupMenu;APlugbar:TTBXToolbar;ATheOprList:IOprList);overload;
    destructor destroy;override;

    procedure RefreshList;virtual;
    procedure AddListItem(Sender:TObject);virtual;
    procedure EditListItem(Sender:TObject;Item:TListItem);virtual;
    function GetItemID(Node:TListItem):integer;virtual;
    procedure ExecWhenDBClick(AData:Pointer);virtual;
    procedure GetHeadList(Heads:array of AHead);
    property ListWindow:TListView read FListWindow write SetListWindow;
    property ITheOprList:IOprList read FITheOprList write SetITheOprList;
    property cds:TClientDataSet read Fcds write Setcds;
    property ThefrmType:frmType read FThefrmType write SetThefrmType;
    property OnItemAdding:TNotifyEvent read FOnItemAdding write SetOnItemAdding;
    property OnItemEditing:TItemEditingEvent read FOnItemEditing write SetOnItemEditing;
    property Params:variant read FParams write SetParams;
    property PlugList:TInterfaceList read FPlugList;
  end;

  TExpPDAMgr = class(TExpMgr)
  public
    procedure RefreshList;override;
    procedure AddListItem(Sender:TObject);override;
    procedure EditListItem(Sender:TObject;Item:TListItem);override;
    function GetItemID(Node:TListItem):integer;override;
    procedure ExecWhenDBClick(AData:Pointer);override;
  end;

  TExpTaskMgr = class(TExpMgr)
  public
    procedure RefreshList;override;
    procedure AddListItem(Sender:TObject);override;
    procedure EditListItem(Sender:TObject;Item:TListItem);override;
    function GetItemID(Node:TListItem):integer;override;
    procedure ExecWhenDBClick(AData:Pointer);override;
  end;

  TExpCustomMgr = class(TExpMgr)
  public
    procedure RefreshList;override;
    procedure AddListItem(Sender:TObject);override;
    procedure EditListItem(Sender:TObject;Item:TListItem);override;
    function GetItemID(Node:TListItem):integer;override;
    procedure ExecWhenDBClick(AData:Pointer);override;
  end;

  TExpLinkManMgr = class(TExpMgr)
  public
    procedure RefreshList;override;
    procedure AddListItem(Sender:TObject);override;
    procedure EditListItem(Sender:TObject;Item:TListItem);override;
    function GetItemID(Node:TListItem):integer;override;
    procedure ExecWhenDBClick(AData:Pointer);override;
  end;

  TExpFolderMgr = class(TExpMgr)
  public
    procedure RefreshList;override;
    procedure AddListItem(Sender:TObject);override;
    procedure EditListItem(Sender:TObject;Item:TListItem);override;
    function GetItemID(Node:TListItem):integer;override;
    procedure ExecWhenDBClick(AData:Pointer);override;
  end;

implementation

{ TExpTaskMgr }

procedure TExpTaskMgr.AddListItem(Sender:TObject);
var
  TaskData:PTaskData;
  Item:TListItem;
begin
  inherited;
  New(TaskData);
  TaskData^.ID:=cds.fieldbyname('ID').AsInteger;
  TaskData^.Caption:=cds.fieldbyname('Name').AsString;
  TaskData^.Text:=cds.fieldbyname('Text').AsString;
  TaskData^.AType:=cds.fieldbyname('Type').AsInteger;
  TaskData^.Circle:=cds.fieldbyname('Circle').AsInteger;
  TaskData^.TypeDesc:=cds.fieldbyname('TypeDesc').AsString;
  TaskData^.CircleDesc:=cds.fieldbyname('CircleDesc').AsString;
  TaskData^.Date:=cds.fieldbyname('Date').AsDateTime;
  TaskData^.Time:=cds.fieldbyname('Time').AsDateTime;

  Item:=ListWindow.Items.Add;
  Item.StateIndex:=TaskData^.ID;
  Item.Data:=TaskData;
  Item.Caption:=TaskData^.Caption;
  Item.SubItems.Add(TaskData^.Text);
  Item.SubItems.Add(Taskdata^.TypeDesc);
  Item.SubItems.Add(TaskData^.CircleDesc);
  Item.ImageIndex:=0;
  Item.SubItems.Add(formatdatetime('YYY-MM-DD',TaskData^.Date));
  Item.SubItems.Add(formatdatetime('HH:mm',TaskData^.Time));
end;

procedure TExpTaskMgr.EditListItem(Sender: TObject; Item: TListItem);
var
  TaskData:PTaskData;
begin
  inherited;
  TaskData:=Item.Data;
  TaskData^.ID:=cds.fieldbyname('ID').AsInteger;
  TaskData^.Caption:=cds.fieldbyname('Name').AsString;
  TaskData^.Text:=cds.fieldbyname('Text').AsString;
  TaskData^.AType:=cds.fieldbyname('Type').AsInteger;
  TaskData^.Circle:=cds.fieldbyname('Circle').AsInteger;
  TaskData^.TypeDesc:=cds.fieldbyname('TypeDesc').AsString;
  TaskData^.CircleDesc:=cds.fieldbyname('CircleDesc').AsString;
  TaskData^.Date:=cds.fieldbyname('Date').AsDateTime;
  TaskData^.Time:=cds.fieldbyname('Time').AsDateTime;

  with Item do
  begin
    StateIndex:=TaskData^.ID;
    Data:=TaskData;
    Caption:=TaskData^.Caption;
    SubItems.Add(TaskData^.Text);
    SubItems.Add(Taskdata^.TypeDesc);
    SubItems.Add(TaskData^.CircleDesc);
    ImageIndex:=0;
    SubItems.Add(formatdatetime('YYY-MM-DD',TaskData^.Date));
    SubItems.Add(formatdatetime('HH:mm',TaskData^.Time));
  end;
end;

procedure TExpTaskMgr.ExecWhenDBClick(AData: Pointer);
begin
  inherited;
  if PTaskData(AData)^.AType=0 then
    ITheOprList.ShowHint(AData)
  else if PTaskData(AData)^.AType=1 then
    shellexecute(0,'open',Pchar(PTaskData(AData)^.Text),nil,nil,SW_SHOWNORMAL);
end;

function TExpTaskMgr.GetItemID(Node:TListItem):integer;
begin
  inherited GetItemID(Node);
  result:=PTaskData(Node.Data)^.ID;
end;

procedure TExpTaskMgr.RefreshList;
begin
  inherited;
  GetHeadList(TaskHead);
end;

{ TExpMgr }

procedure TExpMgr.AddListItem(Sender:TObject);
begin
//
end;

constructor TExpMgr.create(AListWindow: TListView;APlugMenu:TTBXPopupMenu;APlugbar:TTBXToolbar;ATheOprList:IOprList);
begin
  FListWindow:=AListWindow;
  FPlugMenu:=APlugMenu;
  FPlugbar:=APlugbar;
  FITheOprList:=ATheOprList;
  cds:=TClientDataSet.Create(nil);
  OnItemAdding:=AddListItem;
  OnItemEditing:=EditListItem;
  FPlugList:=ATheOprList.GetSecPlugList;
end;

function TExpMgr.GetItemID(Node:TListItem):integer;
begin
  result:=-1;
end;

destructor TExpMgr.destroy;
begin
  cds.Free;
  inherited destroy;
end;

procedure TExpMgr.GetHeadList(Heads: array of AHead);
var
  i:integer;
  Column:TListColumn;
begin
  if ListWindow.Columns.Count>0 then
    exit;
  for i:=low(Heads) to high(Heads) do
  begin
    Column:=ListWindow.Columns.Add;
    Column.Caption:=Heads[i,1];
  end;
end;

procedure TExpMgr.RefreshList;
var
  i:integer;
  flag:Boolean;
begin

  cds.Close;
  cds.Data:=ITheOprList.GetData(ThefrmType,FParams);
  cds.Open;
  ListWindow.Items.BeginUpdate;
  try
    while not cds.Eof do
    begin
      flag:=false;
      for i:=0 to ListWindow.Items.Count-1 do
      begin
        if ListWindow.Items[i].StateIndex=cds.fieldbyname('ID').AsInteger then
        begin
          flag:=true;
          if Assigned(FOnItemEditing) then
            FOnItemEditing(self,ListWindow.Items[i]);
        end;
      end;

      if not flag then
      begin
        if Assigned(FOnItemAdding) then
          FOnItemAdding(self);
      end;
      cds.Next;
    end;

    for i:=ListWindow.Items.Count-1 downto 0 do
    begin
      cds.First;
      flag:=false;
      while not cds.Eof do
      begin
        if ListWindow.Items[i].StateIndex=cds.fieldbyname('ID').AsInteger then
        begin
          flag:=true;
          break;
        end;
        cds.Next;
      end;
      if not flag then
        ListWindow.Items[i].Delete; 
    end;
  finally
    ListWindow.Items.EndUpdate;
    cds.Close;
  end;
end;

procedure TExpMgr.Setcds(const Value: TClientDataSet);
begin
  Fcds := Value;
end;

procedure TExpMgr.SetITheOprList(const Value: IOprList);
begin
  FITheOprList := Value;
end;

procedure TExpMgr.SetListWindow(const Value: TListView);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -