?? svcdetails.pas
字號:
unit SvcDetails;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, ComCtrls, MSI_Processes, ImgList;
type
Tdlg_SvcDetails = class(TForm)
Bevel1: TBevel;
bClose: TButton;
pc: TPageControl;
imgIcon: TImage;
TabSheet1: TTabSheet;
TabSheet3: TTabSheet;
GenList: TListView;
eName: TEdit;
Dep1Tree: TTreeView;
Label1: TLabel;
l: TLabel;
Label2: TLabel;
Dep2Tree: TTreeView;
ImageList1: TImageList;
procedure GenListAdvancedCustomDrawSubItem(Sender: TCustomListView;
Item: TListItem; SubItem: Integer; State: TCustomDrawState;
Stage: TCustomDrawStage; var DefaultDraw: Boolean);
procedure GenListAdvancedCustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; Stage: TCustomDrawStage;
var DefaultDraw: Boolean);
procedure FormCreate(Sender: TObject);
procedure Dep1TreeExpanding(Sender: TObject; Node: TTreeNode;
var AllowExpansion: Boolean);
procedure FormDestroy(Sender: TObject);
procedure Dep2TreeExpanding(Sender: TObject; Node: TTreeNode;
var AllowExpansion: Boolean);
private
FPL: TMiTeC_ProcessList;
FSI: TServiceInfo;
FIndex: DWORD;
sl: TStringList;
public
procedure RefreshData;
end;
procedure ShowSvcDetails(APL: TMiTeC_ProcessList; AIndex: DWORD);
var
dlg_SvcDetails: Tdlg_SvcDetails;
implementation
uses MiTeC_CtrlRtns, MiTeC_AdvAPI, MiTeC_Routines;
{$R *.dfm}
procedure ShowSvcDetails;
begin
with Tdlg_SvcDetails.Create(Application.Mainform) do
try
FPL:=APL;
FIndex:=AIndex;
FSI:=FPL.Services[FIndex];
RefreshData;
ShowModal;
finally
Free;
end;
end;
procedure Tdlg_SvcDetails.GenListAdvancedCustomDrawSubItem(
Sender: TCustomListView; Item: TListItem; SubItem: Integer;
State: TCustomDrawState; Stage: TCustomDrawStage;
var DefaultDraw: Boolean);
begin
with TListView(Sender) do begin
Canvas.Font.Style:=[];
if Item.ImageIndex=-3 then
Canvas.Font.Style:=[fsBold];
Canvas.Font.Color:=clBlack;
if Item.ImageIndex=-4 then
ListView_DrawCheckBox(Sender,Item,SubItem,State,DefaultDraw,'1')
else
Canvas.Brush.Color:=Color;
if cdsHot in State then
Canvas.Font.Style:=Canvas.Font.Style+[fsUnderline]
else
Canvas.Font.Style:=Canvas.Font.Style-[fsUnderline];
end;
end;
procedure Tdlg_SvcDetails.GenListAdvancedCustomDrawItem(
Sender: TCustomListView; Item: TListItem; State: TCustomDrawState;
Stage: TCustomDrawStage; var DefaultDraw: Boolean);
begin
DefaultDraw:=True;
with TListView(Sender) do begin
Canvas.Font.Style:=[];
if Item.ImageIndex=-3 then
Canvas.Font.Style:=[fsBold];
Canvas.Font.Color:=clBlack;
if cdsHot in State then
Canvas.Font.Style:=Canvas.Font.Style+[fsUnderline]
else
Canvas.Font.Style:=Canvas.Font.Style-[fsUnderline];
if Item.ImageIndex=-2 then
ListView_DrawLine(Sender,Item,State,DefaultDraw,clGray);
end;
end;
procedure Tdlg_SvcDetails.RefreshData;
var
i: Integer;
n: TTreeNode;
s: string;
VersionInfo: TVersionInfo;
begin
eName.Text:=FSI.DisplayName;
GenList.Items.Clear;
if FileExists(FSI.ImageName) then
imgIcon.Picture.Icon.Handle:=GetFileIcon(FSI.ImageName);
GetFileVerInfo(FSI.ImageName,VersionInfo);
GenList.Items.Clear;
with GenList.Items.Add do begin
Caption:='Description';
SubItems.Add(VersionInfo.Description);
ImageIndex:=-3;
end;
with GenList.Items.Add do begin
Caption:='Version';
SubItems.Add(VersionInfo.Version);
end;
with GenList.Items.Add do begin
Caption:='Product Name';
SubItems.Add(VersionInfo.ProductName);
end;
with GenList.Items.Add do begin
Caption:='Company Name';
SubItems.Add(VersionInfo.CompanyName);
end;
with GenList.Items.Add do begin
Caption:='';
ImageIndex:=-2;
end;
with GenList.Items.Add do begin
Caption:='Service Name';
SubItems.Add(FSI.Name);
ImageIndex:=-3;
end;
with GenList.Items.Add do begin
Caption:='Image Name';
SubItems.Add(FSI.ImageName);
end;
with GenList.Items.Add do begin
Caption:='Log On As ';
SubItems.Add(FSI.ObjectName);
end;
with GenList.Items.Add do begin
Caption:='Load Order Group';
SubItems.Add(FSI.Group);
end;
with GenList.Items.Add do begin
Caption:='Type';
SubItems.Add(cSvcType[FSI.Typ]);
end;
with GenList.Items.Add do begin
Caption:='';
ImageIndex:=-2;
end;
with GenList.Items.Add do begin
Caption:='Status';
SubItems.Add(cSvcStatus[FSI.Status]);
ImageIndex:=-3;
end;
with GenList.Items.Add do begin
Caption:='Startup Mode';
SubItems.Add(cSvcStartup[FSI.Startup]);
end;
with GenList.Items.Add do begin
Caption:='Error Control';
SubItems.Add(cSvcErrorControl[FSI.ErrCtrl]);
end;
Dep1Tree.Items.Clear;
sl.CommaText:=FSI.DependOnService;
for i:=0 to sl.Count-1 do begin
s:=FPL.LookupServiceDisplayName(sl[i]);
if s<>'' then begin
n:=Dep1Tree.Items.AddChild(nil,s);
n.ImageIndex:=0;
n.HasChildren:=True;
end;
end;
Dep1Tree.AlphaSort;
Dep2Tree.Items.Clear;
FPL.FindServiceDependants(FSI.Name,sl);
for i:=0 to sl.Count-1 do begin
n:=Dep2Tree.Items.AddChild(nil,FPL.LookupServiceDisplayName(sl[i]));
n.ImageIndex:=0;
n.HasChildren:=True;
end;
Dep2Tree.AlphaSort;
end;
procedure Tdlg_SvcDetails.FormCreate(Sender: TObject);
begin
pc.ActivePage:=TabSheet1;
sl:=TStringList.Create;
end;
procedure Tdlg_SvcDetails.Dep1TreeExpanding(Sender: TObject;
Node: TTreeNode; var AllowExpansion: Boolean);
var
idx,i: Integer;
n: TTreeNode;
s: string;
begin
if Node.getFirstChild<>nil then
Exit;
idx:=FPL.FindService(Node.Text);
if idx>-1 then begin
sl.CommaText:=FPL.Services[idx].DependOnService;
for i:=0 to sl.Count-1 do begin
s:=FPL.LookupServiceDisplayName(sl[i]);
if s<>'' then begin
n:=TTreeView(Sender).Items.AddChild(Node,s);
n.ImageIndex:=0;
n.HasChildren:=True;
end;
end;
Node.AlphaSort;
end;
Node.HasChildren:=(Node.getFirstChild<>nil);
end;
procedure Tdlg_SvcDetails.FormDestroy(Sender: TObject);
begin
sl.Free;
end;
procedure Tdlg_SvcDetails.Dep2TreeExpanding(Sender: TObject;
Node: TTreeNode; var AllowExpansion: Boolean);
var
idx,i: Integer;
n: TTreeNode;
begin
if Node.getFirstChild<>nil then
Exit;
idx:=FPL.FindService(Node.Text);
if idx>-1 then begin
FPL.FindServiceDependants(FPL.Services[idx].Name,sl);
for i:=0 to sl.Count-1 do begin
n:=TTreeView(Sender).Items.AddChild(Node,FPL.LookupServiceDisplayName(sl[i]));
n.ImageIndex:=0;
n.HasChildren:=True;
end;
Node.AlphaSort;
end;
Node.HasChildren:=(Node.getFirstChild<>nil);
end;
end.
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -