📄 extract1.pas
字号:
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 + -