Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Help !!! - Wo ist steckt der Fehler ab dem 2. Druckaufruf. (https://www.delphipraxis.net/96925-help-wo-ist-steckt-der-fehler-ab-dem-2-druckaufruf.html)

Black07 1. Aug 2007 19:26


Help !!! - Wo ist steckt der Fehler ab dem 2. Druckaufruf.
 
Hi,

bin gerade auf ein Fehler in meinem Programm gestoßen,
der ab dem 2+ Druckauftrag entsteht -welchen ich mir nicht erklären kann :gruebel: .

Das Problem ist ich lasse mir alle Daten in eine Stringlist schreiben,
beim 1.Drucken läuft auch alles glatt -

Doch danach sind nur noch schwarzen Balken auf dem Papier, wo vorher der Textstand,
die Balken sind genau solang wie der Text beim 1. Druck.

Das Problem entsteht also ab dem 2.Aufruf pro Programmstart.


Hier der Code - Hab ich was übersehen?

Delphi-Quellcode:
procedure TForm1.Drucken1Click(Sender: TObject);
var
  r: TRect;
  i: Integer;

begin

  printdiaf1.Execute;

  questprintlist:=TStringList.Create;

  questprint; //FKT: Leert und holt dann die Daten zum drucken in die questprintlist

  with printer do
    begin
      r := Rect(200,200,(Pagewidth - 200),(PageHeight - 200));
      Printer.Title := 'Quest drucken';
      canvas.Font.Size:=12;
      BeginDoc;
      for i := 0 to questprintlist.Count -1 do
        begin
           if questprintlist.strings[i] = '<----new Page ---->' then
            {begin
               EndDoc;        //macht einen Seitenvorschub
               BeginDoc;
             end}
             NewPage
           else
         Canvas.TextOut(200,200 + (i *Canvas.TextHeight(questprintlist.Strings[i])),questprintlist.Strings[i]);
        end;
      Canvas.Brush.Color := clBlack;
      Canvas.FrameRect(r);
      EndDoc;
    end;
questprintlist.free;
end;

fwsp 1. Aug 2007 19:39

Re: Help !!! - Wo ist steckt der Fehler ab dem 2. Druckaufru
 
Delphi-Quellcode:
procedure TForm1.Drucken1Click(Sender: TObject);
var
  r: TRect;
  i: Integer;

begin
  if printdiaf1.Execute then //ist doch ne fkt die was hübsches zurück gibt
  begin

  //...

 
  end;
end;
was genau macht denn questprint;? poste vllt noch mal den code.

Black07 1. Aug 2007 19:46

Re: Help !!! - Wo ist steckt der Fehler ab dem 2. Druckaufru
 
Zitat:

Zitat von fwsp
was genau macht denn questprint;? poste vllt noch mal den code.


Also ich sehe hier keinen Fehler

ich lösche die stringlist und lasse dann per ADD Strings reinschreiben.

Die Funkt verwende ich in leicht abgewanter Form für den Speicher und Ladevorgang.
Theoretisch habe ich nur die Stringlist in die geschrieben wird verändert
und zusätzliche Module entfernt.

s-off 1. Aug 2007 20:34

Re: Help !!! - Wo ist steckt der Fehler ab dem 2. Druckaufru
 
Hallo,

Du tust Dir selber einen Gefallen, wenn Du an der Lesbarkeit Deines Codes arbeitest.
Dein Quelltext strotzt vor Redundanzen.

z.B.

Delphi-Quellcode:
If form1.memoa.Lines.Strings[I] <> '""' Then {// ""} Begin
   If I = 0 Then Begin
      stemp := ((form1.memoa.Lines.Strings[I]));
   End;
End;

If form1.memoa.Lines.Strings[I] <> '""' Then {//     ""} Begin
   If I > 0 Then Begin
      stemp := ((stemp + ';' + form1.memoa.Lines.Strings[I]));
   End;
End;
Du fragst hier zweimal das Gleiche ab.
Warum machst Du es nicht so:
Delphi-Quellcode:
If form1.memoa.Lines.Strings[I] <> '""' Then Begin
   If I = 0 Then
      stemp := ((form1.memoa.Lines.Strings[I]))

   Else If I > 0 Then
      stemp := ((stemp + ';' + form1.memoa.Lines.Strings[I]));
End;
Oder das hier:
Delphi-Quellcode:
If form1.cbjobsuccess.ItemIndex <> -1 Then Begin
   form1.questprintlist.Add('JobSuccess=' + (inttostr(form1.cbjobsuccess.ItemIndex)));
End Else Begin
   form1.questprintlist.Add('JobSuccess=0')
End;
pgb := (pgb + 100);
form1.progbar1.Position := pgb;
Dieses Konstrukt verwendest Du x-Mal. Was ist, wenn es nun auf einmal nicht mehr 'pgb+100' heissen muss, sindern plötzlich 'pgb+101'? Dann änderst Du erstmal an zig Stellen -> hoher Arbeitsaufwand und hohe Fehleranfälligkeit.

Warum baust Du Dir dafür nicht eine Methode, die Du dann immer wieder mit unterschiedlichen Parametern aufrufst?

Black07 1. Aug 2007 22:06

Re: Help !!! - Wo ist steckt der Fehler ab dem 2. Druckaufru
 
@ s-off : Werd mich bessern versprochen :)


____________



Habe übrigen den übeltäter gefunden -

Delphi-Quellcode:
Printer.Canvas.Brush.Color := clBlack;
Diese kleine Anweisung bewirkt das der Text als schwarze Fläche gedruckt wird.

Dunkel 1. Aug 2007 23:56

Re: Help !!! - Wo ist steckt der Fehler ab dem 2. Druckaufru
 
Delphi-Quellcode:
Canvas.Brush.Color := clBlack;
ist daran schuld! Setz mal die Brush-Farbe vor dem Schreiben des Text auf
Delphi-Quellcode:
Canvas.Brush.Color := clWhite;
Edit:
NARF, man sollte sich zuerst das komplett Topic durchlesen bevor man antwortet... :stupid:
Wie dem auch sei, besser ist es noch, Du setzt auch die Pen-Farbe vor jedem neuen Zeichnen auf das Canvas auf den gewünschten Wert, da sich das Canvas die zuletzt benutze Farbe merkt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:52 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