AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Nur ausgewählte Einträge einer Listview drucken
Thema durchsuchen
Ansicht
Themen-Optionen

Nur ausgewählte Einträge einer Listview drucken

Ein Thema von verkouter · begonnen am 30. Sep 2018 · letzter Beitrag vom 7. Okt 2018
Antwort Antwort
verkouter

Registriert seit: 29. Dez 2004
64 Beiträge
 
Delphi 2010 Architect
 
#1

AW: Nur ausgewählte Einträge einer Listview drucken

  Alt 3. Okt 2018, 17:16
Hallo Kodezwerg,
habe deinen Code etwas umgeändert.

Delphi-Quellcode:
procedure TForm1.ToolButton8Click(Sender: TObject);
Var
 LineHeight,i,j,Y,X:Integer;
begin
if PrintDialog1.Execute then
begin
Printer.Title := 'Mischungsliste';
Printer.Copies := 1;
Printer.Orientation := poLandscape;
 With Printer do
  begin
   BeginDoc;
   LineHeight:=Round(Canvas.TextHeight('H')*1.2);
   Y:=0;
   for i:=0 to listview1.Items.Count-1 do
   if listview1.Items[i].Checked then
    begin
     If Y+LineHeight>PageHeight Then
      begin
       NewPage;
       Y:=0;
      end;
// Canvas.TextOut(0,Y,lv1.Items[i].Caption);
       With listview1.Items[i] do
        begin
          X:=0;
          printer.Canvas.TextOut(X*PageWidth Div listview1.Width,Y,Caption);
          for j:=0 to SubItems.Count-1 do
           begin
             X:=X+listview1.Columns[j].width;
             printer.Canvas.TextOut(X*PageWidth Div listview1.Width,Y,subitems[j]);
           end;
        end;
     Y:=Y+LineHeight;
    end;
   EndDoc;
  end;
end;
end;
Mir war schon klar, daß ich eine Abfrage machen muß, die prüft ob Checkbox an oder aus ist. Der Code den ich verwände,baut soweit ich ihn verstanden habe, die Formatierung
spaltenweise auf, was eine Abfrage zeilenweise schwierig macht. Ich wollte den fertigen Ausdruck aber nicht nochmal komplett neu programmieren.
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#2

AW: Nur ausgewählte Einträge einer Listview drucken

  Alt 3. Okt 2018, 17:38
Ich würde den Code an deiner Stelle nochmal komplett neu schreiben.
Du wirst den Code in einem Jahr nicht mehr lesen können. Speziell wegen des ziemlich bösen with.
With ist schlecht.
  Mit Zitat antworten Zitat
verkouter

Registriert seit: 29. Dez 2004
64 Beiträge
 
Delphi 2010 Architect
 
#3

AW: Nur ausgewählte Einträge einer Listview drucken

  Alt 3. Okt 2018, 18:05
Mein Problem ist ja, das ich den Code jetzt schon nicht verstehe, alle Umrechnungen auf Papiergröße und Positionierungen.
Aber es kommt halt ein fertiges Formular bei raus.
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Nur ausgewählte Einträge einer Listview drucken

  Alt 3. Okt 2018, 18:09
Hier ohne "with" aber mit Deinen Änderungen
Delphi-Quellcode:
procedure PrintDlgSelLv(PDlg: TPrintDialog; const LV: TListView; const Title: String = 'by KodeZwerg');
Var
 LineHeight,i,j,Y,X:Integer;
begin
  if PDlg.Execute then
  begin
    Printer.Title := Title;
    Printer.Copies := PDlg.Copies;
    Printer.Orientation := poLandscape;
    Printer.BeginDoc;
    LineHeight:=Round(Printer.Canvas.TextHeight('H')*1.2);
    Y:=0;
    for i:=0 to LV.Items.Count-1 do
     if LV.Items[i].Checked then
      begin
       If Y+LineHeight>Printer.PageHeight Then
        begin
          Printer.NewPage;
          Y:=0;
        end;
// Printer.Canvas.TextOut(0,Y,LV.Items[i].Caption);
        X:=0;
        Printer.Canvas.TextOut(X*Printer.PageWidth Div LV.Width,Y,LV.Items[i].Caption);
        for j:=0 to LV.Items[i].SubItems.Count-1 do
         begin
           X:=X+LV.Columns[j].width;
           Printer.Canvas.TextOut(X*Printer.PageWidth Div LV.Width,Y,LV.Items[i].SubItems[j]);
         end;
        Y:=Y+LineHeight;
      end;
    Printer.EndDoc;
  end;
end;
Aufrufen so in etwa: PrintDlgSelLv(PrintDialog1, ListView1, 'Mischungsliste');

Erklärung:
Bei "BeginDoc" fängt man an ein Formular fürs Drucken Vorzubereiten, bei "EndDoc" sagt man dem Drucker das man fertig ist.
Gruß vom KodeZwerg

Geändert von KodeZwerg ( 3. Okt 2018 um 18:35 Uhr) Grund: Code
  Mit Zitat antworten Zitat
verkouter

Registriert seit: 29. Dez 2004
64 Beiträge
 
Delphi 2010 Architect
 
#5

AW: Nur ausgewählte Einträge einer Listview drucken

  Alt 3. Okt 2018, 18:36
Meine Vermutung ist, das der Code Spaltenweise arbeitet um senkrechte Linien zu Zeichnen. Und diesen ganzen Aufbau verstehe ich nicht.
Beim Orginalcode sieht das Protokoll aus, wie in 1.pdf und mit dem Code von Kodezwerg wie in 2.pdf . Ist schon ein kleiner Unterschied.
Angehängte Dateien
Dateityp: pdf 1.pdf (175,4 KB, 10x aufgerufen)
Dateityp: pdf 2.pdf (84,5 KB, 9x aufgerufen)
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#6

AW: Nur ausgewählte Einträge einer Listview drucken

  Alt 3. Okt 2018, 18:39
Ich würde es mir da ehrlich gesagt viel einfacher machen...

ich würde die ListView durchgehen und alle Daten im HTML-Format in eine Datei speichern und diese anschließend ausdrucken.
So bekommt man auch alles genau so hin wie es in 1.pdf zu sehen ist und muss sich nicht mit Printers etc rumschlagen.
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Nur ausgewählte Einträge einer Listview drucken

  Alt 3. Okt 2018, 18:47
Ich find, jetzt wo ich sehe was gedruckt wird, mein Beispiel gar nicht mal so schlecht, bei Nadeldrucker konnte man ein "|" Zeichen vorm Item Hängen um damit ne Vertikale Linie zu drucken, kannst Du gerne mal Versuchen aber ich garantiere für nichts.

edit
Und jetzt habe ich auch erst Verstanden was TE möchte, seine Funktion mit meiner Abfrage kombiniert.
Ich schau mir das nach her noch mal an, DieDolly kann ja ein Html Beispiel erschaffen
Gruß vom KodeZwerg

Geändert von KodeZwerg ( 3. Okt 2018 um 18:53 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


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 12:48 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