⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xqsearch.pas

📁 象棋演播室1.6的dephi源码 作者 董世伟
💻 PAS
📖 第 1 页 / 共 3 页
字号:
      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 + -