uses Printers;function DataSetToText(mDataSet: TDataSet): string; var vBook: string; I: Integer; S: string; begin Result := ''; vBook := mDataSet.Book; mDataSet.First; while not mDataSet.Eof do begin S := ''; for I := 0 to mDataSet.FieldList.Count - 1 do S := S + #9 + mDataSet.FieldList[I].DisplayText; Delete(S, 1, 1); Result := Result + S + #13#10; mDataSet.Next; end; mDataSet.Book := vBook; end; { DataSetToText }function FieldNames(mDataSet: TDataSet; mDelimiter: string = ';'): string; begin Result := StringReplace(Trim(mDataSet.FieldList.Text), #13#10, mDelimiter, [rfReplaceAll]); end; { FieldNames }procedure TextToCanvas(mText: string; mCanvas: TCanvas; mMove: TPoint); { 将多行文本输出到画布上 } var I: Integer; vTextHeight: Integer; vStringList: TStringList; begin vStringList := TStringList.Create; vStringList.Text := mText; with vStringList, mCanvas do begin vTextHeight := TextHeight('|'); for I := 0 to Pred(vStringList.Count) do TextOut(mMove.X, mMove.Y + vTextHeight * I, vStringList[I]); end; vStringList.Free; end; { TextToCanvas }procedure TForm1.Button1Click(Sender: TObject); begin Printer.BeginDoc; TextToCanvas(FieldNames(DBGrid1.DataSource.DataSet, #9) + #13#10 + DataSetToText(DBGrid1.DataSource.DataSet), Printer.Canvas, Point(10, 10)); Printer.EndDoc; end;
http://www.csdn.net/expert/topic/433/433591.shtm
我在整理一个Excel的给你
带打印控件,符合你的要求
Excel2000;function DataSetToText(mDataSet: TDataSet): string;
var
vBook: string;
I: Integer;
S: string;
begin
Result := '';
vBook := mDataSet.Book;
mDataSet.First;
while not mDataSet.Eof do begin
S := '';
for I := 0 to mDataSet.FieldList.Count - 1 do
S := S + #9 + mDataSet.FieldList[I].DisplayText;
Delete(S, 1, 1);
Result := Result + S + #13#10;
mDataSet.Next;
end;
mDataSet.Book := vBook;
end; { DataSetToText }function FieldNames(mDataSet: TDataSet; mDelimiter: string = ';'): string;
begin
Result := StringReplace(Trim(mDataSet.FieldList.Text), #13#10, mDelimiter,
[rfReplaceAll]);
end; { FieldNames }procedure DataSetPrintToExcel(mDataSet: TDataSet; mFileName: TFileName;
mTitleText: string = ''; mHeadText: string = ''; mTrailText: string = '');
var
vTemplate: OleVariant;
vStringList: TStringList;
begin
vStringList := TStringList.Create;
with TExcelApplication.Create(nil) do try
vStringList.Text := FieldNames(mDataSet, #9) + #13#10 + DataSetToText(mDataSet);
if mTitleText <> '' then
vStringList.Text := mTitleText + #13#10 + vStringList.Text;
if mHeadText <> '' then
vStringList.Text := mHeadText + #13#10 + vStringList.Text;
if mTrailText <> '' then
vStringList.Text := vStringList.Text + #13#10 + mTrailText;
vStringList.SaveToFile(mFileName);
Connect;
Visible[0] := True;
vTemplate := EmptyParam;
vTemplate := mFileName;
Workbooks.Add(vTemplate, 0);
Columns.EntireColumn.AutoFit;
Disconnect;
finally
Free;
vStringList.Free;
end;
end; { DataSetPrintToExcel }procedure TForm1.Button1Click(Sender: TObject);
begin
DataSetPrintToExcel(DBGrid1.DataSource.DataSet, 'C:\Temp\1.txt', 'Excel打印');
end;
我的E-mail是[email protected]
Printers;function DataSetToText(mDataSet: TDataSet): string;
var
vBook: string;
I: Integer;
S: string;
begin
Result := '';
vBook := mDataSet.Book;
mDataSet.First;
while not mDataSet.Eof do begin
S := '';
for I := 0 to mDataSet.FieldList.Count - 1 do
S := S + #9 + mDataSet.FieldList[I].DisplayText;
Delete(S, 1, 1);
Result := Result + S + #13#10;
mDataSet.Next;
end;
mDataSet.Book := vBook;
end; { DataSetToText }function FieldNames(mDataSet: TDataSet; mDelimiter: string = ';'): string;
begin
Result := StringReplace(Trim(mDataSet.FieldList.Text), #13#10, mDelimiter,
[rfReplaceAll]);
end; { FieldNames }procedure TextToCanvas(mText: string; mCanvas: TCanvas; mMove: TPoint);
{ 将多行文本输出到画布上 }
var
I: Integer;
vTextHeight: Integer;
vStringList: TStringList;
begin
vStringList := TStringList.Create;
vStringList.Text := mText;
with vStringList, mCanvas do begin
vTextHeight := TextHeight('|');
for I := 0 to Pred(vStringList.Count) do
TextOut(mMove.X, mMove.Y + vTextHeight * I, vStringList[I]);
end;
vStringList.Free;
end; { TextToCanvas }procedure TForm1.Button1Click(Sender: TObject);
begin
Printer.BeginDoc;
TextToCanvas(FieldNames(DBGrid1.DataSource.DataSet, #9) + #13#10 +
DataSetToText(DBGrid1.DataSource.DataSet), Printer.Canvas, Point(10, 10));
Printer.EndDoc;
end;
To:humer(humer) :行,在这先谢了[email protected],最好将重用方法也一同告诉我!
另外,我想附加问你一个问题:那就是根据你的第二个例子,好像只能打印DBgrid的正文,而标题却打不出来,请问该怎么打印?用s:=s + dbgrid1.columns[k].title.caption却不能把标题和下面的正文对齐,可有好办法??
不过,主要问题已经解决,分好就给了,请不要嫌少!
的,支持栏头栏尾字体设置,需要的话,请来信。[email protected].