![]() |
Re: mit pdf-Tool nur Teil einen Stringgrid drucken
super, jetzt klappt alles sehr gut, hast mir wirklich sehr geholfen.
ich habe jetzt noch im string eine 4. spalte eingefügt und wollte dort automatisch beim laden den Inhalt von meinem dbedit holen, geht das nicht? habe es so versucht:
Delphi-Quellcode:
es geht um die celle 3,1, es kompiliert zwar, kommt aber beim laden der form eine fehlermeldung....
Stringgrid1.Cells[1,0]:='Peç./Lo.';
Stringgrid1.Cells[2,0]:='Tam.'; Stringgrid1.Cells[3,0]:='Cõr'; Stringgrid1.Cells[0,0]:='N°.Lote'; Stringgrid1.Cells[3,1]:=lote.farbe.Text; Stringgrid1.Cells[0,1]:='1'; Stringgrid1.Cells[0,2]:='2'; |
Re: mit pdf-Tool nur Teil einen Stringgrid drucken
Vielleicht wählst du den Zeitpunkt zum Initialisieren des Grid falsch. Auf Farbe.Text kannst du wohl erst zugreifen, wenn die zugehörige Tabelle auch geöffnet ist.
marabu |
Re: mit pdf-Tool nur Teil einen Stringgrid drucken
ich denke nicht, denn ich führe das query zum aufruf der daten schon in der hauptform aus, beim auswählen des menupunktes, der die form lote aufruft...
das heisst, die daten werden schon angezeigt, wen die form lote offen ist, aber eben nur in der dbedit. hast du eine Idee, marabu, an was es sonst noch liegen könnte, dass im grid der Inhalt von farbe.text nicht erscheint? |
Re: mit pdf-Tool nur Teil einen Stringgrid drucken
Hallo Marabu, du hast mir ja so sehr geholfen beim Ausdruck mit den labels, der Code sieht jetzt so aus wie folgt.
wenn ich jetzt 3 labels nebeneinander auf der DIN A4-Seite möchte, was muss ich in der Funktion ändern (ausser den Positionen der einzelnen Angaben)
Delphi-Quellcode:
function LabelToPage(pt: Tpoint; index: Integer): TPoint;
const PageLeft = 20; PageTop = 30; LabelWidth = 600; //Original-Label-Masse LabelHeight = 120; begin Result := Point( pt.X + PageLeft + (index mod 2) * LabelWidth, pt.Y + PageTop + (index div 2) * LabelHeight ); end; procedure Tlote.Button1Click(Sender: TObject); const ptArtikel: TPoint = (X: 0; Y: 0); // Werte für DIN A4 ptFarbe: TPoint = (X: 150; Y: 0); ptColumn2: TPoint = (X: 400; Y: 0); ptOrder: TPoint = (X: 0; Y: 50); ptCode: TPoint = (X: 125; Y: 32); ptColumn0: TPoint = (X: 285; Y: 50); ptColumn1: TPoint = (X: 415; Y: 50); var iRow, iLabel: Integer; begin deletetmppdf; with printpdf1 do begin FileName:=gettemppathd+'tmppdf'+Inttostr(random(5000))+'.pdf'; PageWidth:=1224; // Origanl-DIN A4 PageHeight:=1725; // Origanl-DIN A4 BeginDoc; Font.Name:=poTimesBoldItalic; Font.Size:=24; //alt 24 end; iLabel := 0; with StringGrid1, printpdf1 do for iRow := 0 to 15 do if Trim(Cells[1, iRow+1]) <> '' then begin with LabelToPage(ptArtikel, iLabel) do TextOut(X, Y, 'Artigo: ' + lote.Artikel.Text); with LabelToPage(ptFarbe, iLabel) do TextOut(X, Y, 'Côr: ' + Cells[3, FixedRows + iRow]); //TextOut(X, Y, 'Côr: ' + lote.Farbe.Text); //von DB with LabelToPage(ptColumn2, iLabel) do TextOut(X, Y, 'Tam.: ' + Cells[2, FixedRows + iRow]); with LabelToPage(ptOrder, iLabel) do TextOut(X, Y,'N.P.: '+lote.order.text); with LabelToPage(ptCode, iLabel) do pdfcodedrucken(X, Y, 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 EndDoc; end; ShellExecute(Application.Handle, 'open', PChar(printpdf1.FileName), nil, nil, SW_NORMAL); end; |
Re: mit pdf-Tool nur Teil einen Stringgrid drucken
Hallo Tom,
die Zahl der Labels, die nebeneinander ausgegeben werden sollen, kannst du über eine Konstante steuern:
Delphi-Quellcode:
Aber bei einer Label-Breite von 600 und deiner eingestellten Seitenbreite von 1224 wird das wohl nicht passen.
function LabelToPage(pt: Tpoint; index: Integer): TPoint;
const PageLeft = 20; PageTop = 30; LabelWidth = 600; // Original-Label-Maße LabelHeight = 120; LabelCols = 3; begin Result := Point( pt.X + PageLeft + (index mod LabelCols) * LabelWidth, pt.Y + PageTop + (index div LabelCols) * LabelHeight ); end; Freundliche Grüße vom marabu |
Re: mit pdf-Tool nur Teil einen Stringgrid drucken
bevor du geantwortet hast, habe ich selbst noch probiert und es so gemacht, dabei auch die Labelbreit geändert, passt jetzt wunderbar: (einfach mod und div in 3 geändert)
Delphi-Quellcode:
was meinst du?
function LabelToPage(pt: Tpoint; index: Integer): TPoint;
const PageLeft = 20; //Orig 20 PageTop = 30; LabelWidth = 400; //Original-Label-Masse 600 - 120 LabelHeight = 120; begin Result := Point( pt.X + PageLeft + (index mod 3) * LabelWidth, //orig mod 2 pt.Y + PageTop + (index div 3) * LabelHeight //orig div 2 ); end; |
Re: mit pdf-Tool nur Teil einen Stringgrid drucken
Nimm lieber die Konstante, so wie ich es dir gezeigt habe. Und denke daran, dass das Label-Layout angepasst werden muss, wenn du die Label-Abmessungen veränderst.
Delphi-Quellcode:
Da sehe ich auf Anhieb X-Positionen, die sich nicht mit deiner Label-Breite von 400 Pixel vertragen. Überprüfe das mal.
const
ptArtikel: TPoint = (X: 0; Y: 0); // Werte für DIN A4 ptFarbe: TPoint = (X: 150; Y: 0); ptColumn2: TPoint = (X: 400; Y: 0); ptOrder: TPoint = (X: 0; Y: 50); ptCode: TPoint = (X: 125; Y: 32); ptColumn0: TPoint = (X: 285; Y: 50); ptColumn1: TPoint = (X: 415; Y: 50); marabu |
Re: mit pdf-Tool nur Teil einen Stringgrid drucken
du hast Recht, zwischenzeitlich habe ich das korrigiert, es ist jetzt wirklich toll mit der Konstanten, warst mir so ein grosse hilfe, danke nochmals
werde jetzt DIN A4 label-Papier kaufen, muss vermutlich dann alles nochmals anpassen der Code sieht jetzt so aus:
Delphi-Quellcode:
usw.
function LabelToPage(pt: Tpoint; index: Integer): TPoint;
const PageLeft = 20; PageTop = 20; LabelWidth = 400; // Original-Label-Maße LabelHeight = 130; LabelCols = 3; begin Result := Point( pt.X + PageLeft + (index mod LabelCols) * LabelWidth, pt.Y + PageTop + (index div LabelCols) * LabelHeight ); end; procedure Tlote.Button1Click(Sender: TObject); const ptArtikel: TPoint = (X: 280; Y: 0); ptFarbe: TPoint = (X: 0; Y: 50); ptColumn2: TPoint = (X: 250; Y: 50); ptOrder: TPoint = (X: 165; Y: 0); //ptCode: TPoint = (X: 95; Y: 32); ptColumn0: TPoint = (X: 0; Y: 0); ptColumn1: TPoint = (X: 80; Y: 0); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:58 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