printselectunit.pas
来自「公交行业的管理系统」· PAS 代码 · 共 260 行
PAS
260 行
unit PrintSelectUnit;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Forms, Dialogs, Controls, StdCtrls,
Buttons,ComObj, DB, ADODB, ComCtrls;
type
TPrintFieldSelectDlg = class(TForm)
SrcList: TListBox;
DstList: TListBox;
SrcLabel: TLabel;
DstLabel: TLabel;
IncludeBtn: TSpeedButton;
IncAllBtn: TSpeedButton;
ExcludeBtn: TSpeedButton;
ExAllBtn: TSpeedButton;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
GroupBox1: TGroupBox;
Label1: TLabel;
Edit1: TEdit;
Label2: TLabel;
Edit2: TEdit;
Label3: TLabel;
DateTimePicker1: TDateTimePicker;
Label4: TLabel;
procedure IncludeBtnClick(Sender: TObject);
procedure ExcludeBtnClick(Sender: TObject);
procedure IncAllBtnClick(Sender: TObject);
procedure ExcAllBtnClick(Sender: TObject);
private
ExcelApp,ExcelWorkSheet:variant;
public
{ Public declarations }
procedure MoveSelected(List: TCustomListBox; Items: TStrings);
procedure SetItem(List: TListBox; Index: Integer);
function GetFirstSelection(List: TCustomListBox): Integer;
procedure SetButtons;
procedure InitPrnSrc(curQuery:TADOQuery);
procedure PrnSrc(curQuery:TADOQuery;XLSName:string);
procedure ToExcel(curQuery:TADOQuery;XLSName:string);
end;
var
PrintFieldSelectDlg: TPrintFieldSelectDlg;
implementation
{$R *.dfm}
procedure TPrintFieldSelectDlg.ToExcel(curQuery:TADOQuery;XLSName:string);
var
i,j:integer;
ExcelApp,ExcelWorkSheet:variant;
Range:variant;
begin
ExcelApp:=CreateOleObject('excel.application');
ExcelApp.Workbooks.Open(ExtractFilePath(Application.ExeName)+XLSName);
ExcelWorkSheet:=ExcelApp.workbooks[1].worksheets[1];
ExcelWorkSheet.activate;
ExcelApp.Visible:=false;
for i:=0 to PrintFieldSelectDlg.DstList.Count-1 do
begin
ExcelWorkSheet.cells(1,i+1):=DstList.Items[i];
ExcelWorkSheet.Columns[i+1].Font.Size := 12;
ExcelWorkSheet.Columns[i+1].HorizontalAlignment := 4;
ExcelWorkSheet.Columns[i+1].AutoFit;
Range:=ExcelWorkSheet.Cells[1,i+1];
Range.Borders[1].LineStyle := 7;
Range.Borders[2].LineStyle := 7;
Range.Borders[3].LineStyle := 7;
Range.Borders[4].LineStyle := 7;
Range.Characters.Font.Bold := True;
end;
curQuery.First;
j:=2;
while not curQuery.Eof do
begin
for i:=0 to DstList.Count-1 do
begin
ExcelWorkSheet.cells(j,i+1):=curQuery.FieldByName(PrintFieldSelectDlg.DstList.Items[i]).AsString;
Range:=ExcelWorkSheet.Cells[j,i+1];
Range.Borders[1].LineStyle := 7;
Range.Borders[2].LineStyle := 7;
Range.Borders[3].LineStyle := 7;
Range.Borders[4].LineStyle := 7;
end;
j:=j+1;
curQuery.Next;
end;
for i:=0 to PrintFieldSelectDlg.DstList.Count-1 do
ExcelWorkSheet.Columns[i+1].AutoFit;
ExcelApp.Visible:=true;
ExcelWorkSheet.PageSetup.LeftFooter :='统计负责人:'+Edit1.Text;
ExcelWorkSheet.PageSetup.CenterFooter :='统计人员:'+Edit2.Text ;
ExcelWorkSheet.PageSetup.RightFooter :='填表日期:'+DateToStr(DateTimePicker1.Date);
ExcelApp.activeworkbook.saved:=true;
end;
procedure TPrintFieldSelectDlg.PrnSrc(curQuery:TADOQuery;XLSName:string);
var
i,j:integer;
ExcelApp,ExcelWorkSheet:variant;
Range:variant;
begin
ExcelApp:=CreateOleObject('excel.application');
ExcelApp.Workbooks.Open(ExtractFilePath(Application.ExeName)+XLSName);
ExcelWorkSheet:=ExcelApp.workbooks[1].worksheets[1];
ExcelWorkSheet.activate;
ExcelApp.Visible:=false;
for i:=0 to PrintFieldSelectDlg.DstList.Count-1 do
begin
ExcelWorkSheet.cells(1,i+1):=DstList.Items[i];
ExcelWorkSheet.Columns[i+1].Font.Size := 12;
ExcelWorkSheet.Columns[i+1].HorizontalAlignment := 4;
ExcelWorkSheet.Columns[i+1].AutoFit;
Range:=ExcelWorkSheet.Cells[1,i+1];
Range.Borders[1].LineStyle := 7;
Range.Borders[2].LineStyle := 7;
Range.Borders[3].LineStyle := 7;
Range.Borders[4].LineStyle := 7;
Range.Characters.Font.Bold := True;
end;
curQuery.First;
j:=2;
while not curQuery.Eof do
begin
for i:=0 to DstList.Count-1 do
begin
ExcelWorkSheet.cells(j,i+1):=curQuery.FieldByName(PrintFieldSelectDlg.DstList.Items[i]).AsString;
Range:=ExcelWorkSheet.Cells[j,i+1];
Range.Borders[1].LineStyle := 7;
Range.Borders[2].LineStyle := 7;
Range.Borders[3].LineStyle := 7;
Range.Borders[4].LineStyle := 7;
end;
j:=j+1;
curQuery.Next;
end;
for i:=0 to PrintFieldSelectDlg.DstList.Count-1 do
ExcelWorkSheet.Columns[i+1].AutoFit;
ExcelApp.Visible:=true;
ExcelWorkSheet.PageSetup.LeftFooter :='统计负责人:'+Edit1.Text;
ExcelWorkSheet.PageSetup.CenterFooter :='统计人员:'+Edit2.Text ;
ExcelWorkSheet.PageSetup.RightFooter :='填表日期:'+DateToStr(DateTimePicker1.Date);
ExcelApp.ActiveSheet.PrintPreview;
ExcelApp.activeworkbook.saved:=true;
ExcelApp.quit;
end;
procedure TPrintFieldSelectDlg.InitPrnSrc(curQuery:TADOQuery);
var
i:integer;
begin
PrintFieldSelectDlg.SrcList.Clear;
PrintFieldSelectDlg.DstList.Clear;
for i:=0 to curQuery.FieldCount-1 do
begin
SrcList.Items.Add(curQuery.Fields[i].FieldName);
end;
end;
procedure TPrintFieldSelectDlg.IncludeBtnClick(Sender: TObject);
var
Index: Integer;
begin
Index := GetFirstSelection(SrcList);
MoveSelected(SrcList, DstList.Items);
SetItem(SrcList, Index);
end;
procedure TPrintFieldSelectDlg.ExcludeBtnClick(Sender: TObject);
var
Index: Integer;
begin
Index := GetFirstSelection(DstList);
MoveSelected(DstList, SrcList.Items);
SetItem(DstList, Index);
end;
procedure TPrintFieldSelectDlg.IncAllBtnClick(Sender: TObject);
var
I: Integer;
begin
for I := 0 to SrcList.Items.Count - 1 do
DstList.Items.AddObject(SrcList.Items[I],
SrcList.Items.Objects[I]);
SrcList.Items.Clear;
SetItem(SrcList, 0);
end;
procedure TPrintFieldSelectDlg.ExcAllBtnClick(Sender: TObject);
var
I: Integer;
begin
for I := 0 to DstList.Items.Count - 1 do
SrcList.Items.AddObject(DstList.Items[I], DstList.Items.Objects[I]);
DstList.Items.Clear;
SetItem(DstList, 0);
end;
procedure TPrintFieldSelectDlg.MoveSelected(List: TCustomListBox; Items: TStrings);
var
I: Integer;
tempItems: TStringList;
begin
tempItems:=TStringList.Create;
for I := List.Items.Count - 1 downto 0 do
if List.Selected[I] then
begin
tempItems.AddObject(List.Items[I], List.Items.Objects[I]);
List.Items.Delete(I);
end;
for I := tempItems.Count - 1 downto 0 do
begin
Items.AddObject(tempItems.Strings[I], tempItems.Objects[I]);
end;
tempItems.Free;
end;
procedure TPrintFieldSelectDlg.SetButtons;
var
SrcEmpty, DstEmpty: Boolean;
begin
SrcEmpty := SrcList.Items.Count = 0;
DstEmpty := DstList.Items.Count = 0;
IncludeBtn.Enabled := not SrcEmpty;
IncAllBtn.Enabled := not SrcEmpty;
ExcludeBtn.Enabled := not DstEmpty;
ExAllBtn.Enabled := not DstEmpty;
end;
function TPrintFieldSelectDlg.GetFirstSelection(List: TCustomListBox): Integer;
begin
for Result := 0 to List.Items.Count - 1 do
if List.Selected[Result] then Exit;
Result := LB_ERR;
end;
procedure TPrintFieldSelectDlg.SetItem(List: TListBox; Index: Integer);
var
MaxIndex: Integer;
begin
with List do
begin
SetFocus;
MaxIndex := List.Items.Count - 1;
if Index = LB_ERR then Index := 0
else if Index > MaxIndex then Index := MaxIndex;
Selected[Index] := True;
end;
SetButtons;
end;
end.
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?