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

📄 extract1.pas

📁 专家抽取系统1.0 是用Delphi6.0 开发的一款用于招投标,评审过程中从专家库中抽取专家的软件。可以将抽取结果导入到Excel或Word文档中
💻 PAS
📖 第 1 页 / 共 2 页
字号:

procedure TfrmExtract1.SaveBoolean;
begin
  DBGrid3.SelectedField.DataSet.Edit;
  if adoquery2.FieldValues['选中'] = false then
    adoquery2.FieldValues['选中'] := true
  else
    adoquery2.FieldValues['选中'] := false;
//  DBGrid3.SelectedField.AsBoolean :=not DBGrid3.SelectedField.AsBoolean;
  DBGrid3.SelectedField.DataSet.Post;
end;

procedure TfrmExtract1.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  Action := caFree;
end;

procedure TfrmExtract1.Button4Click(Sender: TObject);
begin
  ADOQuery2.First;

end;


procedure TfrmExtract1.DBGrid3DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
{  利用WIN32 API函数:DrawFrameControl(),此函数可以直接画出Checkbox组件,
 所以就无须在表单中实际添加组件。
  设定一个整型数组常数,返回的整数值是与布尔值相一致的,如果字段是逻辑字段,
则只将其布尔值放入数组中,提供给DrawFrameControl()函数中的状态参数进行调用,
从而实现了Checkbox组件在网格中的嵌入效果。
}
const
  //这个整数值将按照布尔值返回,并送入数组
  CtrlState : array[Boolean] of Integer = (DFCS_BUTTONCHECK,DFCS_BUTTONCHECK or DFCS_CHECKED);
  //CtrlState : array[Boolean] of Integer = (DFCS_BUTTONCHECK,DFCS_CHECKED );
begin

  //确保只有在逻辑字段才能插入组件
  if column.Field.DataType = ftBoolean then
  begin
    DBGrid3.Canvas.FillRect(Rect);
    DrawFrameControl(DBGrid3.Canvas.Handle,Rect,DFC_BUTTON,CtrlState[Column.Field.AsBoolean]);
  end;

end;

procedure TfrmExtract1.DBGrid3ColEnter(Sender: TObject);
//当逻辑字段所在栏得到焦点时,要关闭TDBGrid.Options中dgEditing的可编辑模式。
begin

  //确保该栏是逻辑字段
  if DBGrid3.SelectedField.DataType = ftBoolean then
  begin
    //OriginalOptions :=DBGrid3.Options; //设定变量来存储原始的 TDBGrid.Options的所有属性值
    //DBGrid3.Options :=DBGrid3.Options -[dgEditing];
    DBGrid3.Options :=[dgTitles,dgIndicator,dgColumnResize,dgColLines,dgRowLines,dgTabs,dgConfirmDelete,dgCancelOnExit]
  end;
end;

procedure TfrmExtract1.DBGrid3ColExit(Sender: TObject);
//当逻辑字段所在栏失去焦点时,要打开TDBGrid.Options中dgEditing的可编辑模式。
begin
  //确保该栏是逻辑字段
  if DBGrid3.SelectedField.DataType = ftBoolean then
    //DBGrid3.Options := OriginalOptions;
    DBGrid3.Options :=[dgEditing,dgTitles,dgIndicator,dgColumnResize,dgColLines,dgRowLines,dgTabs,dgConfirmDelete,dgCancelOnExit]
    
end;

procedure TfrmExtract1.DBGrid3CellClick(Column: TColumn);
//通过鼠标点击或敲打空格键改变布尔值
begin
  //确保该栏是逻辑字段
  if DBGrid3.SelectedField.DataType = ftBoolean then
    SaveBoolean();

end;

procedure TfrmExtract1.DBGrid3KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
//通过鼠标点击或敲打空格键改变布尔值
begin
  //确保该栏是逻辑字段和空格键在键盘中被敲击
  if (Key =VK_SPACE) and (DBGrid3.SelectedField.DataType = ftBoolean) then
    SaveBoolean();

end;

procedure TfrmExtract1.ADOTable1ExtractCountChange(Sender: TField);
//var  I :integer;
begin

  if VarIsnull(ADOTable1.FieldValues['抽选人数']) then
  begin
    ADOTable1.Cancel;
  end;
//  if not TryStrToInt(ADOTable1.FieldByName('抽选人数').Text,I) then
//  begin
//    ADOTable1.FieldByName('抽选人数').Text :=inttostr(I);
//    ADOTable1.Cancel;
//  end;

  if ADOTable1.FieldValues['抽选人数'] < 0 then
  begin
    ADOTable1.Cancel;
  end;

end;

procedure TfrmExtract1.DBGrid1ColEnter(Sender: TObject);
begin
  //确保该栏是逻辑字段
  if DBGrid1.SelectedField.FieldName = '抽选人数' then
  begin
    DBGrid1.Options :=[dgEditing,dgAlwaysShowEditor,dgTitles,dgIndicator,dgColumnResize,dgColLines,dgRowLines,dgTabs,dgConfirmDelete,dgCancelOnExit]
  end;
end;

