Autor Beitrag
Conny Drexler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 44


D6 prof. win xp
BeitragVerfasst: Mo 23.06.03 19:34 
Ich ärgere mich wieder einmal mit der ausgabe von Daten auf dem Drucker herum. Nachfolgend habe ich das Listing beigefügt. vielleicht sieht jemand den Fehler. Ich bekomme meinen Daten immer nur auf der ersten seite korrekt raus. Ab der zweiten Seite bekomme ich zum einen nur ganz kleine Schrifte und zum anderen immer nur einen datensatz, obwohl aber mehrere Datensätze vorhanden sind.


Nachfolgend das Listing:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
unit ulisten;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls,
  uconfig_drucker,
  utypen,uconst,uinit,printers;

type
  Tflisten = class(TForm)
    gbkunden: TGroupBox;
    gbpreislisten: TGroupBox;
    bdrucken: TButton;
    lvonkundennummer: TLabel;
    Evonkundennummer: TEdit;
    Label1: TLabel;
    ebiskundennummer: TEdit;
    RadioGroup1: TRadioGroup;
    rballekunden: TRadioButton;
    rbdispakunden: TRadioButton;
    rbladenkunden: TRadioButton;
    Button1: TButton;
    bverlassen: TButton;
    cbkundensort: TComboBox;
    GroupBox1: TGroupBox;
    rbkundennummer: TRadioButton;
    rbkundenname: TRadioButton;
    procedure EvonkundennummerKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure ebiskundennummerKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure bverlassenClick(Sender: TObject);
    procedure bdruckenClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  flisten: Tflisten;
  vonkundennummer,
  biskundennummer : longint;

procedure kundenlisten;

implementation

{$R *.dfm}

procedure kundenlisten;
Begin
  flisten.visible := true;
  flisten.gbpreislisten.Visible := false;
end;


procedure Tflisten.EvonkundennummerKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  val(flisten.Evonkundennummer.Text,vonkundennummer,valok);
end;

procedure Tflisten.ebiskundennummerKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  val(flisten.ebiskundennummer.Text,biskundennummer,valok);
end;

procedure Tflisten.bverlassenClick(Sender: TObject);
begin
  flisten.Visible := false;
end;

procedure Tflisten.bdruckenClick(Sender: TObject);
var kundenauswahl : byte;
    zahlen : real;
    von_kunde,bis_kunde : longint;
begin
  if flisten.rballekunden.Checked then
    kundenauswahl := kh + sulz + pirck + dispa;
    val(flisten.Evonkundennummer.text,zahlen,valok);
    von_kunde := trunc(zahlen);
    val(flisten.ebiskundennummer.text,bis_kunde,valok);
    bis_kunde := trunc(zahlen);
    if bis_kunde <= 0 then
      Begin
        von_kunde := 0;
        bis_kunde := 999999;
      end;
    reset(kundendatei);
    printer.Printers;
    printer.PrinterIndex := konfig.grosserdruckernameindex;     //grosserdrucker;
    printer.Printers[printer.printerindex];
    with printer do
      begin
        orientation := poportrait;
        printer.BeginDoc;
        setmapmode(handle,mm_lometric);
        breite := getdevicecaps(handle,horzsize);
        hoehe := getdevicecaps(handle,vertsize);
        //    hoehe := 29700;
        vertdruckpos := 0;
        lrand := 1;
        rrand := 1;
        urand := 0;
        orand := 0;
      end;
    printer.Canvas.Font.Height := 4 * 10;
    printer.Canvas.Font.Style := [];

    reset(kundendatei);
    while not(eof(kundendatei)) do
      Begin
        init_kunde(kunde);
        read(kundendatei,kunde);
        if flisten.rbkundennummer.Checked then
          Begin
            str(kunde.kundennummer,dummy_zeile);
            dummy_zeile := copy(trim(dummy_zeile) + leerstring,1,50);
            str(kunde.kundenposition,ausgabe_zeile);
            dummy_zeile := dummy_zeile + trim(ausgabe_zeile);
            flisten.cbkundensort.Items.Append(dummy_zeile);
          end;
      end;
    reset(kundendatei);
    while not(eof(kundendatei)) do
      Begin
        init_kunde(kunde);
        read(Kundendatei,kunde);

        if vertdruckpos <= -hoehe then
          Begin
            printer.NewPage;
            with printer do
              vertdruckpos := -orand;
            printer.Canvas.Font.Height := 4 * 10;
            printer.Canvas.Font.Style := [];
          end;

          if kunde.angelegt_von = dispa then
          if (kunde.kundennummer >= von_kunde) then
            if (kunde.kundennummer <= bis_kunde) then
              Begin
                str(kunde.kundennummer,dummy_zeile);
                printer.Canvas.TextOut(lrand * 10 ,vertdruckpos * 10,dummy_zeile);
                printer.Canvas.TextOut(lrand * 10 + 30 * 10,vertdruckpos * 10,kunde.Kundenname);
                printer.Canvas.TextOut(lrand * 10 + 120 * 10,vertdruckpos * 10,kunde.firma);
                dec(vertdruckpos,4);
              end;
      end;
   with printer do
     hoehe := vertdruckpos * (-1);
   printer.enddoc;
   flisten.Visible := false;
end;

end.

Na den Fehler gefunden????

Danke für die Hilfe.
AndyB
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1173
Erhaltene Danke: 14


RAD Studio XE2
BeitragVerfasst: Mo 23.06.03 20:21 
Conny Drexler hat folgendes geschrieben:
Na den Fehler gefunden????

Du benutzt Windows 9x/ME. Hab ich recht?

Mal was aus dem PSDK.
Zitat:
Windows 95/98/Me: EndPage does not reset the device context attributes. However, the next StartPage call does reset the device context attributes to default values. At that time, you must re-select objects and set up the mapping mode again before printing the next page. Note that StartPage also resets the device context state stack used by the SaveDC and RestoreDC functions to default values.

Windows NT/2000/XP: Neither EndPage or StartPage resets the device context attributes. Device context attributes remain constant across subsequent pages. You do not need to re-select objects and set up the mapping mode again before printing the next page; however, doing so will produce the same results and reduce code differences between versions of Windows.



NewPage ruft EndPage und StartPage auf.


Es sind eben immer die Kleinigkeiten, die Windows 9x/ME und NT/2000/XP unterscheiden.

_________________
Ist Zeit wirklich Geld?