Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   TXPrint (https://www.delphipraxis.net/183215-txprint.html)

Herman Thiel 20. Dez 2014 15:04

TXPrint
 
Ich verwende seit Jahren die Komponente TXPrint aus der Zeitschrift Toolbox. Bis jetzt hat sie beste Dienste geleistet. Jetzt will ich die Komponente mit XE6 verwenden. Die Komponente wird in der Tool-Palette angezeigt. Sobald ich aber die Komponente auf meine Form ziehe erscheint die Meldung: Listenindex außerhalb des gültigen Bereichs (-1).

Kann mir bitte wer weiter helfen??

sx2008 20. Dez 2014 15:29

AW: TXPrint
 
Hast du einen Standard-Drucker auf deinem Entwicklungsrechner angelegt?
Hast du einen Link auf den Sourcecode von TXPrint damit man mal einen Blick druaf werfen kann?

Herman Thiel 20. Dez 2014 15:36

AW: TXPrint
 
Es sind mehrere Drucker installiert und ein HP-Drucker ist als Standarddrucker definiert

Hier ein Link zum Quellcode der Komponente
https://www.dropbox.com/s/zzwmef2vpd...INTER.PAS?dl=0

sx2008 20. Dez 2014 20:24

AW: TXPrint
 
Es gibt verschiedene Wege den Bug aufzuspüren.
Du erstellst ein neues Projekt und kopierst die Unit XPRINTER.PAS in das Projektverzeichnis und fügst es zum Projekt hinzu.
Einen Button auf das Formular setzen und dann:
Delphi-Quellcode:
procedure TForm1.Button1OnClick(Sender:TObject);
var test : TXPrint;
begin
   test := TXPrint.Create(self);  // Breakpoint auf dieser Zeile setzen

   ShowMessage(test.Printers.Text);
   test.Free;
end;
Mit dem Debugger kannst du dann in TXPrint.Create() hineinsteppen und schauen an welcher Stelle die Exception ausgelöst wird.

Sollte so der Bug nicht reproduziert werden können, dann kann man die Komponente mit OutputDebugString() präparieren:
Delphi-Quellcode:
constructor TXPrint.Create;
begin
  inherited Create(AOwner);
  OutputDebugString('Create #0');
  DummyCreated:=false;
  UnrotatedFont:=0;
  fPrintersInstalled:=PrintersInstalled;
  OutputDebugString('Create #1');
  if fPrintersInstalled>0 then
  begin
    Canvas:=Printer.Canvas;
    Printer.PrinterIndex:=-1;
    OutputDebugString('Create #2');
  end
  else
  begin
    Canvas:=TCanvas.Create;
    DummyCreated:=true;
    OutputDebugString('Create #3');
  end;
  PrintOpened:=false;
  pLogPixelsX:=300;  { angenommene Werte als Default }
  pLogPixelsY:=300;
  k:=1;
  OutputDebugString('Create #4');
end;
Bei jeder Änderung am Sourcecode der Komponente muss man das Package neu kompilieren und installieren.
Die Debugmeldung sieht man im Ereignisprotokoll (Strg+Alt+V) oder man verwendet das Tool DebugView.
So kann man Schritt für Schritt das Problem immer mehr einkreisen.

Herman Thiel 21. Dez 2014 03:29

AW: TXPrint
 
Danke für den Tipp
Ich habe das kleine Programm geschrieben und im Debugmodus laufen lassen. Nach einigen Minuten auf der F7 Taste kam der Fehler
EStringListError in WindowsAPIs.inc

Die Komponente hat die Prozeduren Create, PrintersInstalled und Destroy fehlerfrei durchgeführt. Unmittelbar nach Beendigung der Destroy-proc kommt der Fehler ohne eine weitere Procedure aufzurufen.
Vielleicht kannst du mir noch weiterhelfen
Danke


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:49 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz