📄 xqsearch.pas
字号:
AItem.Caption := ChangeFileExt(sr.Name, '');
AItem.SubItems.Add(ADir);
AItem.ImageIndex := 6;
end;
until (FindNext(sr) <> 0);
FindClose(sr);
end;
procedure TFrmXQSearch.GetFileListFromResult;
var
i: Integer;
begin
FFileList.Clear;
for i:=0 to lvwResult.Items.Count - 1 do
begin
FFileList.Add(lvwResult.Items[i].SubItems[0] + '\' +
lvwResult.Items[i].Caption + '.XQF');
end;
end;
procedure TFrmXQSearch.copyFileList(ADir: String;
OnlySelected, DeleteSource: Boolean);
var
i : Integer;
f1, f2: String;
ABool : Boolean;
begin
for i:=0 to lvwResult.Items.Count - 1 do
begin
if OnlySelected then
begin
if not lvwResult.Items[i].Selected then continue;
end;
f1 := lvwResult.Items[i].SubItems[0]+'\'+lvwResult.Items[i].Caption+'.XQF';
f2 := ADir+'\'+lvwResult.Items[i].Caption+'.XQF';
ABool := False;
if FileExists(f2) then
begin
case getReplaceAnswer(lvwResult.Items[i].Caption) of
IDYES:
ABool := False;
IDNO:
ABool := True;
else Exit;
end;
end;
if CopyFile(PChar(f1), PChar(f2), ABool) then
begin
if DeleteSource then
begin
DeleteFile(f1);
lvwResult.Items[i].SubItems[0] := ADir;
end;
end;
end;
end;
procedure TfrmXQSearch.btnStartSearchClick(Sender: TObject);
var
DirStr: String;
DirLen: Integer;
begin
if (pos('.', edtFileName.Text)>0) then
begin
Application.MessageBox(
'请注意,文件名中不能有扩展名,XQStudio会自动处理“.XQF”文件。',
'系统信息', MB_OK + MB_ICONWARNING);
Exit;
end;
FBrowseResultDir := '';
edtFileName.Text := Trim(edtFileName.Text);
cmbRedPlayer.Text := Trim(cmbRedPlayer.Text);
cmbBlkPlayer.Text := Trim(cmbBlkPlayer.Text);
FCurItem := nil;
FCurStep := -1;
FFileNum := 0;
FOpenFile := (cmbRedPlayer.Text <> '') or
(cmbBlkPlayer.Text <> '') or
(chkResultA.Checked or chkResultB.Checked or
chkResultC.Checked or chkResultD.Checked) or
chkSearchQzXY.Checked;
FOpenTree := chkSearchQzXY.Checked and (not chkOnlyInitPos.Checked);
FSearching := True;
try
Screen.Cursor := crHourglass;
btnStartSearch.Enabled := False;
btnNewSearch.Visible := False;
btnBrowse.Visible := False;
aniSearch.Visible := True;
aniSearch.Active := True;
lblResultCount.Caption := '正在查找...';
lblResultCount.Refresh;
lblFileCount.Caption := '0';
lblFileCount.Visible := True;
lblFileCount.Refresh;
if chkResultSearch.Checked then
begin
GetFileListFromResult;
{
FFileList.Clear;
for i:=0 to lvwResult.Items.Count - 1 do
begin
FFileList.Add(lvwResult.Items[i].SubItems[0] + '\' +
lvwResult.Items[i].Caption + '.XQF');
end;
}
end;
if not chkAppend.Checked then
begin
lvwResult.Items.Clear;
lvwResult.Refresh;
end;
if chkResultSearch.Checked then
begin
ReSearch;
end
else
begin
DirStr := Trim(edtDir.Text);
DirLen := Length(DirStr);
if DirLen < 1 then
begin
Exit;
end;
if (DirStr[DirLen] = '\') then SetLength(DirStr, DirLen-1);
AddFileNames(DirStr);
end;
finally
aniSearch.Active := False;
aniSearch.Visible := False;
btnStartSearch.Enabled := True;
btnNewSearch.Visible := True;
btnBrowse.Visible := True;
lblFileCount.Visible := False;
lblResultCount.Caption := IntToStr(lvwResult.Items.Count);
Screen.Cursor := crDefault;
Self.Caption := '查找浏览XQF文件 - ' + DirStr;
chkDisplayQizi.Checked := False;
FSearching := False;
end;
end;
procedure TfrmXQSearch.lvwResultDblClick(Sender: TObject);
var
AFileName: String;
begin
if (lvwResult.ItemFocused = nil) then Exit;
AFileName := lvwResult.ItemFocused.SubItems[0] + '\' +
lvwResult.ItemFocused.Caption + '.XQF';
frmMain.OpenXQF(AFileName);
end;
procedure TfrmXQSearch.btnNewSearchClick(Sender: TObject);
begin
Screen.Cursor := crHourglass;
FBrowseResultDir := '';
edtFileName.Text := '';
cmbRedPlayer.Text := '';
cmbBlkPlayer.Text := '';
chkResultA.Checked:= False;
chkResultB.Checked:= False;
chkResultC.Checked:= False;
chkResultD.Checked:= False;
chkSearchQzXY.Checked := False;
chkOnlyInitPos.Checked := False;
chkOnlyInitPos.Enabled := False;
chkSearchVar.Checked := False;
chkSearchVar.Enabled := False;
chkQzNumOnly.Checked := False;
chkQzNumOnly.Enabled := False;
chkIgnoreYz.Checked := False;
chkIgnoreYz.Enabled := False;
chkResultSearch.Checked:= False;
lvwResult.Items.Clear;
lblResultCount.Caption := IntToStr(lvwResult.Items.Count);
Screen.Cursor := crDefault;
end;
procedure TfrmXQSearch.lvwResultChange(Sender: TObject; Item: TListItem;
Change: TItemChange);
var
AStepNo : Integer;
begin
lblResultCount.Caption := IntToStr(lvwResult.Items.Count);
lblResultCount.Refresh;
if FSearching then Exit;
AStepNo := StrToIntDef(edtStepNo.Text, -1);
if ((FCurItem=lvwResult.ItemFocused) and (FCurStep=AStepNo)) then Exit;
OpenFocused;
end;
procedure TfrmXQSearch.lvwResultClick(Sender: TObject);
begin
OpenFocused;
end;
function TfrmXQSearch.OpenXQF(AName: String): Boolean;
var
AStepNum: Integer;
AStepNo : Integer;
APNode : dTXQPlayNode;
begin
Result := False;
FXqfEnd := False;
FXqTree.Free;
FXqTree := nil;
FXqTree := dTXQPlayNode.Create(0,'========= ',0,0,FXqfQzXY,
nil,nil,nil,nil);
if (FXqTree = nil) then Exit;
FXqFile.Free;
FXqFile := nil;
FXqFile := dTXQFILE.Create(AName, FXqTree);
if (FXqFile = nil) then
begin
FXqTree.Free;
Exit;
end;
AStepNo := 0;
case FXqFile.iLoadXQFile of // 读入XQF文件
0:
begin
AStepNum := StrToIntDef(edtStepNo.Text, 0);
if (AStepNum < 0) then AStepNum := 0;
if (AStepNum = 0) then
begin
QiziXY := FXqTree.QiziXY;
end
else
begin
APNode := FXqTree;
while (APNode.LChild <> nil) do
begin
Inc(AStepNo);
APNode := APNode.LChild;
if (AStepNo = AStepNum) then break;
end;
QiziXY := APNode.QiziXY;
if (APNode.LChild = nil) then FXqfEnd := True;
end;
// 显示棋子位置
//frmXQWizard.QiziXYtoImage(QiziXY, imgXQBoard);
dRefreshQiziXY(QiziXY);
dRefreshXqfInfo;
end;
end;
lblXqfEndHint.Visible := FXqfEnd;
updStepNo.Max := 999;
if FXqfEnd then
begin
lblXqfEndHint.Caption := Format('终局!(本盘共%d步)', [AStepNo]);
updStepNo.Max := AStepNo;
end;
FXqFile.Free; FXqFile := nil;
FXqTree.Free; FXqTree := nil;
Result := True;
end;
procedure TfrmXQSearch.edtStepNoChange(Sender: TObject);
var
AStepNo: Integer;
begin
AStepNo := StrToIntDef(edtStepNo.Text, 0);
if (AStepNo <> edtStepNo.Tag) then
begin
if (lvwResult.ItemFocused <> nil) then
begin
lvwResultClick(lvwResult);
end;
end;
edtStepNo.Tag := AStepNo;
if ((edtStepNo.Tag = 0) and (edtStepNo.Text <> '0')) then
begin
edtStepNo.Text := '0';
end;
end;
procedure TfrmXQSearch.FormResize(Sender: TObject);
begin
Self.Left := 0; Self.Top := 0;
end;
procedure TfrmXQSearch.dRefreshXqfInfo;
var
s: string;
iWhoPlay : Integer; // 谁先行
// 0-红先, 1-黑先
iResult : Integer; // 比赛结果
// 0-未知, 1-红胜
// 2-黑胜, 3-和棋
sTitle : String[63]; // 标题
sMatchName : String[63]; // 比赛名称
sMatchTime : String[15]; // 比赛时间
sMatchAddr : String[15]; // 比赛地点
sRedPlayer : String[15]; // 红方姓名
sBlkPlayer : String[15]; // 黑方姓名
sTimeRule : String[63]; // 用时规则
sRedTime : String[15]; // 红方用时
sBlkTime : String[15]; // 黑方用时
sRMKWriter : String[15]; // 棋谱评论员
sAuthor : STring[15]; // 文件的作者
begin
if ((FCurItem <> nil) and (FCurItem = lvwResult.ItemFocused)) then Exit;
FCurStep := StrToIntDef(edtStepNo.Text, -1);
FCurItem := lvwResult.ItemFocused;
chkDisplayQizi.Checked := False;
iWhoPlay := FXqFile.XQFHead.WhoPlay;
iResult := FXqFile.XQFHead.PlayResult;
sTitle := FXqFile.XQFHead.TitleA;
sMatchName := FXqFile.XQFHead.MatchName;
sMatchTime := FXqFile.XQFHead.MatchTime;
sMatchAddr := FXqFile.XQFHead.MatchAddr;
sRedPlayer := FXqFile.XQFHead.RedPlayer;
sBlkPlayer := FXqFile.XQFHead.BlkPlayer;
sTimeRule := FXqFile.XQFHead.TimeRule;
sRedTime := FXqFile.XQFHead.RedTime;
sBlkTime := FXqFile.XQFHead.BlkTime;
sRMKWriter := FXqFile.XQFHead.RMKWriter;
sAuthor := FXqFile.XQFHead.Author;
lblTitle.Caption := FXqFile.XQFHead.TitleA;
lblRedName.Visible := False;
lblBlkName.Visible := False;
case FXqFile.XQFHead.CodeA of
0: // 全局
begin
s:='';
if ((sRedPlayer<>'')and(sBlkPlayer<>'')) then
begin
s:={'(红方) '+}sRedPlayer;
case iResult of
0: begin s:=s+' 对 '; end;
1: s:=s+' (红先胜) ';
2: s:=s+' (红先负) ';
3: s:=s+' (红先和) ';
end;
s:=s+{'(黑方) '+}sBlkPlayer;
end;
lblPlayer.Caption :=s;
if (sRedPlayer<>'') then
begin
lblRedName.Visible := True;
lblRedName.Caption := sRedPlayer;
end;
if (sBlkPlayer<>'') then
begin
lblBlkName.Visible := True;
lblBlkName.Caption := sBlkPlayer;
end;
lblTimeAddr.Caption:=sMatchTime;
if (sMatchAddr<>'') then
lblTimeAddr.Caption:=lblTimeAddr.Caption+'弈于'+sMatchAddr;
end;
1: // 开局
begin
s:='';
lblPlayer.Caption :=s;
lblTimeAddr.Caption:=s;
end;
2: // 中局
begin
s:='';
if ((sRedPlayer<>'')and(sBlkPlayer<>'')) then
begin
s:={'(红方) '+}sRedPlayer;
case iResult of
0: begin s:=s+' 对 '; end;
1: s:=s+' (胜) ';
2: s:=s+' (负) ';
3: s:=s+' (和) ';
end;
s:=s+{'(黑方) '+}sBlkPlayer;
end;
lblPlayer.Caption :=s;
if (sRedPlayer<>'') then
begin
lblRedName.Visible := True;
lblRedName.Caption := sRedPlayer;
end;
if (sBlkPlayer<>'') then
begin
lblBlkName.Visible := True;
lblBlkName.Caption := sBlkPlayer;
end;
lblTimeAddr.Caption:=sMatchTime;
if (sMatchAddr<>'') then
lblTimeAddr.Caption:=lblTimeAddr.Caption+'弈于'+sMatchAddr;
end;
3: // 残局
begin
s:='(着法: ';
if (iWhoPlay=0) then s:=s+'红先' else s:=s+'黑先';
case iResult of
0: begin end;
1: if (iWhoPlay =0) then s:=s+'胜' else s:=s+'红胜';
2: if (iWhoPlay<>0) then s:=s+'胜' else s:=s+'黑胜';
3: s:=s+'和';
end;
s:=s+')';
lblPlayer.Caption := s;
lblTimeAddr.Caption := '';
end;
end;
if (lblTitle.Caption='') and
(lblPlayer.Caption='') and
(lblTimeAddr.Caption='') then
begin
lblPlayer.Caption := 'Welcome to use XQStudio';
end;
end;
procedure TfrmXQSearch.dRefreshQiziXY(AQzXY: dTXQZXY);
var
i,xy, x, y: Integer;
begin
// 全部的棋子不在盘上
for i:=1 to 32 do
begin
if (AQzXY[i] = $FF) then
begin
imgQizi[i].Left := pntQizi[i].X;
imgQizi[i].Top := pntQizi[i].Y;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -