AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi mit pdf-Tool nur Teil einen Stringgrid drucken
Thema durchsuchen
Ansicht
Themen-Optionen

mit pdf-Tool nur Teil einen Stringgrid drucken

Ein Thema von tom_po · begonnen am 7. Mai 2006 · letzter Beitrag vom 10. Mai 2006
Antwort Antwort
Seite 1 von 2  1 2      
tom_po

Registriert seit: 5. Feb 2006
137 Beiträge
 
Delphi 7 Enterprise
 
#1

mit pdf-Tool nur Teil einen Stringgrid drucken

  Alt 7. Mai 2006, 03:38
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;
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: mit pdf-Tool nur Teil einen Stringgrid drucken

  Alt 7. Mai 2006, 09:17
Hallo,

wenn du deinen Code besser organisierst, dann entkommst du vielleicht dem maintenance blues:

Delphi-Quellcode:
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;
Getippt und nicht getestet.

Freundliche Grüße vom marabu
  Mit Zitat antworten Zitat
tom_po

Registriert seit: 5. Feb 2006
137 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: mit pdf-Tool nur Teil einen Stringgrid drucken

  Alt 8. Mai 2006, 10:53
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
Miniaturansicht angehängter Grafiken
arbeitskarte-neu_126.jpg  
  Mit Zitat antworten Zitat
tom_po

Registriert seit: 5. Feb 2006
137 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: mit pdf-Tool nur Teil einen Stringgrid drucken

  Alt 8. Mai 2006, 10:54
hier ein bild wie es mit dem alten Code aussah
Miniaturansicht angehängter Grafiken
arbeitskarte-alt_170.jpg  
  Mit Zitat antworten Zitat
tom_po

Registriert seit: 5. Feb 2006
137 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: mit pdf-Tool nur Teil einen Stringgrid drucken

  Alt 8. Mai 2006, 11:10
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:
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);
Allerdings erscheinen eben artikel, farbe und order nicht, beim Kompilieren kommt die Meldung, dass sich nicht initialisiert wurden:
[Warnung] loteunit.pas(488): Variable 'Order' ist möglicherweise nicht initialisiert worden
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#6

Re: mit pdf-Tool nur Teil einen Stringgrid drucken

  Alt 8. Mai 2006, 11:12
Hi!

Wie sieht denn der Bereich um Zeile 488 aus?


Ciao Frederic
Frederic Kerber
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#7

Re: mit pdf-Tool nur Teil einen Stringgrid drucken

  Alt 8. Mai 2006, 11:26
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
  Mit Zitat antworten Zitat
tom_po

Registriert seit: 5. Feb 2006
137 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: mit pdf-Tool nur Teil einen Stringgrid drucken

  Alt 8. Mai 2006, 11:29
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;
Miniaturansicht angehängter Grafiken
arbeitskarte-neu1_157.jpg  
  Mit Zitat antworten Zitat
tom_po

Registriert seit: 5. Feb 2006
137 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: mit pdf-Tool nur Teil einen Stringgrid drucken

  Alt 8. Mai 2006, 11:32
ok, habe die variablen entfernt, sieht jetzt noch so aus:
Delphi-Quellcode:
var
  iRow, iLabel: Integer;
allerdings habe ich nach wie vor das Problem, dass die Order (order.text) nur beim ersten Label erscheint...??
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#10

Re: mit pdf-Tool nur Teil einen Stringgrid drucken

  Alt 8. Mai 2006, 11:47
Sorry - da sind noch zwei Fehler in meinem Code-Beispiel, die ich durch Copy und Paste erzeugt habe:

Delphi-Quellcode:
with LabelToPage(ptOrder, iLabel) do
  TextOut(X, Y, 'N.P.: '+order.text);
with LabelToPage(ptCode, iLabel) do
  pdfcodedrucken(X, Y, Order.Text, False)};
marabu
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:44 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz