Autor |
Beitrag |
thommy f
      
Beiträge: 114
Windows 2K pro
Delphi 5 Enterprise
|
Verfasst: Di 19.02.13 14:12
Hallo Forum...
In Google habe ich nichts gefunden, was mich weiter brächte, und auch die Forumssuche hat zwar ein paar mal was zu dieser Fehlermeldung ausgespuckt, aber leider immer in anderen Zusammenhängen, als das bei mir der Fall ist.
Ich habe in einem Programm ein normales MEMO-Feld, das ich beim Programmstart nach gewissen Kriterien mit Einträgen aus verschiedenen Datenbank-Tabellen füttere. Das funktioniert auch einwandfrei. Nun hätte ich gerne den Inhalt des Memos in einen Quickreport übernommen und dießen anschließend ausgedruckt.
Wahrscheinlich habe ich einen éinfachen (betriebsblinden) Denkfehler in der ganzen Geschichte.
Folgende Sequenz sollte das relativ simpel erledigen:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| if F_Druck_Termine = nil then F_Druck_Termine := TF_Druck_Termine.Create(Application); F_Druck_Termine.QRL_Headline.Caption := 'TERMINE vereinbaren ' + ' ' + FormatDateTime('dd.mm.yyyy',now); F_Druck_Termine.QRM_Termine.Lines := F_Haupt.M_Termine_vereinbaren.Lines; F_Druck_Termine.QR_Termine.print; if F_Druck_Termine <> nil then begin F_Druck_Termine.Release; F_Druck_Termine := nil; end; end; |
lt. Step by Step löst das Programm bei der -.print Anweisung zwar das Drucken an sich aus, aber ich bekomme anschließend sofort die Fehlermeldung:
Project: ***.exe raised exception class EStringListError with message 'List index out of bounds(3)'. Process Stopped.
Wenn ich das Programm dann über Delphi "zurücksetze" druckt er mir das gewünschte Resultat zwar, aber immer nur eine Zeile...
Bitte um kurze "Denkanstöße".
DANKE! Moderiert von Narses: Topic aus Sonstiges (Delphi) verschoben am Di 19.02.2013 um 15:45
_________________ Der Mensch wächst mit seinen Aufgaben *** Wer kämpft kann verlieren, wer nicht kämpft hat schon verloren
|
|
WasWeißDennIch
      
Beiträge: 653
Erhaltene Danke: 160
|
Verfasst: Di 19.02.13 14:26
Ich habe zwar ewig nichts mehr mit Quickreport gemacht, aber funktioniert das hier evtl.?
Delphi-Quelltext 1:
| F_Druck_Termine.QRM_Termine.Lines.Assign(F_Haupt.M_Termine_vereinbaren.Lines); |
|
|
Gausi
      
Beiträge: 8548
Erhaltene Danke: 477
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Di 19.02.13 14:26
Zuweisung einer Stringliste sollte afaik so laufen:
Delphi-Quelltext 1:
| F_Druck_Termine.QRM_Termine.Lines.Assign(F_Haupt.M_Termine_vereinbaren.Lines); |
Dabei werden die Strings von der einen Liste in die andere kopiert. Einfach den Listen-Pointer umzubiegen, kann schonmal schief gehen: Wenn das eine Objekt zerstört wird, zerstört es auch "seine" Stringliste, die aber eigentlich einem anderen Objekt gehört - und dann knallts...
Edit: zu langsam... 
_________________ We are, we were and will not be.
|
|
thommy f 
      
Beiträge: 114
Windows 2K pro
Delphi 5 Enterprise
|
Verfasst: Mi 20.02.13 19:39
... danke für den Tipp! Hat aber leider noch nichts gebracht.
Er macht die Sequenz komplett durch, nach dem .print spricht er den Drucker auch an, dann kommt ohne dass der Statusbalken der Druckanzeige einen Rucker macht, die oben erwähnte Fehlermeldung und das Programm hängt sich auf...
Noch jemand eine andere Idee?
_________________ Der Mensch wächst mit seinen Aufgaben *** Wer kämpft kann verlieren, wer nicht kämpft hat schon verloren
|
|
thommy f 
      
Beiträge: 114
Windows 2K pro
Delphi 5 Enterprise
|
Verfasst: Do 28.02.13 12:28
...
weitere Versuche den Fehler zu beheben, haben mich nun eher in die Richtung geführt, dass der Fehler evtl. von der QuickReport Komponente ausgelöst wird.
Auch andere Druckroutinen in dem Programm verursachen ähnliche Fehler.
Ich möchte jedoch die QuickReport-Komponente nur sehr ungern raus werfen, da mir diese doch recht komfortable Möglichkeiten bietet, die ausgedruckten Seiten optisch zu gestalten.
Gibt's da überhaupt andere Möglichkeiten?
Bin um jeden Tipp dankbar...
_________________ Der Mensch wächst mit seinen Aufgaben *** Wer kämpft kann verlieren, wer nicht kämpft hat schon verloren
|
|
WasWeißDennIch
      
Beiträge: 653
Erhaltene Danke: 160
|
Verfasst: Do 28.02.13 12:53
Wenn es etwas kosten darf könntest Du Dir einmal FastReport anschauen, der läuft auch noch unter Delphi 4 und ist ab $79 erhältlich.
|
|
Tranx
      
Beiträge: 648
Erhaltene Danke: 85
WIN 2000, WIN XP
D5 Prof
|
Verfasst: Do 28.02.13 13:17
Musst Du denn das Formular ständig neu erzeugen und wieder löschen?
Versuche es einmal, indem Du das Formular in Dein Programm einbindest und dann die Create-Prozedur sozusagen in der Projektdatei erledigen lässt. Dann existiert das Formular beim Druck und Du beendest das Ganze erst am Ende des Programms. Vielleicht hilft das weiter.
Dann müsstest Du aber die Speicherfreigabe und die Erzeugung beim Druck herausnehmen (siehe meinen Vorschlag).
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| F_Druck_Termine.QRL_Headline.Caption := 'TERMINE vereinbaren ' + ' ' + FormatDateTime('dd.mm.yyyy',now); F_Druck_Termine.QRM_Termine.Lines := F_Haupt.M_Termine_vereinbaren.Lines; F_Druck_Termine.QR_Termine.PrinterSettings.PrinterIndex := Printer.PrinterIndex. F_Druck_Termine.QR_Termine.print;
end; |
_________________ Toleranz ist eine Grundvoraussetzung für das Leben.
|
|
thommy f 
      
Beiträge: 114
Windows 2K pro
Delphi 5 Enterprise
|
Verfasst: Mo 24.06.13 08:33
... leider hat auch das ^^ nicht geholfen. Die Fehlermeldung tritt trotzdem weiterhin auf. Stutzig macht mich, dass Sie von
.print bzw. .preview ausgelöst wird.
er öffnet zunächst den "wird gedruckt" Prozess, der Statusbalken bewegt sich jedoch nicht, da anschließend sofort die oben genannte Fehlermeldung auftaucht.
noch eine weitere Erkenntnis:
Der Druckauftrag steht in der Drucker-Warteschlange korrekt drin, wird aber nicht ausgeführt. Ich vermute also, dass der Fehler evtl. vom Spooler ausgelöst werden könnte...
Hat noch jemand weitere Ansätze???
Danke für eure Mithilfe schonmal.
Gruß:
Thommy
P.S. wenn ich den Druckauftrag in der Warteschlange manuell erneut starte, druckt er mir den ersten "Datensatz aus der StringListe. Aber leider NUR den.
_________________ Der Mensch wächst mit seinen Aufgaben *** Wer kämpft kann verlieren, wer nicht kämpft hat schon verloren
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 24.06.13 09:10
Du könntest Debuginformationen in deine Exe linken (Projektoptionen) und mit JclDebug aus der JECI Code Library einen Stacktrace erzeugen um herauszufinden wo genau es knallt. Mit einkompilierten Debug-DCUs könntest du evtl. auch beim Debuggen schon genauer herausfinden wo das passiert, aber ich vermute die Quelltexte von QuickReport sind nicht dabei.
Der Spooler oder etwas in der Windows API hat damit jedenfalls definitiv nichts zu tun, da ein EStringListError nur in Delphi selbst ausgelöst werden kann.
|
|
baumina
      
Beiträge: 305
Erhaltene Danke: 61
Win 7
Delphi 10.2 Tokyo Enterprise
|
Verfasst: Mo 24.06.13 09:20
Auch ich kenne QuickReport nicht, aber interessant wäre ja im Formular F_Druck_Termine das Feld QRM_Termine. Gibt's da irgendein Ereignis wie OnPrint oder so, wo du dir mal Lines.Count anzeigen lassen kannst? Oder ein anderes Ereignis das pro Zeilendruck ausgelöst wird um da zu sehen warum er über den Index des von Lines hinausschießt?
Auch die Einstellungen in der .dfm von QRM_Termine wären interessant.
|
|
jasocul
      
Beiträge: 6393
Erhaltene Danke: 147
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Mo 24.06.13 10:36
Habe lange kein QR mehr in den Fingern gehabt ...
Kann es vielleicht sein, dass die Komponente im QR nicht mehrere Zeilen annimmt und deswegen den Fehler ausgibt? Hat die Komponente eine Multiline-Eigenschaft, die nicht gesetzt ist, o.ä.? Eine andere Idee ist noch die automatische Höhensteuerung der Komponente oder des Bandes (wenn auch unwahrscheinlich).
Notfalls die Komponente, die die Zeilen annehemen soll einfach nochmal rausschmeißen und neu drauf packen. Vielleicht auch mal ganz weg lassen. Könnte ja sein, dass du den Fehler an der falschen Stelle suchst.
|
|
thommy f 
      
Beiträge: 114
Windows 2K pro
Delphi 5 Enterprise
|
Verfasst: Mo 24.06.13 12:29
habe das Problem jetzt mit einer Datenbanktabelle und einer DBText-Komponente in einem Detail-Band gelöst. Danke für eure Hilfe.
Gruß:
Thommy
_________________ Der Mensch wächst mit seinen Aufgaben *** Wer kämpft kann verlieren, wer nicht kämpft hat schon verloren
|
|