Einzelnen Beitrag anzeigen

Benutzerbild von BrunoT
BrunoT

Registriert seit: 23. Jan 2003
Ort: Sandbeiendorf
360 Beiträge
 
Delphi 8 Professional
 
#4

Re: TDBGrid auch ohne Report aus drucken?

  Alt 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.
Holger

EDV- Ende der Vernunft
Meine Calcedit-Kompo
  Mit Zitat antworten Zitat