615 lines
18 KiB
Plaintext
615 lines
18 KiB
Plaintext
unit DWizTracking;
|
||
|
||
interface
|
||
|
||
uses
|
||
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
|
||
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls,
|
||
ManagerMonInfo, Vcl.ComCtrls, Vcl.Buttons, VirtualTrees;
|
||
|
||
type
|
||
PMonResult = ^TMonResult;
|
||
TMonResult = record
|
||
MonInfo: TMonInfo;
|
||
sHitReuslts: String;
|
||
nHitCnt,
|
||
nHitWordCnt,
|
||
nTotalWordCnt: Integer;
|
||
wHitPerc,
|
||
wFndWordPerc: WORD;
|
||
end;
|
||
|
||
PWinResult = ^TWinResult;
|
||
TWinResult = record
|
||
dtLog: TDateTime;
|
||
WinInfo: PWinInfo;
|
||
sHitReuslts: String;
|
||
nHitCnt,
|
||
nHitWordCnt,
|
||
nTotalWordCnt: Integer;
|
||
wHitPerc,
|
||
wFndWordPerc: WORD;
|
||
end;
|
||
|
||
PDocResult = ^TDocResult;
|
||
TDocResult = record
|
||
sPath,
|
||
sHitReuslts: String;
|
||
nHitCnt,
|
||
nHitWordCnt,
|
||
nTotalWordCnt: Integer;
|
||
wHitPerc,
|
||
wFndWordPerc: WORD;
|
||
end;
|
||
|
||
TDlgWizTracking = class(TForm)
|
||
OpenDialog: TOpenDialog;
|
||
pnBottom: TPanel;
|
||
pcMain: TPageControl;
|
||
tabInit: TTabSheet;
|
||
tabSetText: TTabSheet;
|
||
Label1: TLabel;
|
||
edImgPath: TEdit;
|
||
btnOpenImgFile: TSpeedButton;
|
||
chInputSeachInfo: TCheckBox;
|
||
btnPrev: TButton;
|
||
btnNext: TButton;
|
||
Label2: TLabel;
|
||
mmTracText: TMemo;
|
||
chTracDate: TCheckBox;
|
||
dpBegin: TDateTimePicker;
|
||
Label3: TLabel;
|
||
dpUntil: TDateTimePicker;
|
||
Label4: TLabel;
|
||
Label5: TLabel;
|
||
edPgNames: TEdit;
|
||
Label6: TLabel;
|
||
edWndTitles: TEdit;
|
||
tabResult: TTabSheet;
|
||
pcResult: TPageControl;
|
||
tabMonInfo: TTabSheet;
|
||
tabWinInfo: TTabSheet;
|
||
vtMon: TVirtualStringTree;
|
||
lbSchTxtInfo: TLabel;
|
||
vtWin: TVirtualStringTree;
|
||
tabDocInfo: TTabSheet;
|
||
vtDoc: TVirtualStringTree;
|
||
procedure btnOpenImgFileClick(Sender: TObject);
|
||
procedure chInputSeachInfoClick(Sender: TObject);
|
||
procedure btnNextClick(Sender: TObject);
|
||
procedure chTracDateClick(Sender: TObject);
|
||
procedure vtMonGetNodeDataSize(Sender: TBaseVirtualTree;
|
||
var NodeDataSize: Integer);
|
||
procedure vtMonFreeNode(Sender: TBaseVirtualTree; Node: PVirtualNode);
|
||
procedure vtMonGetText(Sender: TBaseVirtualTree; Node: PVirtualNode;
|
||
Column: TColumnIndex; TextType: TVSTTextType; var CellText: string);
|
||
procedure vtMonGetHint(Sender: TBaseVirtualTree; Node: PVirtualNode;
|
||
Column: TColumnIndex; var LineBreakStyle: TVTTooltipLineBreakStyle;
|
||
var HintText: string);
|
||
procedure vtMonHeaderClick(Sender: TVTHeader; HitInfo: TVTHeaderHitInfo);
|
||
procedure vtMonCompareNodes(Sender: TBaseVirtualTree; Node1,
|
||
Node2: PVirtualNode; Column: TColumnIndex; var Result: Integer);
|
||
procedure btnPrevClick(Sender: TObject);
|
||
procedure vtMonDblClick(Sender: TObject);
|
||
procedure vtWinGetNodeDataSize(Sender: TBaseVirtualTree;
|
||
var NodeDataSize: Integer);
|
||
procedure vtWinFreeNode(Sender: TBaseVirtualTree; Node: PVirtualNode);
|
||
procedure vtWinGetText(Sender: TBaseVirtualTree; Node: PVirtualNode;
|
||
Column: TColumnIndex; TextType: TVSTTextType; var CellText: string);
|
||
procedure vtWinCompareNodes(Sender: TBaseVirtualTree; Node1,
|
||
Node2: PVirtualNode; Column: TColumnIndex; var Result: Integer);
|
||
procedure vtWinDblClick(Sender: TObject);
|
||
procedure vtDocGetNodeDataSize(Sender: TBaseVirtualTree;
|
||
var NodeDataSize: Integer);
|
||
procedure vtDocFreeNode(Sender: TBaseVirtualTree; Node: PVirtualNode);
|
||
procedure vtDocGetText(Sender: TBaseVirtualTree; Node: PVirtualNode;
|
||
Column: TColumnIndex; TextType: TVSTTextType; var CellText: string);
|
||
procedure vtDocCompareNodes(Sender: TBaseVirtualTree; Node1,
|
||
Node2: PVirtualNode; Column: TColumnIndex; var Result: Integer);
|
||
private
|
||
{ Private declarations }
|
||
MgMonInfo_: TManagerMonInfo;
|
||
nFndCnt_,
|
||
nFndWordCnt_: Integer;
|
||
public
|
||
{ Public declarations }
|
||
Constructor Create(aOwner: TComponent; aMgMonInfo: TManagerMonInfo);
|
||
|
||
procedure TrackingText;
|
||
end;
|
||
|
||
var
|
||
DlgWizTracking: TDlgWizTracking;
|
||
|
||
implementation
|
||
|
||
uses
|
||
Tocsg.Process, Tocsg.Path, Tocsg.Safe, Vcl.Imaging.pngimage, Tocsg.Strings,
|
||
Tocsg.Shell, VirtualTrees.Types, System.Math, System.DateUtils,
|
||
Tocsg.VTUtil, Tocsg.Convert;
|
||
|
||
{$R *.dfm}
|
||
|
||
function ExtrTextFromImageFile(sPath: String): String;
|
||
var
|
||
sTemp: String;
|
||
StrList: TStringList;
|
||
i, n: Integer;
|
||
begin
|
||
Result := '';
|
||
sTemp := GetRunExePathDir + 'Temp\';
|
||
ASSERT(ForceDirectories(sTemp));
|
||
sTemp := sTemp + ExtractFileName(sPath);
|
||
|
||
ExecuteAppWaitUntilTerminate(GetRunExePathDir + EXE_OCR,
|
||
Format('"%s" "%s"', [sPath, sTemp]), SW_HIDE, 60000);
|
||
if FileExists(sTemp) then
|
||
begin
|
||
Guard(StrList, TStringList.Create);
|
||
StrList.LoadFromFile(sTemp, TEncoding.UTF8);
|
||
Result := StrList.Text;
|
||
DeleteFile(PChar(sTemp));
|
||
end;
|
||
end;
|
||
|
||
Constructor TDlgWizTracking.Create(aOwner: TComponent; aMgMonInfo: TManagerMonInfo);
|
||
|
||
procedure InitCtrls;
|
||
var
|
||
i: Integer;
|
||
begin
|
||
for i := 0 to pcMain.PageCount - 1 do
|
||
pcMain.Pages[i].TabVisible := false;
|
||
pcMain.ActivePage := tabInit;
|
||
|
||
dpBegin.DateTime := Now;
|
||
dpUntil.DateTime := Now;
|
||
end;
|
||
|
||
begin
|
||
Inherited Create(aOwner);
|
||
MgMonInfo_ := aMgMonInfo;
|
||
nFndCnt_ := 0;
|
||
nFndWordCnt_ := 0;
|
||
InitCtrls;
|
||
end;
|
||
|
||
procedure TDlgWizTracking.btnNextClick(Sender: TObject);
|
||
begin
|
||
case pcMain.ActivePageIndex of
|
||
0 : // tabInit
|
||
begin
|
||
if not chInputSeachInfo.Checked then
|
||
begin
|
||
edImgPath.Text := Trim(edImgPath.Text);
|
||
if edImgPath.Text = '' then
|
||
begin
|
||
MessageBox(Handle, PChar('<27>̹<EFBFBD><CCB9><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>θ<EFBFBD> <20>Է<EFBFBD><D4B7><EFBFBD><EFBFBD>ֽʽÿ<CABD>.'), PChar(Caption), MB_ICONWARNING or MB_OK);
|
||
edImgPath.SetFocus;
|
||
exit;
|
||
end;
|
||
|
||
if not FileExists(edImgPath.Text) then
|
||
begin
|
||
MessageBox(Handle, PChar('<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>.'), PChar(Caption), MB_ICONWARNING or MB_OK);
|
||
edImgPath.SetFocus;
|
||
exit;
|
||
end;
|
||
|
||
mmTracText.Text := ExtrTextFromImageFile(edImgPath.Text);
|
||
{$IFDEF DEBUG}
|
||
if DebugHook = 0 then
|
||
{$ENDIF}
|
||
ExecutePath(edImgPath.Text);
|
||
end;
|
||
pcMain.ActivePage := tabSetText;
|
||
btnPrev.Enabled := true;
|
||
end;
|
||
|
||
1 : // tabSetText
|
||
begin
|
||
mmTracText.Text := Trim(mmTracText.Text);
|
||
edPgNames.Text := Trim(edPgNames.Text);
|
||
edWndTitles.Text := Trim(edWndTitles.Text);
|
||
|
||
if mmTracText.Text = '' then
|
||
begin
|
||
MessageBox(Handle, PChar('<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ؽ<EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>.'), PChar(Caption), MB_ICONWARNING or MB_OK);
|
||
mmTracText.SetFocus;
|
||
exit;
|
||
end;
|
||
|
||
TrackingText;
|
||
pcMain.ActivePage := tabResult;
|
||
end;
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgWizTracking.btnOpenImgFileClick(Sender: TObject);
|
||
begin
|
||
if OpenDialog.Execute(Handle) then
|
||
edImgPath.Text := OpenDialog.FileName;
|
||
end;
|
||
|
||
procedure TDlgWizTracking.btnPrevClick(Sender: TObject);
|
||
begin
|
||
case pcMain.ActivePageIndex of
|
||
0 : ASSERT(false);
|
||
else begin
|
||
pcMain.ActivePageIndex := pcMain.ActivePageIndex - 1;
|
||
if pcMain.ActivePageIndex = 0 then
|
||
btnPrev.Enabled := false;
|
||
end;
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgWizTracking.chInputSeachInfoClick(Sender: TObject);
|
||
begin
|
||
edImgPath.Enabled := not chInputSeachInfo.Checked;
|
||
btnOpenImgFile.Enabled := edImgPath.Enabled;
|
||
end;
|
||
|
||
procedure TDlgWizTracking.chTracDateClick(Sender: TObject);
|
||
begin
|
||
dpBegin.Enabled := chTracDate.Checked;
|
||
Label3.Enabled := dpBegin.Enabled;
|
||
dpUntil.Enabled := dpBegin.Enabled;
|
||
Label4.Enabled := dpBegin.Enabled;
|
||
end;
|
||
|
||
procedure TDlgWizTracking.TrackingText;
|
||
var
|
||
sPName,
|
||
sSearchTxt: String;
|
||
StrList: TStringList;
|
||
i, c: Integer;
|
||
pData: PMonResult;
|
||
pDataW: PWinResult;
|
||
pDataD: PDocResult;
|
||
begin
|
||
vtMon.BeginUpdate;
|
||
vtWin.BeginUpdate;
|
||
vtDoc.BeginUpdate;
|
||
try
|
||
VT_Clear(vtMon);
|
||
VT_Clear(vtWin);
|
||
VT_Clear(vtDoc);
|
||
|
||
Guard(StrList, TStringList.Create);
|
||
|
||
sSearchTxt := RefineSearchText(mmTracText.Text);
|
||
nFndCnt_ := SplitString(sSearchTxt, ' ', StrList, false, false);
|
||
SplitString(sSearchTxt, ' ', StrList, false, true);
|
||
nFndWordCnt_ := 0;
|
||
for i := 0 to StrList.Count - 1 do
|
||
if StrList[i].Length > 1 then
|
||
begin
|
||
SumString(sSearchTxt, StrList[i], '|');
|
||
Inc(nFndWordCnt_);
|
||
end;
|
||
|
||
lbSchTxtInfo.Caption := Format('<27>˻<EFBFBD> <20>ܾ<EFBFBD> <20><> : %d, <20>˻<EFBFBD><CBBB><EFBFBD> <20><> : %d', [nFndWordCnt_, nFndCnt_]);
|
||
|
||
for i := 0 to MgMonInfo_.MonInfoList.Count - 1 do
|
||
begin
|
||
pData := VT_AddChildData(vtMon);
|
||
with pData^ do
|
||
begin
|
||
MonInfo := MgMonInfo_.MonInfoList[i];
|
||
SearchMonText(MonInfo.MonText, sSearchTxt, nHitWordCnt, nHitCnt, nTotalWordCnt, sHitReuslts);
|
||
if nFndWordCnt_ > 0 then
|
||
wFndWordPerc := (nHitWordCnt * 100) div nFndWordCnt_;
|
||
if nTotalWordCnt > 0 then
|
||
wHitPerc := (nHitCnt * 100) div nTotalWordCnt;
|
||
end;
|
||
|
||
with MgMonInfo_.MonInfoList[i] do
|
||
begin
|
||
for c := 0 to WinInfoList.Count - 1 do
|
||
begin
|
||
sPName := ExtractFileName(WinInfoList[c].sPPath);
|
||
if WinInfoList[c].bActive or
|
||
( (edPgNames.Text <> '') and (Pos(sPName.ToUpper, UpperCase(edPgNames.Text)) > 0) ) or
|
||
( (edWndTitles.Text <> '') and (Pos(WinInfoList[c].sTitle.ToUpper, UpperCase(edWndTitles.Text)) > 0) ) then
|
||
begin
|
||
pDataW := VT_AddChildData(vtWin);
|
||
ZeroMemory(pDataW, SizeOf(TWinResult));
|
||
with pDataW^ do
|
||
begin
|
||
dtLog := LogDT;
|
||
WinInfo := WinInfoList[c];
|
||
if WinInfoList[c].bActive then
|
||
begin
|
||
SearchMonText(WinInfo.sTitle + ' ' + WinInfo.sImgTxt,
|
||
sSearchTxt, nHitWordCnt, nHitCnt, nTotalWordCnt, sHitReuslts);
|
||
if nFndWordCnt_ > 0 then
|
||
wFndWordPerc := (nHitWordCnt * 100) div nFndWordCnt_;
|
||
if nTotalWordCnt > 0 then
|
||
wHitPerc := (nHitCnt * 100) div nTotalWordCnt;
|
||
end;
|
||
end;
|
||
end;
|
||
end;
|
||
end;
|
||
end;
|
||
|
||
for i := 0 to MgMonInfo_.RecentDocList.Count - 1 do
|
||
begin
|
||
if FileExists(MgMonInfo_.RecentDocList[i]) then
|
||
begin
|
||
pDataD := VT_AddChildData(vtDoc);
|
||
pDataD.sPath := MgMonInfo_.RecentDocList[i];
|
||
|
||
StrList.LoadFromFile(pDataD.sPath, TEncoding.UTF8);
|
||
with pDataD^ do
|
||
begin
|
||
SearchMonText(StrList.Text, sSearchTxt, nHitWordCnt, nHitCnt, nTotalWordCnt, sHitReuslts);
|
||
if nFndWordCnt_ > 0 then
|
||
wFndWordPerc := (nHitWordCnt * 100) div nFndWordCnt_;
|
||
if nTotalWordCnt > 0 then
|
||
wHitPerc := (nHitCnt * 100) div nTotalWordCnt;
|
||
end;
|
||
end;
|
||
end;
|
||
|
||
vtMon.Sort(nil, 1, sdAscending);
|
||
vtWin.Sort(nil, 1, sdAscending);
|
||
vtDoc.Sort(nil, 1, sdAscending);
|
||
finally
|
||
vtDoc.EndUpdate;
|
||
vtWin.EndUpdate;
|
||
vtMon.EndUpdate;
|
||
end;
|
||
pcResult.ActivePage := tabMonInfo;
|
||
|
||
Application.ProcessMessages;
|
||
end;
|
||
|
||
procedure TDlgWizTracking.vtDocCompareNodes(Sender: TBaseVirtualTree; Node1,
|
||
Node2: PVirtualNode; Column: TColumnIndex; var Result: Integer);
|
||
var
|
||
pData1, pData2: PDocResult;
|
||
begin
|
||
pData1 := Sender.GetNodeData(Node1);
|
||
pData2 := Sender.GetNodeData(Node2);
|
||
|
||
case Column of
|
||
2 : Result := CompareValue(pData1.wFndWordPerc, pData2.wFndWordPerc);
|
||
3 : Result := CompareValue(pData1.wHitPerc, pData2.wHitPerc);
|
||
4 : Result := CompareValue(pData1.nHitWordCnt, pData2.nHitWordCnt);
|
||
5 : Result := CompareValue(pData1.nHitCnt, pData2.nHitCnt);
|
||
6 : Result := CompareValue(pData1.nTotalWordCnt, pData2.nTotalWordCnt);
|
||
else
|
||
Result := CompareText(vtMon.Text[Node1, Column], vtMon.Text[Node2, Column]);
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgWizTracking.vtDocFreeNode(Sender: TBaseVirtualTree;
|
||
Node: PVirtualNode);
|
||
var
|
||
pData: PDocResult;
|
||
begin
|
||
pData := Sender.GetNodeData(Node);
|
||
Finalize(pData^);
|
||
end;
|
||
|
||
procedure TDlgWizTracking.vtDocGetNodeDataSize(Sender: TBaseVirtualTree;
|
||
var NodeDataSize: Integer);
|
||
begin
|
||
NodeDataSize := SizeOf(TDocResult);
|
||
end;
|
||
|
||
procedure TDlgWizTracking.vtDocGetText(Sender: TBaseVirtualTree;
|
||
Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
|
||
var CellText: string);
|
||
var
|
||
pData: PDocResult;
|
||
begin
|
||
pData := Sender.GetNodeData(Node);
|
||
|
||
case Column of
|
||
0 : CellText := IntToStr(Node.Index + 1);
|
||
1 : CellText := CutFileExt(CutFileExt(ExtractFileName(pData.sPath)));
|
||
2 : CellText := IntToStr(pData.wFndWordPerc) + '%';
|
||
3 : CellText := IntToStr(pData.wHitPerc) + '%';
|
||
4 : CellText := IntToStr(pData.nHitWordCnt);
|
||
5 : CellText := IntToStr(pData.nHitCnt);
|
||
6 : CellText := IntToStr(pData.nTotalWordCnt);
|
||
7 : CellText := pData.sHitReuslts
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgWizTracking.vtMonCompareNodes(Sender: TBaseVirtualTree; Node1,
|
||
Node2: PVirtualNode; Column: TColumnIndex; var Result: Integer);
|
||
var
|
||
pData1, pData2: PMonResult;
|
||
begin
|
||
pData1 := Sender.GetNodeData(Node1);
|
||
pData2 := Sender.GetNodeData(Node2);
|
||
|
||
case Column of
|
||
1 : Result := CompareDateTime(pData1.MonInfo.LogDT, pData2.MonInfo.LogDT);
|
||
2 : Result := CompareValue(pData1.wFndWordPerc, pData2.wFndWordPerc);
|
||
3 : Result := CompareValue(pData1.wHitPerc, pData2.wHitPerc);
|
||
4 : Result := CompareValue(pData1.nHitWordCnt, pData2.nHitWordCnt);
|
||
5 : Result := CompareValue(pData1.nHitCnt, pData2.nHitCnt);
|
||
6 : Result := CompareValue(pData1.nTotalWordCnt, pData2.nTotalWordCnt);
|
||
else
|
||
Result := CompareText(vtMon.Text[Node1, Column], vtMon.Text[Node2, Column]);
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgWizTracking.vtMonDblClick(Sender: TObject);
|
||
var
|
||
pNode: PVirtualNode;
|
||
pData: PMonResult;
|
||
sPath: String;
|
||
begin
|
||
pNode := vtMon.GetFirstSelected;
|
||
if pNode = nil then
|
||
exit;
|
||
|
||
pData := vtMon.GetNodeData(pNode);
|
||
sPath := GetRunExePathDir + 'Data\Img\' + pData.MonInfo.ImageFileName;
|
||
if FileExists(sPath) then
|
||
ExecutePath(sPath);
|
||
end;
|
||
|
||
procedure TDlgWizTracking.vtMonFreeNode(Sender: TBaseVirtualTree;
|
||
Node: PVirtualNode);
|
||
var
|
||
pData: PMonResult;
|
||
begin
|
||
pData := Sender.GetNodeData(Node);
|
||
Finalize(pData^);
|
||
end;
|
||
|
||
procedure TDlgWizTracking.vtMonGetHint(Sender: TBaseVirtualTree;
|
||
Node: PVirtualNode; Column: TColumnIndex;
|
||
var LineBreakStyle: TVTTooltipLineBreakStyle; var HintText: string);
|
||
begin
|
||
HintText := TVirtualStringTree(Sender).Text[Node, Column];
|
||
end;
|
||
|
||
procedure TDlgWizTracking.vtMonGetNodeDataSize(Sender: TBaseVirtualTree;
|
||
var NodeDataSize: Integer);
|
||
begin
|
||
NodeDataSize := SizeOf(TMonResult);
|
||
end;
|
||
|
||
procedure TDlgWizTracking.vtMonGetText(Sender: TBaseVirtualTree;
|
||
Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
|
||
var CellText: string);
|
||
var
|
||
pData: PMonResult;
|
||
begin
|
||
pData := Sender.GetNodeData(Node);
|
||
|
||
case Column of
|
||
0 : CellText := IntToStr(Node.Index + 1);
|
||
1 : CellText := DateTimeToStr(pData.MonInfo.LogDT);
|
||
2 : CellText := IntToStr(pData.wFndWordPerc) + '%';
|
||
3 : CellText := IntToStr(pData.wHitPerc) + '%';
|
||
4 : CellText := IntToStr(pData.nHitWordCnt);
|
||
5 : CellText := IntToStr(pData.nHitCnt);
|
||
6 : CellText := IntToStr(pData.nTotalWordCnt);
|
||
7 : CellText := pData.sHitReuslts
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgWizTracking.vtMonHeaderClick(Sender: TVTHeader;
|
||
HitInfo: TVTHeaderHitInfo);
|
||
begin
|
||
if HitInfo.Button = mbLeft then
|
||
begin
|
||
with Sender, Treeview, HitInfo do
|
||
begin
|
||
if HitInfo.Column < 0 then
|
||
exit;
|
||
|
||
if SortColumn > NoColumn then
|
||
Columns[SortColumn].Options := Columns[SortColumn].Options + [coParentColor];
|
||
|
||
if HitInfo.Column = 0 then
|
||
SortColumn := NoColumn
|
||
else begin
|
||
if (SortColumn = NoColumn) or (SortColumn <> Column) then
|
||
begin
|
||
SortColumn := Column;
|
||
SortDirection := sdAscending;
|
||
end else
|
||
if SortDirection = sdAscending then
|
||
SortDirection := sdDescending
|
||
else
|
||
SortDirection := sdAscending;
|
||
|
||
Columns[SortColumn].Color := $00F0FFFF;// TVirtualStringTree(Treeview).Colors.BackGroundColor - 500;
|
||
TVirtualStringTree(Treeview).BeginUpdate;
|
||
try
|
||
TVirtualStringTree(Treeview).SortTree(SortColumn, SortDirection, False);
|
||
finally
|
||
TVirtualStringTree(Treeview).EndUpdate;
|
||
end;
|
||
end;
|
||
end;
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgWizTracking.vtWinCompareNodes(Sender: TBaseVirtualTree; Node1,
|
||
Node2: PVirtualNode; Column: TColumnIndex; var Result: Integer);
|
||
var
|
||
pData1, pData2: PWinResult;
|
||
begin
|
||
pData1 := Sender.GetNodeData(Node1);
|
||
pData2 := Sender.GetNodeData(Node2);
|
||
|
||
case Column of
|
||
1 : Result := CompareDateTime(pData1.dtLog, pData2.dtLog);
|
||
5 : Result := CompareValue(pData1.wFndWordPerc, pData2.wFndWordPerc);
|
||
6 : Result := CompareValue(pData1.wHitPerc, pData2.wHitPerc);
|
||
7 : Result := CompareValue(pData1.nHitWordCnt, pData2.nHitWordCnt);
|
||
8 : Result := CompareValue(pData1.nHitCnt, pData2.nHitCnt);
|
||
9 : Result := CompareValue(pData1.nTotalWordCnt, pData2.nTotalWordCnt);
|
||
else
|
||
Result := CompareText(vtWin.Text[Node1, Column], vtWin.Text[Node2, Column]);
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgWizTracking.vtWinDblClick(Sender: TObject);
|
||
var
|
||
pNode: PVirtualNode;
|
||
pData: PWinResult;
|
||
sPath: String;
|
||
begin
|
||
pNode := vtWin.GetFirstSelected;
|
||
if pNode = nil then
|
||
exit;
|
||
|
||
pData := vtWin.GetNodeData(pNode);
|
||
sPath := GetRunExePathDir + 'Data\Img\' + pData.WinInfo.sImgFName;
|
||
if FileExists(sPath) then
|
||
ExecutePath(sPath)
|
||
else
|
||
MessageBox(Handle, PChar('<27>̹<EFBFBD><CCB9><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʽ<EFBFBD><CABD>ϴ<EFBFBD>.'), PChar(Caption), MB_ICONWARNING or MB_OK);
|
||
end;
|
||
|
||
procedure TDlgWizTracking.vtWinFreeNode(Sender: TBaseVirtualTree;
|
||
Node: PVirtualNode);
|
||
var
|
||
pData: PWinResult;
|
||
begin
|
||
pData := Sender.GetNodeData(Node);
|
||
Finalize(pData^);
|
||
end;
|
||
|
||
procedure TDlgWizTracking.vtWinGetNodeDataSize(Sender: TBaseVirtualTree;
|
||
var NodeDataSize: Integer);
|
||
begin
|
||
NodeDataSize := SizeOf(TWinResult);
|
||
end;
|
||
|
||
procedure TDlgWizTracking.vtWinGetText(Sender: TBaseVirtualTree;
|
||
Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
|
||
var CellText: string);
|
||
var
|
||
pData: PWinResult;
|
||
begin
|
||
pData := Sender.GetNodeData(Node);
|
||
|
||
case Column of
|
||
0 : CellText := IntToStr(Node.Index + 1);
|
||
1 : CellText := DateTimeToStr(pData.dtLog);
|
||
2 : CellText := ExtractFileName(pData.WinInfo.sPPath);
|
||
3 : CellText := BooleanToStr(pData.WinInfo.bActive, 'O', 'X');
|
||
4 : CellText := pData.WinInfo.sTitle;
|
||
5 : CellText := IntToStr(pData.wFndWordPerc) + '%';
|
||
6 : CellText := IntToStr(pData.wHitPerc) + '%';
|
||
7 : CellText := IntToStr(pData.nHitWordCnt);
|
||
8 : CellText := IntToStr(pData.nHitCnt);
|
||
9 : CellText := IntToStr(pData.nTotalWordCnt);
|
||
10 : CellText := pData.sHitReuslts;
|
||
end;
|
||
end;
|
||
|
||
end.
|