procedure TfrmExtract1.DBGrid1ColExit(Sender: TObject);
begin
  //确保该栏是逻辑字段
  if DBGrid1.SelectedField.FieldName = '抽选人数' then
  begin
    DBGrid1.Options :=[dgEditing,dgTitles,dgIndicator,dgColumnResize,dgColLines,dgRowLines,dgTabs,dgConfirmDelete,dgCancelOnExit]
  end;
end;

procedure TfrmExtract1.DBGrid1Exit(Sender: TObject);
begin
  DBGrid1ColExit(Parent);
end;

procedure TfrmExtract1.btnExportClick(Sender: TObject);
{
var
  WordApp,WordDoc,WordTable :OleVariant;
  i,j:integer;
}
begin
{
  WordApp:=CreateOleObject('Word.Application');
  WordApp.Visible:=True;
  WordDoc:=WordApp.Documents.Add;
  //在新建文档中增加表格,指定表格的行数与列数
  WordTable:=WordDoc.Tables.Add(WordApp.Selection.Range, DBGrid2.DataSource.DataSet.RecordCount+1, DBGrid2.Columns.Count);
  //插入表格的标题行
  for i:=1 to DBGrid2.Columns.Count do
    WordTable.Cell(1,i).Range.InsertAfter(DBGrid2.Columns[i-1].Title.Caption);

  i:=2;
  DBGrid2.DataSource.DataSet.First;
  with DBGrid2.DataSource.DataSet do
  while not eof do
  begin
    for j:=1 to DBGrid2.Columns.Count do
    begin
      if varIsNull(DBGrid2.Columns[j-1].Field.Value) then
        WordTable.Cell(i,j).Range.InsertAfter('')
      else
        WordTable.Cell(i,j).Range.InsertAfter(DBGrid2.Columns[j-1].Field.Value);
    end;
    Next;
    i:=i+1;
  end;
  DBGrid2.DataSource.DataSet.First;
}
end;

procedure GoToWord(db_GRID: TDBGRID; q2: TADOQuery; f1: string); //从DBGRID导数据到Word
var
  i, j: integer;
  WordApp, WordDoc, WordParagraph, WordRange, WordTable: variant;
  SltRec, SltCol: integer;
begin
  if not (q2.Active) then //数据集没有打开就返回
  begin
    ShowMessage('导出的数据集没有打开!');
    Exit;
  end;

  try
    WordApp := CreateOleObject('word.Application');
    WordApp.Visible:=True;
    WordDoc := WordApp.documents.Add;
//    wordapp.application.visible:=true;
    WordParagraph := WordApp.activedocument.paragraphs.Add;
    WordRange := WordParagraph.range;
  except
    ShowMessage('请确认WORD安装正确!');
    WordDoc.close;
    WordApp.Quit;
    WordApp := Unassigned; //释放VARIANT变量
    Exit;
  end;

  try
    SltRec := q2.recordcount;
    SltCol := db_GRID.Columns.Count;
    //在新建文档中增加表格,指定表格的行数与列数
    WordTable := WordApp.activedocument.tables.Add(WordRange, SltRec + 1, SltCol);
    //插入表格的标题行
    i := 1;
    for j := 1 to db_GRID.Columns.Count do
    begin
      if db_GRID.Columns[j-1].Visible then
        WordTable.Cell(i, j).range.InsertAfter(db_GRID.Columns[j-1].Title.Caption);
    end;
    //插入表格的内容行
    i := 2;
    q2.First;
    while not q2.Eof do
    begin
      for j := 1 to db_GRID.Columns.Count do
      begin
        if db_GRID.Columns[j-1].Visible then
          WordTable.Cell(i, j).range.InsertAfter(q2.fieldbyname(db_GRID.Columns[j-1].FieldName).AsString);
      end;
      i := i + 1;
      q2.next;
    end;
    q2.First;
//    WordApp.activedocument.saveas(f1);
//    WordApp.activedocument.close;
  except
    ShowMessage('不能正确操作Word文件。可能是该文件已被其他程序打开,或系统错误。');
    WordDoc.close;
    WordApp.Quit;
    WordApp := Unassigned; //释放VARIANT变量
    Exit;
  end;
end;

procedure TfrmExtract1.btnCancelClick(Sender: TObject);
begin
if btnCancel.Caption ='选中全部专家' then
begin
  //选中全部专家
  ADOQuery2.First;
  while not ADOQuery2.Eof do
  begin
    ADOQuery2.Edit;
    ADOQuery2.FieldValues['选中'] :=true;
    ADOQuery2.Post;
    ADOQuery2.Next;
  end;
  ADOQuery2.First;
  btnCancel.Caption :='取消全部选中';
end
else
begin
  //取消全部选中
  ADOQuery2.First;
  while not ADOQuery2.Eof do
  begin
    ADOQuery2.Edit;
    ADOQuery2.FieldValues['选中'] :=false;
    ADOQuery2.Post;
    ADOQuery2.Next;
  end;
  ADOQuery2.First;
  btnCancel.Caption :='选中全部专家';
end;

end;

procedure TfrmExtract1.btnExtractClick(Sender: TObject);
begin
  frmExtractResult :=TfrmExtractResult.Create(Application);
  frmExtractResult.ShowModal;
end;

end.
















⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -