Bug?
Re: Bug?
Ich glaube, das bringt so nix.
Wenn man mal die Schritte nachvollzieht, versucht das IPHtmlPanel eine Druckvorschau (mit aktueller Seitenzahl etc.) mit dem aktuell gesetzten Drucker zu erstellen. Das Ganze geschieht in der Procedure TIpHtmlInternalPanel.ResetPrint mittels Printer.BeginDoc. Dort wird zum Schluss der Zugriff auf den Drucker mit Printer.Abort hart getrennt. Vermutlich wird deshalb ein Druckauftrag bei Dir ausgelöst (bei mir ist das auf jeden Fall mit dem XPS Document Writer). Dies ist aber vermutlich nicht die Ursache des Problems, dass der Druckauftrag dann später nicht ausgeführt wird.
Wenn man mal die Schritte nachvollzieht, versucht das IPHtmlPanel eine Druckvorschau (mit aktueller Seitenzahl etc.) mit dem aktuell gesetzten Drucker zu erstellen. Das Ganze geschieht in der Procedure TIpHtmlInternalPanel.ResetPrint mittels Printer.BeginDoc. Dort wird zum Schluss der Zugriff auf den Drucker mit Printer.Abort hart getrennt. Vermutlich wird deshalb ein Druckauftrag bei Dir ausgelöst (bei mir ist das auf jeden Fall mit dem XPS Document Writer). Dies ist aber vermutlich nicht die Ursache des Problems, dass der Druckauftrag dann später nicht ausgeführt wird.
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
Re: Bug?
Kannst du mal das einfügen?!
Und sagen, ob der entsprechende Drucker druckt?!
Code: Alles auswählen
procedure TIpHtmlInternalPanel.PrintPages(FromPage, ToPage: Integer);
var
CR : TRect;
i : Integer;
begin
Printer.BeginDoc;
Printer.Canvas.Pen.Color := 0;
Printer.Canvas.Font.Name := 'Arial';
Printer.Canvas.Font.Size := 16;
for i := 1 to 10 do
Printer.Canvas.TextRect(Rect(200, i*200, 1000, (i+1)*200), 200, i*200, 'Das ist ein Test '+IntToStr(i));
Printer.EndDoc;
{ if (Hyper <> nil) then begin
BeginPrint;
Printer.BeginDoc;
try
CR := Rect(0, 0, PrintWidth, 0);
for i := FromPage to ToPage do begin
CR.Top := (i - 1) * PrintHeight;
CR.Bottom := Cr.Top + PrintHeight;
Hyper.Render(Printer.Canvas, CR, False, PrintTopLeft);
if i < ToPage then
Printer.NewPage;
Printed := True;
end;
finally
if Printed then
Printer.EndDoc
else
Printer.Abort;
EndPrint;
end;
end;}
end;
Und sagen, ob der entsprechende Drucker druckt?!
Nein, das bestätigt meine Aussage von 2 Posts weiter oben.hbr hat geschrieben:Das kuriose ist ja auch,
das ein Druckauftrag von mehreren Seiten mit nur einer Seite erstellt wird und beim auslösen verschwindet dieser.
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
Re: Bug?
OK, noch ein Versuch! Für meinen "XPS Document Writer - Drucker" reicht ein einfaches "Refresh", um den den Druckauftrag durchzuführen. K.A., ob das auch bei dir reicht?!:
Code: Alles auswählen
procedure TIpHtmlInternalPanel.PrintPages(FromPage, ToPage: Integer);
var
CR : TRect;
i : Integer;
begin
if (Hyper <> nil) then begin
Printer.Refresh; //<-- hier
BeginPrint;
Printer.BeginDoc;
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
-
- Beiträge: 285
- Registriert: Mi 20. Feb 2013, 10:30
- OS, Lazarus, FPC: Win (L 2.2.4 FPC 3.2.2)
- CPU-Target: 32/64,ARM(RPi)
Re: Bug?
Hall Michl,
Du bist ne Wucht!
Das mit dem Printer.Refresh hat voll funktioniert.
Vielen Vielen Dank für Deine Mühe.
Nun habe ich ein weiteres Problem welches ich nicht lösen kann.
Das PrintPreview eliminiert farbigen Text im Ausdruck ist dann nur Schwarzer Text.
Hast Du hierfür auch eine Lösung parat?
Gruß
Du bist ne Wucht!
Das mit dem Printer.Refresh hat voll funktioniert.
Vielen Vielen Dank für Deine Mühe.
Nun habe ich ein weiteres Problem welches ich nicht lösen kann.
Das PrintPreview eliminiert farbigen Text im Ausdruck ist dann nur Schwarzer Text.
Hast Du hierfür auch eine Lösung parat?
Gruß
Re: Bug?
Das freut mich! Und ist gut zu wissen. Dann werde ich das demnächst im Bugtracker mal so hochladen.hbr hat geschrieben:Das mit dem Printer.Refresh hat voll funktioniert.
So aus der Kalten, kann ich keine Vermutung abgeben. Ich kann morgen gern mal in den Code schauen, aber keine Ahnung, ob ich dir dann etwas sagen kann bzw. ob das überhaupt implementiert ist.hbr hat geschrieben:Das PrintPreview eliminiert farbigen Text im Ausdruck ist dann nur Schwarzer Text.
Hast Du hierfür auch eine Lösung parat?
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
Re: Bug?
Hatte leider erst jetzt Zeit.
Wenn du BWPrinter := False (bei mir die Zeile 13003) in der Procedure TIpHtmlInternalPanel.ResetPrint der Unit IpHtml ersetzt, sollte das mit dem bunten Ausdrucken funktionieren:
Bei mir läuft der Test, ob ein Schwarzweißdrucker anliegt bei allen Druckern schief (obwohl dieser unter Windows funktionieren hätte sollen).hbr hat geschrieben:Das PrintPreview eliminiert farbigen Text im Ausdruck ist dann nur Schwarzer Text.
Hast Du hierfür auch eine Lösung parat?
Wenn du BWPrinter := False (bei mir die Zeile 13003) in der Procedure TIpHtmlInternalPanel.ResetPrint der Unit IpHtml ersetzt, sollte das mit dem bunten Ausdrucken funktionieren:
Code: Alles auswählen
procedure TIpHtmlInternalPanel.ResetPrint;
...
GetRelativeAspect(Printer.Canvas.Handle);
{$IF DEFINED(IP_LAZARUS) AND NOT DEFINED(WINDOWS)}
// this test looks weird, according to most references consulted, the number
// of colors in a display is NColors = 1 shl (bitsPerPixel * Planes). A mono
// printer should have 2 colors, somebody else needs to clarify.
BWPrinter := false;
{$ELSE}
BWPrinter := GetDeviceCaps(Printer.Canvas.Handle, PLANES) = 1; //<-- hier einfach auf False setzen
{$ENDIF}
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
Re: Bug?
Besser ist es, die Zeile mitzu ersetzen, wobei NUMCOLORS = 24 noch definiert werden muss. Zumindestens funktioniert das bei meinen Druckern.
Code: Alles auswählen
BWPrinter := GetDeviceCaps(Printer.Canvas.Handle, NUMCOLORS) = 2;
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
-
- Beiträge: 285
- Registriert: Mi 20. Feb 2013, 10:30
- OS, Lazarus, FPC: Win (L 2.2.4 FPC 3.2.2)
- CPU-Target: 32/64,ARM(RPi)
Re: Bug?
Oh Super Danke, jetzt ist es fast perfekt.
Heißt das man muss anstelle NUMCOLORS die 24 einsetzen?
Bei mir steht PLANES, definiert in LCLTYPE- Planes = 14.
Mir ist auch noch aufgefallen, dass man in der Druckerauswahl den Druckbereich gar nicht auswählen kann,
ist das etwa nicht implementiert?
Heißt das man muss anstelle NUMCOLORS die 24 einsetzen?
Bei mir steht PLANES, definiert in LCLTYPE- Planes = 14.
Mir ist auch noch aufgefallen, dass man in der Druckerauswahl den Druckbereich gar nicht auswählen kann,
ist das etwa nicht implementiert?
Re: Bug?
NUMCOLORS ist eine Konstante mit einem Wert 24. Benutzt du die Lazarus-Trunc-Version sind beide Probleme behoben (ich hatte entsprechende Patches hochgeladen, die auch recht schnell implementiert wurden). Benutzt du ein Release, müsstest du selber NUMCOLORS irgendwo definieren oder nimmst gleich "24" statt "NUMCOLORS".hbr hat geschrieben:Heißt das man muss anstelle NUMCOLORS die 24 einsetzen?
Bei mir steht PLANES, definiert in LCLTYPE- Planes = 14.
K.A., leider habe ich zur Zeit keine Zeit um nachzusehen, was du meinst. Generell steckt in der Druckkomponente schon etwas Arbeit, ausgereift scheint sie mir nicht.hbr hat geschrieben:Mir ist auch noch aufgefallen, dass man in der Druckerauswahl den Druckbereich gar nicht auswählen kann,
ist das etwa nicht implementiert?
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;