Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi DBGrid ausdrucken (https://www.delphipraxis.net/120155-dbgrid-ausdrucken.html)

Thomas F 6. Sep 2008 09:24

Datenbank: MyBase • Version: ?? • Zugriff über: TClientdataset

DBGrid ausdrucken
 
Hallo,

ich möchte gerne meine DBGrid ausdrucken, das klappt mit diesem Code auch relativ gut.

Problem ist nur, dass rechts beim Ausdrucken ein kleines Stück von der DBGrid fehlt,

nämlich genau das Stück , das man nur sieht wenn man nach rechts scrollt.

Auf dem Ausdruckt ist praktisch nur der auf dem Bildschirm sichtbare Teil der DBGrid zu sehen

Delphi-Quellcode:
procedure TForm1.Drucken1Click(Sender: TObject);
var rect,rect1: TRect;
begin
   rect:=bounds(0,0,DBGrid1.clientwidth,DBgrid1.Clientheight);
   rect1:=bounds(10,10,Printer.PageHeight,Printer.PageWidth);


if printdialog1.Execute then
begin

printer.begindoc;
printer.canvas.CopyRect(rect1,dbgrid1.Canvas,rect);
printer.enddoc;

end;
end;
Weiss jemand was ich da ändern muss, um die ganze DBGrid auszudrucken?

DeddyH 6. Sep 2008 09:28

Re: DBGrid ausdrucken
 
Da wäre eine Reportingtool besser geeignet (FreeReport, QuickReport, Rave o.ä.).

Thomas F 6. Sep 2008 09:32

Re: DBGrid ausdrucken
 
Zitat:

Zitat von DeddyH
Da wäre eine Reportingtool besser geeignet (FreeReport, QuickkReport, Rave o.ä.).

Die hab ich aber doch nicht, hab ich hier schon geschrieben :(

http://www.delphipraxis.net/internal...t.php?t=141757

Funktioniert ja auch einigermassen, nur dass das rechte Stück,

das man nach dem Scrollen sieht, fehlt.

DeddyH 6. Sep 2008 09:36

Re: DBGrid ausdrucken
 
Mit Deiner Methode kannst Du nur das drucken, was Du auch zur Laufzeit siehst.

mkinzler 6. Sep 2008 09:37

Re: DBGrid ausdrucken
 
FreeReport ist genauso wie http://reportman.sourceforge.net/ frei verfügbar

Thomas F 6. Sep 2008 12:54

Re: DBGrid ausdrucken
 
Zitat:

Zitat von mkinzler
FreeReport ist genauso wie http://reportman.sourceforge.net/ frei verfügbar

Aber nur die Demo-Versionen ! :?

Man kann auch alle Felder einzeln auslesen und dann aufs Papier bringen,

ist zwar umständlich , aber es funktioniert. :cry:

Delphi-Quellcode:

procedure TForm1.Drucken1Click(Sender: TObject);

begin
if printdialog1.Execute then
begin

printer.begindoc;
Printer.Canvas.Font.Height:=80;
Printer.Canvas.TextOut(300,300,Clientdataset1.FieldValues['Feld1']);
Printer.Canvas.TextOut(1000,300,Clientdataset1.FieldValues['Feld2']);
.
.
.
printer.enddoc;
end;

mkinzler 6. Sep 2008 12:56

Re: DBGrid ausdrucken
 
FreeReport ist eine freie (kostenlose) Version des FastReports und Report Manager ist sogar OS!

Thomas F 6. Sep 2008 13:02

Re: DBGrid ausdrucken
 
Zitat:

Zitat von mkinzler
FreeReport ist eine freie (kostenlose) Version des FastReports und Report Manager ist sogar OS!

ich hab mir den Report Manager gerade runtergeladen,
ich versteh aber noch nicht, wie das funktioniert.

Erstmal testen 8)

Thomas F 6. Sep 2008 13:44

Re: DBGrid ausdrucken
 
Funktioniert leider nicht

Mit Turbo Delphi kann man keine Komponenten einbinden ,

nur mit der kostenpflichtigen Version.

hier stehts http://www.delphi-treff.de/backstage.../turbo-delphi/

mkinzler 6. Sep 2008 13:50

Re: DBGrid ausdrucken
 
Aber man kann diese manuell erstellen.

Thomas F 6. Sep 2008 13:53

Re: DBGrid ausdrucken
 
Zitat:

Zitat von mkinzler
Aber man kann diese manuell erstellen.

Den Code in die Unit kopieren , oder dem Projekt hinzufügen ?

mkinzler 6. Sep 2008 14:03

Re: DBGrid ausdrucken
 
Die Units einbinden und dann mit
Delphi-Quellcode:
<Kompo> := <TKompo>.Create( <Parameter>);
<Kompo>.<Eingenschaft1> := <Wert1>;
...
erstellen

Thomas F 6. Sep 2008 14:29

Re: DBGrid ausdrucken
 
Zitat:

Zitat von mkinzler
Die Units einbinden und dann mit
Delphi-Quellcode:
<Kompo> := <TKompo>.Create( <Parameter>);
<Kompo>.<Eingenschaft1> := <Wert1>;
...
erstellen

Ist für mich zu schwierig, Report Manager hat über 100 Units ! :shock:

Ich weiss nicht welche Unit.

mkinzler 6. Sep 2008 14:42

Re: DBGrid ausdrucken
 
Der eigentliche Designer ist ja ein eigenes Programm. Du musst zur Laufzeit nur die Report-Komponente (TVCLReport) instantiiren und die Eigenschaften setzen

Thomas F 6. Sep 2008 18:50

Re: DBGrid ausdrucken
 
Zitat:

Zitat von mkinzler
Der eigentliche Designer ist ja ein eigenes Programm. Du musst zur Laufzeit nur die Report-Komponente (TVCLReport) instantiiren und die Eigenschaften setzen


Weiss nicht, wie das geht :shock: :shock:

Ich druck die Zeilen so wie oben beschrieben aus. :shock:

Muß mir mal ne Professional Version zulegen, damit kann man mehr machen

DeddyH 6. Sep 2008 18:56

Re: DBGrid ausdrucken
 
Ich will Dir nicht auf den Schlips treten, aber nur deshalb ne Pro zu kaufen, weil man die dynamische Erstellung von Kompos nicht hinbekommt... ob Du damit so glücklich wirst, möchte ich bezweifeln.

mkinzler 6. Sep 2008 19:04

Re: DBGrid ausdrucken
 
http://reportman.sourceforge.net/doc/index.html

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, rpcompobase, rpvclreport, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    VCLReport1: TVCLReport;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
    VCLReport1.Execute;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
    VCLReport1 := TVCLReport.Create( TForm1);
    VCLReport1.Filename := '<Pfad zur Report-Datei';
    VCLReport1.Preview := True;
end;

end.

Thomas F 6. Sep 2008 19:11

Re: DBGrid ausdrucken
 
Ja, Danke für die Hilfe

Ich werd das morgen mal ausprobieren

Ich schau jetzt Fußball-Länderspiel

Thomas F 7. Sep 2008 14:42

Re: DBGrid ausdrucken
 
Zitat:

Zitat von DeddyH
Ich will Dir nicht auf den Schlips treten, aber nur deshalb ne Pro zu kaufen, weil man die dynamische Erstellung von Kompos nicht hinbekommt... ob Du damit so glücklich wirst, möchte ich bezweifeln.

Ich bin eben noch ein Anfänger, du hast auch mal angefangen.

Ich hab das mit Report Manager probiert, aber wenn man den Code so eingibt , dann erhält man die Meldung, das diese und jene Datei nicht gefunden wurde.

mkinzler 7. Sep 2008 14:49

Re: DBGrid ausdrucken
 
Du musst natürlich den Pfad der Quelldatzeien in den Suchpfad der IDE eintragen

Thomas F 7. Sep 2008 15:02

Re: DBGrid ausdrucken
 
Hab ich doch, dann erhält man die Meldung :

unit rpmdprotocol;

Undefinierter Bezeichner:'WriteStream'

Delphi-Quellcode:

AConnection.WriteStream(memstream,true,true);

mkinzler 7. Sep 2008 15:04

Re: DBGrid ausdrucken
 
Die Version für deine Delphiversion (D10)?

Thomas F 7. Sep 2008 16:36

Re: DBGrid ausdrucken
 
Zitat:

Zitat von mkinzler
Die Version für deine Delphiversion (D10)?

reportman2_7e
Ist egal, ich hab meine Druckvorschau jetzt fast fertig.
Nur noch ein paar Kleinigkeiten
Ich weiß nur nicht, warum der Testdruck so unscharf und undeutlich ist,aber im Prinzip funktionierts.
Delphi-Quellcode:
.
.
.
type
  TForm5 = class(TForm)
    Panel1: TPanel;
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    BitBtn3: TBitBtn;
    Druckvorschau: TImage;
    BitBtn4: TBitBtn;
    procedure FormShow(Sender: TObject);
    procedure Vorschau_Texteingabe ;
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn4Click(Sender: TObject);
.
.
.
procedure TForm5.BitBtn1Click(Sender: TObject);
Var rect:TRect;
begin
Printer.BeginDoc;
with printer.Canvas do begin
rect:=Bounds(0,0,printer.PageWidth,printer.PageHeight);
stretchdraw(Rect,DruckVorschau.Picture.Bitmap);
 end;
printer.enddoc ;

end;

procedure TForm5.FormShow(Sender: TObject);

begin
 Panel1.Width:=Form5.Width;

Druckvorschau.ClientHeight:=594;
Druckvorschau.ClientWidth:=420;
Druckvorschau.Left:=(screen.WorkAreaWidth div 2) -210;
Druckvorschau.Top := 80;
Druckvorschau.Canvas.Font.Size:=6;
Druckvorschau.Canvas.TextOut(20,30,'Testdruck');
Vorschau_Texteingabe ;
end;
procedure TForm5.Vorschau_Texteingabe  ;
begin

Druckvorschau.Canvas.TextOut(20,50,(Form1.Clientdataset1Feld1.asstring));
.
.

end;

Thomas F 7. Sep 2008 20:21

Re: DBGrid ausdrucken
 
Ich hab das etwas abgeändert, trotzdem bleibt die Textausgabe unscharf,

wenn man von TImage.canvas direkt auf Printer.Canvas ausdruckt :coder2:

Delphi-Quellcode:
procedure TForm5.BitBtn1Click(Sender: TObject);
Var rect,rect1:TRect;
begin
rect1:=Bounds(0,0,Druckvorschau.width,Druckvorschau.height);
Rect:=Bounds(0,0,Printer.PageWidth,printer.PageHeight);
Printer.BeginDoc;
with printer.Canvas do begin
printer.Canvas.CopyRect(Rect,DruckVorschau.Canvas,Rect1);
 end;
printer.enddoc ;

end;
Wahrscheinlich muss man das irgendwie anders machen :gruebel:
Vielleicht weiss das einer von euch ? :roll:

Thomas F 8. Sep 2008 14:19

Re: DBGrid ausdrucken
 
Jetzt funktioniert es :-D

Nur wenn man mit dem Zoom die Druckvorschau verkleinert,

ist die Schrift etwas unleserlich, aber das ist ,glaub ich, ganz normal.

Thomas F 11. Sep 2008 14:19

Re: DBGrid ausdrucken
 
Hallo,

ich nochmal ein kleines Problem

Wie kann ich von der Datenbank nur die Felder anzeigen lassen die im Feld1 den Wert "XY" haben ?
Delphi-Quellcode:
Clientdataset1.Fieldbyname('Feld1').asString := 'XY';

christian_u 11. Sep 2008 14:29

Re: DBGrid ausdrucken
 
Eh du diese workaround spielchen mit den Turbo Delphis treibst kannst du auch gleich Lazarus nehmen da kannst du alles visuell benutzen und Freereport heisst dort lazreport ist sogar etwas stabiler und weiter entwickelt und auch noch plattformübergreifend benutzbar.

Thomas F 11. Sep 2008 14:40

Re: DBGrid ausdrucken
 
Zitat:

Zitat von christian_u
Eh du diese workaround spielchen mit den Turbo Delphis treibst kannst du auch gleich Lazarus nehmen da kannst du alles visuell benutzen und Freereport heisst dort lazreport ist sogar etwas stabiler und weiter entwickelt und auch noch plattformübergreifend benutzbar.

Jetzt hab ich aber schon so weit gemacht, läßt sich nicht mehr ändern
Oder meinst du ich fang jetzt wieder vor vorne an ?
Muß nur noch wissen, wie man die Felder sortiert

Delphi-Quellcode:
Clientdataset1.Fieldbyname('Feld1').asString := 'XY';

Thomas F 11. Sep 2008 15:11

Re: DBGrid ausdrucken
 
Ich habs schon gefunden, hier stehts ja

http://www.delphipraxis.net/internal...=clientdataset


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:50 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz