?? main.pas
字號:
{$INCLUDE MITEC_DEF.Inc}
unit Main;
interface
uses
{$IFDEF D7PLUS} XPMan, {$ENDIF}
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, Menus, ImgList,
ActnList, StdActns, ComCtrls, MDITab, ToolWin, AppEvnts, ExtCtrls,
MSI_Common, MSI_Memory, MSI_CPUUsage;
const
WM_OPENFILE = WM_USER + 1000;
type
Twnd_msi_Main = class(TForm)
ilWin: TImageList;
WinBarMenu: TPopupMenu;
pmTitle: TMenuItem;
N5: TMenuItem;
pmRestore: TMenuItem;
pmMinimize: TMenuItem;
pmMaximize: TMenuItem;
MenuItem1: TMenuItem;
pmMinimizeAll: TMenuItem;
pmCloseAll: TMenuItem;
MenuItem2: TMenuItem;
pmClose: TMenuItem;
MainMenu: TMainMenu;
ActionList: TActionList;
File1: TMenuItem;
Open1: TMenuItem;
ToolbarImages: TImageList;
ApplicationEvents: TApplicationEvents;
Close1: TMenuItem;
acExit: TAction;
Exit1: TMenuItem;
Help1: TMenuItem;
About1: TMenuItem;
acWinCascade: TWindowCascade;
acWinTileHorizontal: TWindowTileHorizontal;
acWinTileVertical: TWindowTileVertical;
Windows1: TMenuItem;
Cascade1: TMenuItem;
ileHorizontally1: TMenuItem;
ileVertically1: TMenuItem;
WinActionList: TActionList;
acAction: TAction;
acRestore: TAction;
acMinimize: TAction;
acMaximize: TAction;
acMinAll: TAction;
acCloseAll: TAction;
acClose: TAction;
acFlat: TAction;
acMultiline: TAction;
N8: TMenuItem;
acAbout: TAction;
acOpen: TAction;
CoolBar: TCoolBar;
acCloseChild: TAction;
acRefresh: TAction;
N1: TMenuItem;
Refresh1: TMenuItem;
acSave: TAction;
Save1: TMenuItem;
CPUUsage: TMiTeC_CPUUsage;
Memory: TMiTeC_Memory;
sb: TStatusBar;
acHome: TAction;
HomePage1: TMenuItem;
N2: TMenuItem;
acReport: TAction;
SummaryReport1: TMenuItem;
acLocal: TAction;
N3: TMenuItem;
LocalMachine1: TMenuItem;
od: TOpenDialog;
sd: TSaveDialog;
procedure acCloseChildExecute(Sender: TObject);
procedure acLocalExecute(Sender: TObject);
procedure acReportExecute(Sender: TObject);
procedure acHomeExecute(Sender: TObject);
procedure acSaveAccept(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure acRefreshExecute(Sender: TObject);
procedure acOpenAccept(Sender: TObject);
procedure MDITabMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure ApplicationEventsIdle(Sender: TObject; var Done: Boolean);
procedure FormCreate(Sender: TObject);
procedure acExitExecute(Sender: TObject);
procedure acAboutExecute(Sender: TObject);
procedure acActionExecute(Sender: TObject);
procedure acRestoreExecute(Sender: TObject);
procedure acMinimizeExecute(Sender: TObject);
procedure acMaximizeExecute(Sender: TObject);
procedure acMinAllExecute(Sender: TObject);
procedure acCloseAllExecute(Sender: TObject);
procedure acCloseExecute(Sender: TObject);
procedure acFlatExecute(Sender: TObject);
procedure acMultilineExecute(Sender: TObject);
procedure MruManItemClick(Sender: TObject; MenuItem: TMenuItem;
const FileName: String; const Data: WideString;
var CanDelete: Boolean);
procedure FormShow(Sender: TObject);
procedure sdTypeChange(Sender: TObject);
procedure CPUUsageInterval(Sender: TObject; Values: TCPUUsages;
AvgValue: Integer);
private
MDITab: TMDITab;
protected
procedure WMOPENFILE(var Msg: TMessage); message WM_OPENFILE;
public
procedure SetControls;
function ShowChild(AChild :TFormClass; ChildCaption: string; ImageIdx: Integer = -1; AHint: string = ''; ABringToFront: Boolean = True; AMultiInstance: boolean = False) :TForm;
function FindChild(AChild :TFormClass; ChildCaption: string = '') :TForm;
procedure OpenFile(AFilename: string); overload;
procedure OpenFile(AFiles: TStrings); overload;
procedure OpenLocal;
end;
procedure ExpandHID(VEN,DEV: DWORD; var SVEN,SDEV: string);
procedure ExpandUSB(VEN,DEV: WORD; var SDEV: string);
procedure ExpandMON(SIG: string; var SSIG: string);
var
wnd_msi_Main: Twnd_msi_Main;
PCIDEVS, USBDEVS, MONDEVS: TStringList;
const
fnPCIDEVS = 'PCIDEVS.TXT';
fnUSBDEVS = 'USBDEVS.TXT';
fnMONDEVS = 'MONDEVS.TXT';
implementation
uses CommDlg, ShellAPI, MiTeC_Dialogs, Viewer, MiTeC_Routines, Summary, MSI_GUI, MSI_XML_Reports;
{$R *.dfm}
function Twnd_msi_Main.FindChild(AChild: TFormClass;
ChildCaption: string): TForm;
var
i :integer;
begin
Result:=nil;
for i:=0 to mdichildcount-1 do
if (AChild=MDIChildren[i].ClassType) and
((Trim(ChildCaption)='') or ((Trim(ChildCaption)<>'') and SameText(ChildCaption,MDIChildren[i].Caption))) then begin
Result:=MDIChildren[i];
Break;
end;
end;
function Twnd_msi_Main.ShowChild;
var
i :integer;
icon: TIcon;
begin
Icon:=TIcon.Create;
Result:=nil;
if not AMultiInstance then
for i:=0 to mdichildcount-1 do
if (AChild=MDIChildren[i].ClassType) and SameText(ChildCaption,MDIChildren[i].Caption) then begin
result:=MDIChildren[i];
break;
end;
if assigned(result) then
result.show
else begin
result:=achild.create(self);
Result.Caption:=ChildCaption;
MDITab.Images.GetIcon(ImageIdx,icon);
Result.Icon:=icon;
MDITab.addtab(Result,ImageIdx,AHint);
end;
icon.Free;
end;
procedure Twnd_msi_Main.WMOPENFILE(var Msg: TMessage);
begin
OpenFile(PChar(Msg.wParam));
end;
procedure Twnd_msi_Main.MDITabMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if MDITabIndex>-1 then
pmtitle.caption:=mditab.MDIChildren[MDITabIndex].caption
else
pmtitle.caption:='<none>';
end;
procedure Twnd_msi_Main.ApplicationEventsIdle(Sender: TObject;
var Done: Boolean);
var
i,n: Integer;
begin
SetControls;
n:=MDIChildCount;
for i:=n-1 downto 0 do
{if (MDIChildren[i] is Twnd_adoq_Query) then
(MDIChildren[i] as Twnd_adoq_Query).SetControls
else if (MDIChildren[i] is Twnd_adoq_History) then
(MDIChildren[i] as Twnd_adoq_History).SetControls;
{else if (MDIChildren[i] is Twnd_adoq_Table) then
(MDIChildren[i] as Twnd_adoq_Table).SetControls;}
try
except
end;
end;
procedure Twnd_msi_Main.CPUUsageInterval(Sender: TObject; Values: TCPUUsages;
AvgValue: Integer);
begin
Memory.RefreshData;
sb.Panels[0].Text:=Format('CPU: %d %%',[AvgValue]);
sb.Panels[1].Text:=Format('Mem: %d %%',[Memory.MemoryLoad]);
end;
procedure ExpandHID(VEN, DEV: DWORD; var SVEN, SDEV: string);
var
s: string;
i,j: Integer;
begin
SVEN:='';
SDEV:='';
with PCIDEVS do begin
if Count=0 then
Exit;
if VEN<>0 then begin
s:=Format('V'#9'%4.4x'#9,[VEN]);
for i:=0 to Count-1 do
if Pos(s,Strings[i])=1 then begin
SVEN:=Copy(Strings[i],Length(s)+1,255);
j:=i;
Break;
end;
end;
if DEV<>0 then begin
s:=Format('D'#9'%4.4x'#9,[DEV]);
for i:=j to Count-1 do
if Pos(s,Strings[i])=1 then begin
SDEV:=Copy(Strings[i],Length(s)+1,255);
Break;
end;
end;
end;
end;
procedure ExpandMON(SIG: string; var SSIG: string);
var
s: string;
i: Integer;
begin
SSIG:='';
s:=Uppercase(SIG);
with MONDEVS do begin
if Count=0 then
Exit;
for i:=0 to Count-1 do
if SameText(s,Names[i]) then begin
SSIG:=Values[Names[i]];
Break;
end;
end;
end;
procedure ExpandUSB(VEN, DEV: WORD; var SDEV: string);
var
s: string;
i: Integer;
begin
SDEV:='';
with USBDEVS do begin
if Count=0 then
Exit;
if VEN<>0 then
s:=Format('%4.4x',[VEN]);
for i:=0 to Count-1 do
if SameText(s,Names[i]) then begin
SDEV:=Values[Names[i]];
Break;
end;
if DEV<>0 then
s:=s+Format(':%4.4x',[DEV]);
for i:=0 to Count-1 do
if SameText(s,Names[i]) then begin
SDEV:=Values[Names[i]];
Break;
end;
end;
end;
procedure Twnd_msi_Main.SetControls;
begin
if ActiveMDIChild is Tmdi_msi_Viewer then
(ActiveMDIChild as Tmdi_msi_Viewer).SetControls;
acCloseChild.Enabled:=MDIChildCount>0;
acRefresh.Enabled:=MDIChildCount>0;
acSave.Enabled:=MDIChildCount>0;
end;
procedure Twnd_msi_Main.FormClose(Sender: TObject; var Action: TCloseAction);
var
i: Integer;
begin
CPUUsage.Active:=False;
for i:=MDIChildCount-1 downto 0 do
MDIChildren[I].Close;
PCIDEVS.Free;
USBDEVS.Free;
MONDEVS.Free;
end;
procedure Twnd_msi_Main.FormCreate(Sender: TObject);
begin
MDITab:=TMDITab.Create(Self);
with MDITab do begin
Height:=22;
Cursor:=crHandPoint;
Align:=alTop;
DragKind:=dkDock;
HotTrack:=True;
Images:=ilWin;
Style:=tsFlatButtons;
PopupMenu:=WinBarMenu;
ShowHint:=True;
ShowOnChange:=True;
OnMouseDown:=MDITabMouseDown;
end;
with CoolBar.Bands.Add do
Control:=MDITab;
PCIDEVS:=TStringList.Create;
if FileExists(fnPCIDEVS) then
PCIDEVS.LoadFromFile(fnPCIDEVS);
USBDEVS:=TStringList.Create;
if FileExists(fnUSBDEVS) then
USBDEVS.LoadFromFile(fnUSBDEVS);
MONDEVS:=TStringList.Create;
if FileExists(fnMONDEVS) then
MONDEVS.LoadFromFile(fnMONDEVS);
sb.panels[2].Text:=GetUser;
sb.panels[3].Text:=Trim(OSName+' '+OSEdition);
end;
procedure Twnd_msi_Main.acExitExecute(Sender: TObject);
begin
Close;
end;
procedure Twnd_msi_Main.acAboutExecute(Sender: TObject);
begin
ShellAbout(Handle,PChar(Application.Title+' '+cVersion),cCopyright,Application.Icon.Handle);
end;
procedure Twnd_msi_Main.acActionExecute(Sender: TObject);
begin
with MDITab.MDIChildren[MDITabIndex] do begin
SetFocus;
BringToFront;
end;
end;
procedure Twnd_msi_Main.acRefreshExecute(Sender: TObject);
begin
Tmdi_msi_Viewer(ActiveMDIChild).RefreshData;
end;
procedure Twnd_msi_Main.acReportExecute(Sender: TObject);
begin
ShowSummaryReport;
end;
procedure Twnd_msi_Main.acRestoreExecute(Sender: TObject);
begin
MDITab.MDIChildren[MDITabIndex].windowstate:=wsNormal;
end;
procedure Twnd_msi_Main.acSaveAccept(Sender: TObject);
var
sl: TStringList;
begin
with Tmdi_msi_Viewer(ActiveMDIChild) do begin
if MSIC.StorageFilename='' then
sd.Filename:=MachineName+cSISExt
else
sd.FileName:=MSIC.StorageFilename;
if sd.Execute then begin
Screen.Cursor:=crHourGlass;
try
case sd.FilterIndex of
1: MSIC.SaveToStorage(ChangeFileext(sd.FileName,cSISExt));
2: begin
sl:=TStringList.Create;
try
SystemInfo_XML_Report(MSIC,sl);
sl.SaveToFile(ChangeFileext(sd.FileName,'.xml'));
{$IFDEF D6PLUS}
SaveXSLTemplate(IncludeTrailingPathDelimiter(ExtractFilePath(sd.FileName))+XSLName);
{$ELSE}
SaveXSLTemplate(IncludeTrailingBackslash(ExtractFilePath(sd.FileName))+XSLName);
{$ENDIF}
finally
sl.Free;
end;
end;
end;
finally
Screen.Cursor:=crDefault;
end;
end;
end;
end;
procedure Twnd_msi_Main.acMinimizeExecute(Sender: TObject);
begin
MDITab.MDIChildren[MDITabIndex].windowstate:=wsMinimized;
end;
procedure Twnd_msi_Main.acMaximizeExecute(Sender: TObject);
begin
MDITab.MDIChildren[MDITabIndex].windowstate:=wsMaximized;
end;
procedure Twnd_msi_Main.acMinAllExecute(Sender: TObject);
begin
MDITab.MinimizeAll;
end;
procedure Twnd_msi_Main.acCloseAllExecute(Sender: TObject);
begin
MDITab.CloseAll;
end;
procedure Twnd_msi_Main.acCloseChildExecute(Sender: TObject);
begin
ACtiveMDIChild.Close;
end;
procedure Twnd_msi_Main.acCloseExecute(Sender: TObject);
begin
MDITab.MDIChildren[MDITabIndex].Close;
end;
procedure Twnd_msi_Main.acFlatExecute(Sender: TObject);
begin
if MDITab.Style=tsButtons then
MDITab.Style:=tsFlatButtons
else
MDITab.Style:=tsButtons;
end;
procedure Twnd_msi_Main.acHomeExecute(Sender: TObject);
begin
ShellExecute(handle,'open',cWWW,nil,nil,SW_NORMAL);
end;
procedure Twnd_msi_Main.acLocalExecute(Sender: TObject);
begin
OpenLocal;
end;
procedure Twnd_msi_Main.acMultilineExecute(Sender: TObject);
begin
MDITab.MultiLine:=not MDITab.MultiLine;
end;
procedure Twnd_msi_Main.OpenFile(AFilename: string);
var
Child: TForm;
begin
if FileExists(AFileName) then begin
Child:=ShowChild(Tmdi_msi_Viewer,ExtractFileName(AFileName),6,AFilename,True,True);
with Tmdi_msi_Viewer(Child) do begin
try
OpenFile(AFilename);
except on e: exception do begin
Error(Format('Cannot open file %s: %s',[AFilename,e.Message]));
Close;
end end;
end;
end else
Error(Format('File %s does not exist.',[AFilename]));
end;
procedure Twnd_msi_Main.acOpenAccept(Sender: TObject);
begin
if od.Execute then
OpenFile(od.Files);
end;
procedure Twnd_msi_Main.MruManItemClick(Sender: TObject;
MenuItem: TMenuItem; const FileName: String; const Data: WideString;
var CanDelete: Boolean);
begin
OpenFile(FileName);
end;
procedure Twnd_msi_Main.FormShow(Sender: TObject);
var
par :string;
slpar :tstringlist;
i :integer;
begin
par:='';
slpar:=tstringlist.create;
for i:=1 to paramcount do begin
par:=par+paramstr(i)+' ';
if fileexists(par) then begin
slpar.add(trim(par));
par:='';
end;
end;
openfile(slpar);
slpar.free;
if ParamCount=0 then
OpenLocal;
end;
procedure Twnd_msi_Main.OpenFile(AFiles: TStrings);
var
Child: TForm;
i: Integer;
begin
for i:=0 to AFiles.Count-1 do
if FileExists(AFiles[i]) then begin
Child:=ShowChild(Tmdi_msi_Viewer,ExtractFileName(AFiles[i]),6,AFiles[i],True,True);
with Tmdi_msi_Viewer(Child) do begin
try
OpenFile(AFiles[i]);
except on e: exception do begin
Error(Format('Cannot open file %s.',[AFiles[i]]));
Close;
end end;
end;
end else
Error(Format('File %s does not exist.',[AFiles[i]]));
end;
procedure Twnd_msi_Main.OpenLocal;
var
Child: TForm;
begin
Child:=ShowChild(Tmdi_msi_Viewer,Format('Local: %s',[MachineName]),5,Format('Local: %s',[MachineName]),True,True);
with Tmdi_msi_Viewer(Child) do
OpenLocal;
end;
procedure Twnd_msi_Main.sdTypeChange(Sender: TObject);
var
s: string;
begin
case sd.FilterIndex of
1: s:=ChangeFileExt(sd.FileName,cSISExt);
2: s:=ChangeFileExt(sd.FileName,'.xml');
end;
s:=ExtractFilename(s);
SendMessage(Windows.GetParent(sd.Handle),
CDM_SETCONTROLTEXT,
1152,
Integer(s));
end;
end.
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -