📄 uexpmgr.pas
字号:
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 + -