Registriert seit: 23. Jan 2003
Ort: Sandbeiendorf
360 Beiträge
Delphi 8 Professional
|
Re: TDBGrid auch ohne Report aus drucken?
29. Jun 2005, 10:03
Hi Heike,
Wier ein Beispiel wie marabu schon gesagt hat, primitiv aber geht:
Delphi-Quellcode:
unit UDruck;
interface
procedure printText( name: string);
implementation
uses Printers, Dialogs, Sysutils, Graphics, Windows, Unit1;
Var
Breite,Hoehe: Word;
y: Integer=0;
s: String;
j:Integer;
Const
oRand=10;
uRand=10;
lRand=15;
dz=4;
Procedure printTitle( name: string);
Var
m:Word;
begin
with Printer.Canvas do
begin
Font.Height:=3*10;
Font.Style:=[fsbold];
m:=(breite*10-Textwidth( name)) div 2;
TextOut(m,y*10, name);
Font.Height:=3*10;
Font.Style:=[];
end;
Dec(y,10);
end;
procedure ausgabeZeile( s: string);
Begin
SetTextAlign(Printer.Handle,TA_LEFT+TA_TOP);
Printer.Canvas.TextOut(lRand*10,y*10,s);
Dec(y,dz);
end;
procedure PrintText( name: string);
Var
i:Word;
procedure SeitenNr;
Begin
y:= -(hoehe-15);
SetTextAlign(Printer.Handle,TA_RIGHT+TA_TOP);
Printer.Canvas.TextOut(lRand*10+(Breite-55)*10,
y*10,' Seite '+IntToStr(Printer.PageNumber));
end;
begin
with Printer do
begin
Orientation:=poPortrait;
BeginDoc;
SetMapMode( Handle,MM_LOMETRIC);
breite:=GetDeviceCaps( Handle,HorzSize);
hoehe:=GetDeviceCaps( Handle,VertSize);
y:= -oRand;
printTitle( name);
if DBGrid1.SelectedRows.Count>0 then
with DBGrid1.DataSource.DataSet do
for i:=0 to DBGrid1.SelectedRows.Count-1 do
Begin
for j := 0 to FieldCount-1 do
begin
if (j>0) then s:=s+' , ';
s:=s+Fields[j].AsString;
end;
ausgabeZeile(s);
If y< -(hoehe-uRand) then
Begin
// break;
SeitenNr;
NewPage;
y:= -oRand;
SetMapMode( Handle,MM_LOMETRIC);
printTitle( name);
end;
end;
SeitenNr;
EndDoc;
end;
end;
end.
und nun noch einen Button:
Delphi-Quellcode:
uses udruck;
...
procedure TForm1.Button1Click(Sender: TObject);
begin
if Printdialog1.Execute then
begin
printText('Ausdruck DBGRID');
end;
end;
es wird der markierte Teil des DBGrid gedruckt.
|
|
Zitat
|