![]() |
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:
Weiss jemand was ich da ändern muss, um die ganze DBGrid auszudrucken?
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; |
Re: DBGrid ausdrucken
Da wäre eine Reportingtool besser geeignet (FreeReport, QuickReport, Rave o.ä.).
|
Re: DBGrid ausdrucken
Zitat:
![]() Funktioniert ja auch einigermassen, nur dass das rechte Stück, das man nach dem Scrollen sieht, fehlt. |
Re: DBGrid ausdrucken
Mit Deiner Methode kannst Du nur das drucken, was Du auch zur Laufzeit siehst.
|
Re: DBGrid ausdrucken
FreeReport ist genauso wie
![]() |
Re: DBGrid ausdrucken
Zitat:
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; |
Re: DBGrid ausdrucken
FreeReport ist eine freie (kostenlose) Version des FastReports und Report Manager ist sogar OS!
|
Re: DBGrid ausdrucken
Zitat:
ich versteh aber noch nicht, wie das funktioniert. Erstmal testen 8) |
Re: DBGrid ausdrucken
Funktioniert leider nicht
Mit Turbo Delphi kann man keine Komponenten einbinden , nur mit der kostenpflichtigen Version. hier stehts ![]() |
Re: DBGrid ausdrucken
Aber man kann diese manuell erstellen.
|
Re: DBGrid ausdrucken
Zitat:
|
Re: DBGrid ausdrucken
Die Units einbinden und dann mit
Delphi-Quellcode:
erstellen
<Kompo> := <TKompo>.Create( <Parameter>);
<Kompo>.<Eingenschaft1> := <Wert1>; ... |
Re: DBGrid ausdrucken
Zitat:
Ich weiss nicht welche Unit. |
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
|
Re: DBGrid ausdrucken
Zitat:
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 |
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.
|
Re: DBGrid ausdrucken
![]()
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. |
Re: DBGrid ausdrucken
Ja, Danke für die Hilfe
Ich werd das morgen mal ausprobieren Ich schau jetzt Fußball-Länderspiel |
Re: DBGrid ausdrucken
Zitat:
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. |
Re: DBGrid ausdrucken
Du musst natürlich den Pfad der Quelldatzeien in den Suchpfad der IDE eintragen
|
Re: DBGrid ausdrucken
Hab ich doch, dann erhält man die Meldung :
unit rpmdprotocol; Undefinierter Bezeichner:'WriteStream'
Delphi-Quellcode:
AConnection.WriteStream(memstream,true,true); |
Re: DBGrid ausdrucken
Die Version für deine Delphiversion (D10)?
|
Re: DBGrid ausdrucken
Zitat:
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; |
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:
Wahrscheinlich muss man das irgendwie anders machen :gruebel:
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; Vielleicht weiss das einer von euch ? :roll: |
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. |
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';
|
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.
|
Re: DBGrid ausdrucken
Zitat:
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';
|
Re: DBGrid ausdrucken
|
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