![]() |
mit pdf-Tool nur Teil einen Stringgrid drucken
Ich benutze ein externes pdf-Tool zum Ausdrucken von Labels.
Dabei kommt ein Teil der Infos aus einem Stringgrid, der andere Teil von Datenbank-Tabellen. Ich möchte nun nur die Labels ausdrucken, wo ich im Stringgrid in der 1. Spalte (nicht die fixe Spalte 0) etwas eingetragen habe. Der Stringgrid hat eine feste Zeile und eine feste Spalte. Hat jemand eine Idee? Hier ist der Code:
Delphi-Quellcode:
Delphi-Quellcode:
procedure Tlote.Button1Click(Sender: TObject); begin deletetmppdf; printpdf1.FileName:=gettemppathd+'tmppdf'+Inttostr(random(5000))+'.pdf'; printpdf1.PageWidth:=1224; printpdf1.PageHeight:=1725; printpdf1.BeginDoc; printpdf1.Font.Name:=poTimesBoldItalic; printpdf1.Font.Size:=24; //1.Etiquett printpdf1.TextOut(20,40,'Artigo: '+Artikel.text); printpdf1.TextOut(170,40,'Côr: '+farbe.text); printpdf1.TextOut(420,40,'Tam.: '+stringgrid1.cells[2, 1]); printpdf1.TextOut(20,90,'N.P.: '+order.text); pdfcodedrucken( 135,72,order.Text,false); printpdf1.TextOut(280,90,'N°./Lo: '+stringgrid1.cells[0, 1]); printpdf1.TextOut(420,90,'Peç/Lo: '+stringgrid1.cells[1, 1]); //2.Etiquett printpdf1.TextOut(620,40,'Artigo: '+Artikel.text); printpdf1.TextOut(800,40,'Côr: '+farbe.text); printpdf1.TextOut(1080,40,'Tam.: '+stringgrid1.cells[2, 2]); printpdf1.TextOut(620,90,'N.P.: '+order.text); pdfcodedrucken( 740,72,order.Text,false); printpdf1.TextOut(900,90,'N°./Lo: '+stringgrid1.cells[0, 2]); printpdf1.TextOut(1080,90,'Peç/Lo: '+stringgrid1.cells[1, 2]); printpdf1.LineWidth:=2; printpdf1.DrawLine(0,120,1224,120); //3.Etiquett printpdf1.TextOut(20,160,'Artigo: '+Artikel.text); printpdf1.TextOut(170,160,'Côr: '+farbe.text); printpdf1.TextOut(420,160,'Tam.: '+stringgrid1.cells[2, 3]); printpdf1.TextOut(20,215,'N.P.: '+order.text); pdfcodedrucken( 135,195,order.Text,false); printpdf1.TextOut(280,215,'N°./Lo: '+stringgrid1.cells[0, 3]); printpdf1.TextOut(420,215,'Peç/Lo: '+stringgrid1.cells[1, 3]); //4.Etiquett printpdf1.TextOut(620,160,'Artigo: '+Artikel.text); printpdf1.TextOut(800,160,'Côr: '+farbe.text); printpdf1.TextOut(1080,160,'Tam.: '+stringgrid1.cells[2, 4]); printpdf1.TextOut(620,215,'N.P.: '+order.text); pdfcodedrucken( 740,195,order.Text,false); printpdf1.TextOut(900,215,'N°./Lo: '+stringgrid1.cells[0, 4]); printpdf1.TextOut(1080,215,'Peç/Lo: '+stringgrid1.cells[1, 4]); printpdf1.LineWidth:=2; printpdf1.DrawLine(0,240,1224,240); //5.Etiquett printpdf1.TextOut(20,280,'Artigo: '+Artikel.text); printpdf1.TextOut(170,280,'Côr: '+farbe.text); printpdf1.TextOut(420,280,'Tam.: '+stringgrid1.cells[2, 5]); printpdf1.TextOut(20,325,'N.P.: '+order.text); pdfcodedrucken( 135,305,order.Text,false); printpdf1.TextOut(280,325,'N°./Lo: '+stringgrid1.cells[0, 5]); printpdf1.TextOut(420,325,'Peç/Lo: '+stringgrid1.cells[1, 5]); //6.Etiquett printpdf1.TextOut(620,280,'Artigo: '+Artikel.text); printpdf1.TextOut(800,280,'Côr: '+farbe.text); printpdf1.TextOut(1080,280,'Tam.: '+stringgrid1.cells[2, 6]); printpdf1.TextOut(620,325,'N.P.: '+order.text); pdfcodedrucken( 740,305,order.Text,false); printpdf1.TextOut(900,325,'N°./Lo: '+stringgrid1.cells[0, 6]); printpdf1.TextOut(1080,325,'Peç/Lo: '+stringgrid1.cells[1, 6]); printpdf1.LineWidth:=2; printpdf1.DrawLine(0,355,1224,355); //7.Etiquett printpdf1.TextOut(20,450,'Artigo: '+Artikel.text); printpdf1.TextOut(170,450,'Côr: '+farbe.text); printpdf1.TextOut(420,450,'Tam.: '+stringgrid1.cells[2, 7]); printpdf1.TextOut(20,500,'N.P.: '+order.text); pdfcodedrucken( 135,480,order.Text,false); printpdf1.TextOut(280,500,'N°./Lo: '+stringgrid1.cells[0, 7]); printpdf1.TextOut(420,500,'Peç/Lo: '+stringgrid1.cells[1, 7]); //8.Etiquett printpdf1.TextOut(620,450,'Artigo: '+Artikel.text); printpdf1.TextOut(800,450,'Côr: '+farbe.text); printpdf1.TextOut(1080,450,'Tam.: '+stringgrid1.cells[2, 8]); printpdf1.TextOut(620,500,'N.P.: '+order.text); pdfcodedrucken( 740,480,order.Text,false); printpdf1.TextOut(900,500,'N°./Lo: '+stringgrid1.cells[0, 8]); printpdf1.TextOut(1080,500,'Peç/Lo: '+stringgrid1.cells[1, 8]); printpdf1.LineWidth:=2; printpdf1.DrawLine(0,530,1224,530); printpdf1.EndDoc; ShellExecute(Application.Handle, 'open', PChar(printpdf1.FileName), Nil, Nil, SW_NORMAL); end; |
Re: mit pdf-Tool nur Teil einen Stringgrid drucken
Hallo,
wenn du deinen Code besser organisierst, dann entkommst du vielleicht dem maintenance blues:
Delphi-Quellcode:
Getippt und nicht getestet.
function LabelToPage(pt: Tpoint; index: Integer): TPoint;
const PageLeft = 20; PageTop = 40; LabelWidth = 600; LabelHeight = 120; begin Result := Point( pt.X + PageLeft + (index mod 2) * LabelWidth, pt.Y + PageTop + (index div 2) * LabelHeight ); end; procedure TDemoForm.Button1Click(Sender: TObject); const ptArtikel: TPoint = (X: 0; Y: 0); ptFarbe: TPoint = (X: 150; Y: 0); ptColumn2: TPoint = (X: 400; Y: 0); ptOrder: TPoint = (X: 0; Y: 50); ptCode: TPoint = (X: 115; Y: 32); ptColumn0: TPoint = (X: 260; Y: 50); ptColumn1: TPoint = (X: 400; Y: 50); var iRow, iLabel: Integer; pdf: TCanvas; Artikel, Farbe, Order: TEdit; begin deletetmppdf; with printpdf1 do begin FileName:=gettemppathd+'tmppdf'+Inttostr(random(5000))+'.pdf'; PageWidth:=1224; PageHeight:=1725; BeginDoc; Font.Name:=poTimesBoldItalic; Font.Size:=24; end; iLabel := 0; with StringGrid1, printpdf1 do for iRow := 0 to 7 do if Trim(Cells[FixedCols, iRow]) <> '' then begin with LabelToPage(ptArtikel, iLabel) do TextOut(X, Y, 'Artigo: ' + Artikel.Text); with LabelToPage(ptFarbe, iLabel) do TextOut(X, Y, 'Côr: ' + Farbe.Text); with LabelToPage(ptColumn2, iLabel) do TextOut(X, Y, 'Tam.: ' + Cells[2, FixedRows + iRow]); with LabelToPage(ptArtikel, iLabel) do TextOut(20,90,'N.P.: '+order.text); with LabelToPage(ptArtikel, iLabel) do {pdfcodedrucken(X, Y, Order.Text, False)}; with LabelToPage(ptColumn0, iLabel) do TextOut(X, Y, 'N°./Lo: ' + Cells[0, FixedRows + iRow]); with LabelToPage(ptColumn1, iLabel) do TextOut(X, Y, 'Peç/Lo: ' + Cells[1, FixedRows + iRow]); Inc(iLabel); end; with printpdf1 do begin LineWidth := 2; DrawLine(0, 530, 1224, 530); EndDoc; end; ShellExecute(Application.Handle, 'open', PChar(printpdf1.FileName), nil, nil, SW_NORMAL); end; Freundliche Grüße vom marabu |
Re: mit pdf-Tool nur Teil einen Stringgrid drucken
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo marabu!
zunächst einmal ein ganz grosses Dankeschön für deine überaus grosse Mühe, die du für mich gemacht hast. bin ganz baff. Ich bin aber noch ein ziemlicher Laie in Delphi, will mich aber immer weiterbilden. Dein Code sieht natürlich professionell aus, muss mich aber erst darin zurechtfinden. Habe mal kompiliert und Folgendes festgestellt: Die Wert artikel.text, farbe.text, order.text (als Zahl) und order.text (als Barcode) erscheinen jetzt nicht mehr auf dem pdf-Ausdruck. Diese Werte habe ich ja in meiner Form in DBEdits, die aus einer Datenbanktabelle kommen. Siehe Screen-Print arbeitskarte-neu.jpg Wie es in meinem alten Code vorher aussah, sende ich im nächsten Posting im Bild arbeitskart-alt.jpg Auch würde ich gerne jeweils nach 2 Labeln eine Linie haben. Nochmals danke für deine grossartige Hilfe |
Re: mit pdf-Tool nur Teil einen Stringgrid drucken
Liste der Anhänge anzeigen (Anzahl: 1)
hier ein bild wie es mit dem alten Code aussah
|
Re: mit pdf-Tool nur Teil einen Stringgrid drucken
marabu, ich habe inzwischen keine fixe Spalte mehr und den Code leicht abgeändert, jetzt druckt es nur die Labels aus, wo in Spalte 1 eine Zahl steht, so wie ich es will:
Delphi-Quellcode:
Allerdings erscheinen eben artikel, farbe und order nicht, beim Kompilieren kommt die Meldung, dass sich nicht initialisiert wurden:
with StringGrid1, printpdf1 do
for iRow := 0 to 7 do if Trim(Cells[1, iRow+1]) <> '' then //if Trim(Cells[FixedCols, iRow]) <> '' then begin with LabelToPage(ptArtikel, iLabel) do TextOut(X, Y, 'Artigo: ' + Artikel.Text); [Warnung] loteunit.pas(488): Variable 'Order' ist möglicherweise nicht initialisiert worden |
Re: mit pdf-Tool nur Teil einen Stringgrid drucken
Hi!
Wie sieht denn der Bereich um Zeile 488 aus? Ciao Frederic |
Re: mit pdf-Tool nur Teil einen Stringgrid drucken
Wie ungeschickt von mir - ich habe bei einem Syntax-Test TEdit-Komponenten als lokale Variablen vereinbart, die natürlich wieder entfernt werden müssen. Und auch die lokale Variable pdf kann entfernt werden.
marabu |
Re: mit pdf-Tool nur Teil einen Stringgrid drucken
Liste der Anhänge anzeigen (Anzahl: 1)
bin jetzt selbst einen Schritt weiter gekommen, habe vor artikel, farbe usw. lote gesetzt, jetzt kommen die Daten, bis auf lote.order.text kommt nur beim ersten label dann nicht mehr, siehe Bild arbeitskarten-neu1.jpg
musste auch die Position des Barcodes anpassen, habe ich das richtig gemacht? der Code sieht jetzt so aus:
Delphi-Quellcode:
const
ptArtikel: TPoint = (X: 0; Y: 0); ptFarbe: TPoint = (X: 150; Y: 0); ptColumn2: TPoint = (X: 400; Y: 0); ptOrder: TPoint = (X: 0; Y: 50); ptCode: TPoint = (X: 250; Y: 50); ptColumn0: TPoint = (X: 260; Y: 50); ptColumn1: TPoint = (X: 400; Y: 50); var iRow, iLabel: Integer; pdf: TCanvas; Artikel, Farbe, Order: TEdit; begin deletetmppdf; with printpdf1 do begin FileName:=gettemppathd+'tmppdf'+Inttostr(random(5000))+'.pdf'; PageWidth:=1224; PageHeight:=1725; BeginDoc; Font.Name:=poTimesBoldItalic; Font.Size:=24; end; iLabel := 0; with StringGrid1, printpdf1 do for iRow := 0 to 7 do if Trim(Cells[1, iRow+1]) <> '' then //if Trim(Cells[FixedCols, iRow]) <> '' then begin with LabelToPage(ptArtikel, iLabel) do TextOut(X, Y, 'Artigo: ' + lote.Artikel.Text); with LabelToPage(ptFarbe, iLabel) do TextOut(X, Y, 'Côr: ' + lote.Farbe.Text); with LabelToPage(ptColumn2, iLabel) do TextOut(X, Y, 'Tam.: ' + Cells[2, FixedRows + iRow]); with LabelToPage(ptArtikel, iLabel) do TextOut(20,90,'N.P.: '+lote.order.text); with LabelToPage(ptArtikel, iLabel) do pdfcodedrucken(X+120, Y+30, lote.Order.Text, False); with LabelToPage(ptColumn0, iLabel) do TextOut(X, Y, 'N°./Lo: ' + Cells[0, FixedRows + iRow]); with LabelToPage(ptColumn1, iLabel) do TextOut(X, Y, 'Peç/Lo: ' + Cells[1, FixedRows + iRow]); Inc(iLabel); end; with printpdf1 do begin LineWidth := 2; DrawLine(0, 530, 1224, 530); EndDoc; end; ShellExecute(Application.Handle, 'open', PChar(printpdf1.FileName), nil, nil, SW_NORMAL); end; |
Re: mit pdf-Tool nur Teil einen Stringgrid drucken
ok, habe die variablen entfernt, sieht jetzt noch so aus:
Delphi-Quellcode:
allerdings habe ich nach wie vor das Problem, dass die Order (order.text) nur beim ersten Label erscheint...??
var
iRow, iLabel: Integer; |
Re: mit pdf-Tool nur Teil einen Stringgrid drucken
Sorry - da sind noch zwei Fehler in meinem Code-Beispiel, die ich durch Copy und Paste erzeugt habe:
Delphi-Quellcode:
marabu
with LabelToPage(ptOrder, iLabel) do
TextOut(X, Y, 'N.P.: '+order.text); with LabelToPage(ptCode, iLabel) do pdfcodedrucken(X, Y, Order.Text, False)}; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:32 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 by Thomas Breitkreuz