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.