![]() |
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; |
Re: Help !!! - Wo ist steckt der Fehler ab dem 2. Druckaufru
Delphi-Quellcode:
was genau macht denn questprint;? poste vllt noch mal den code.
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; |
Re: Help !!! - Wo ist steckt der Fehler ab dem 2. Druckaufru
Zitat:
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. |
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:
Du fragst hier zweimal das Gleiche ab.
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; Warum machst Du es nicht so:
Delphi-Quellcode:
Oder das hier:
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;
Delphi-Quellcode:
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.
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; Warum baust Du Dir dafür nicht eine Methode, die Du dann immer wieder mit unterschiedlichen Parametern aufrufst? |
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:
Diese kleine Anweisung bewirkt das der Text als schwarze Fläche gedruckt wird.
Printer.Canvas.Brush.Color := clBlack;
|
Re: Help !!! - Wo ist steckt der Fehler ab dem 2. Druckaufru
Delphi-Quellcode:
ist daran schuld! Setz mal die Brush-Farbe vor dem Schreiben des Text auf
Canvas.Brush.Color := clBlack;
Delphi-Quellcode:
Edit:
Canvas.Brush.Color := clWhite;
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