PrintPreview

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
hbr
Beiträge: 321
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)

PrintPreview

Beitrag von hbr »

Hallo,
in der Version 1.44 und 1.60 funktioniert der IpHtmlPanel1.PrintPreview nicht mehr.
.PrintPreview ist in den Poperties nicht mehr vorhanden.
Fehlermeldung 'Error: identifier idents no member "PrintPreview" '
Rufe ich mein Projekt mit 1.26 auf, funktioniert es.
Was kann ich tun? damit IpHtmlPanel1.PrintPreview bekannt wird?

MFG

wp_xyz
Beiträge: 5153
Registriert: Fr 8. Apr 2011, 09:01

Re: PrintPreview

Beitrag von wp_xyz »

Du musst "Html_Print" definieren, am besten in ipdefine.inc, in dem für Lazarus zuständigen Abschnitt, und dann das Package neu kompilieren:

Code: Alles auswählen

 
{$IFDEF LCL}
{$DEFINE IP_LAZARUS}
{$ENDIF}
 
 
{$IFDEF IP_LAZARUS}
 
{$MODE DELPHI}{$H+}
 
{$DEFINE VERSION7}          { Delphi 7.0 or higher }
{$DEFINE VERSION4}
{$DEFINE VERSION5}
{$DEFINE Version6OrHigher}
{$DEFINE Version7OrHigher}
{$DEFINE Html_Print}         // <--- neu
{$MODESWITCH NESTEDPROCVARS}
 
{$ELSE}       

hbr
Beiträge: 321
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: PrintPreview

Beitrag von hbr »

Danke, hatte ich dann auch gefunden.

Leider Funktioniert im "IpHtmlPanel" in V1.6 <p align="center"> nicht mehr,
woran könnte das liegen? Alles wird linksbündig dargestellt.
An IpHtml wahrscheinlich nicht, weil ich diese von anderen Versionen schon ausprobiert habe.

Wäre für jede Hilfe Dankbar.

wp_xyz
Beiträge: 5153
Registriert: Fr 8. Apr 2011, 09:01

Re: PrintPreview

Beitrag von wp_xyz »

Da wäre ich nicht so sicher... Wenn ich bei einem der Beispielprojekte den body-Inhalt mit <p align="center"> umschließe, zeigt Firefox die Test-Datei zentriert an, aber bei iPro tut sich gar nichts. Der Scanner scheint das "align" zu erkennen, nur wird es bei der Text-Positionierung nicht angewendet. Kannst du näher spezifizieren, bei welcher Version das "align" schon funktioniert hat? Ich fürchte, das wird wieder eine längere Debug-Session...

hbr
Beiträge: 321
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: PrintPreview

Beitrag von hbr »

Also Funktionieren tut es bei V 1.2.6 u. V 1.4.4
andere habe ich nicht installiert.

wp_xyz
Beiträge: 5153
Registriert: Fr 8. Apr 2011, 09:01

Re: PrintPreview

Beitrag von wp_xyz »

Fehler gefunden. Ist in Trunk behoben und für v1.6.2 angemeldet.

Der Fehler entstand durch eine ältere Code-Änderung (von mir), um das nicht-funktionierende "align"-Attribut innerhalb von Tabellenzellen zu fixen. Ich habe den vorherigen Zustand wieder hergestellt. Aber seltsamerweise funktioniert das "align" in Tabellen jetzt immer noch... Ich wäre dir dankbar, wenn du die Augen offen halten würdest, ob das "align" im Zusammenhang mit Tabellen vielleicht doch nicht irgendwo Probleme macht.

hbr
Beiträge: 321
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: PrintPreview

Beitrag von hbr »

Hallo, Super,
Nur was ist Trunk,
Was muss ich tu beziehungsweise ändern oder Herunterladen ? Vor allen Dingen wo?

Danke im vorraus.

hbr
Beiträge: 321
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: PrintPreview

Beitrag von hbr »

wp_xyz hat geschrieben: ..... wenn du die Augen offen halten würdest, ob das "align" im Zusammenhang mit Tabellen vielleicht doch nicht irgendwo Probleme macht.
OK in der Tat ist da wieder was.
Es geht mal wieder um die Darstellung beziehungsweise beim drucken, wo einzelne Sätze doppelt gedruckt werden.
Ich habe die Patches von damals behalten um sie bei neueren Versionen wieder einsetzen zu können.
Nur wenn der Quelltext sich ändert habe ich keine Chance diese zu übernehmen.
Hier der Link vom Thema > http://www.lazarusforum.de/viewtopic.php?f=55&t=7745
Ich benutze viel Text(Groß, klein) gemischt mit Bildern und Tabellen,
wenn die Seiten voll sind und über mehrere Seiten gehen, passiert dieser Fehler.
Bei Mehreren Seiten werden Sätze am Anfang beziehungsweise am Ende im Preview HALB dargestellt, was eventuell dadurch ein Doppeldruck zur folge hat.

Aus diesem Grund verwende ich nach wie vor V1.26 weil es mir nicht gelingt den gepatchten Zustand dvon zu übernehmen.

wp_xyz
Beiträge: 5153
Registriert: Fr 8. Apr 2011, 09:01

Re: PrintPreview

Beitrag von wp_xyz »

Ich habe den genannten Thread überflogen, kann aber nicht sagen, alles im Detail verstanden zu haben. Das Problem ist dass
(1) die letzte Zeile einer Seite auf dem nächsten Blatt wiederholt wird?
(2) die Qualität in der Druckverschau schlecht ist?

Offenbar hast du schon eine Anzahl von Patches, die aber mit jeder Versionsänderung hinfällig sind. Wenn du diese privat für dich behältst, auch wenn sie in einem öffentlichen Forum diskutiert worden sind, gibt es keine Chance, dass sie in den offiziellen Quellcodes übernommen werden. Du musst sie im Bugtracker hochladen, damit sich jemand darum kümmert und einpflegt.

Nachdem ich mich schon mal mit der Komponente befasst habe und Schreibzugriff auf den Components-Zweig des Lazarus-Codes habe, können wir die Sache vereinfachen: Lade hier einfach alle Änderungen hoch, die deiner Erfahrung nötig sind. Gib an, welchen Fehler sie beheben, und hänge ein Demoprogramm an, an dem ich den Fehler sehen kann und ob er nach dem Patch behoben ist (bzw. verlinke das aus den entsprechenden Forumsbeitrag). Ich werde das testen und in den offiziellen Quellcode aufnehmen. Falls der Patch einen Fehler behebt, werde ich mich auch um die Aufnahme in Lazarus 1.6.2 kümmern, ansonsten bleibt die Korrektur im Trunk und wird erst mit Laz 1.8 (bzw 2.0) offiziell ins Produkt aufgenommen.

Trunk ist die Entwicklerversion, sie kann über svn heruntergeladen werden (http://wiki.freepascal.org/Installing_L ... le_release)

Alternativ findest du die Dateien auch per Browser unter http://svn.freepascal.org/cgi-bin/viewv ... ot=lazarus. Ich weiß aber nicht, ob das mit einem alten Lazarus funktioniert.

hbr
Beiträge: 321
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: PrintPreview

Beitrag von hbr »

wp_xyz hat geschrieben:Ich habe den genannten Thread überflogen, kann aber nicht sagen, alles im Detail verstanden zu haben. Das Problem ist dass
(1) die letzte Zeile einer Seite auf dem nächsten Blatt wiederholt wird?
(2) die Qualität in der Druckverschau schlecht ist?

Trunk ist die Entwicklerversion, sie kann über svn heruntergeladen werden (http://wiki.freepascal.org/Installing_L ... le_release)

Alternativ findest du die Dateien auch per Browser unter http://svn.freepascal.org/cgi-bin/viewv ... ot=lazarus. Ich weiß aber nicht, ob das mit einem alten Lazarus funktioniert.
(zu 1) v 1.26

Code: Alles auswählen

 Index: components/turbopower_ipro/iphtml.pas
===================================================================
--- components/turbopower_ipro/iphtml.pas	(revision 44779)
+++ components/turbopower_ipro/iphtml.pas	(working copy)
@@ -854,6 +854,7 @@
   TINTARRGROWFACTOR = 64;
   DEFAULT_PRINTMARGIN = 0.5; {inches}                                  {!!.10}
   FONTSIZESVALUSARRAY : array[0..6] of integer = (8,10,12,14,18,24,36);
+  PrintModus : Boolean = False;                             //Patch
 
 type
   {$IFDEF IP_LAZARUS}
@@ -10246,7 +10247,8 @@
           {$ENDIF}
             aCanvas.Brush.Style := bsClear;
           //debugln(['TIpHtmlNodeBlock.RenderQueue ',CurWord.AnsiWord]);
-          Owner.PageRectToScreen(CurWord.WordRect2, R);
+          if (not PrintModus) or (R.Bottom < Owner.PageViewRect.Bottom) then   //Patch
+            Owner.PageRectToScreen(CurWord.WordRect2, R);
           {$IFDEF IP_LAZARUS}
           if CurWord.Owner.FParentNode = CurTabFocus then
           begin
@@ -17767,6 +17769,7 @@
   if (Hyper <> nil) then begin
     BeginPrint;                                                        {!!.10}
     Printer.BeginDoc;
+    PrintModus := True;                                                //Patch
     try
       (*
       ScaleBitmaps := True;                                            {!!.02}
@@ -17791,6 +17794,7 @@
         Printer.Abort;
       {InvalidateSize;}                                                {!!.10}
       EndPrint;                                                        {!!.10}
+      PrintModus := False;                                             //Patch
     end;
   end;
 end; 
(zu 2) verbessert die Anzeige im Preview

Code: Alles auswählen

procedure TIpHtmlNodeBlock.RenderQueue; 
...
          if CurWord.AnsiWord <> NAnchorChar then //JMN
               aCanvas.TextRect(R, P.x, P.y, NoBreakToSpace(CurWord.AnsiWord));
...

wp_xyz
Beiträge: 5153
Registriert: Fr 8. Apr 2011, 09:01

Re: PrintPreview

Beitrag von wp_xyz »

Kannst du noch eine html-Datei angeben (link oder upload), mit der ich testen kann, ob die letzte Zeile auf dem nächsten Blatt nochmals kommt.

Es ist relativ schwierig, die Stellen im aktuellen Code zu finden, weil inzwischen immense Änderungen waren.

Die globale Variable PrintModus gefällt mir nicht: denn wenn auf dem Formular mehrere iPro-Panels sind und eines gedruckt wird, was macht dann das andere, wenn z.B. ein anderes Fenster drüber gezogen wird und das Panel sich neu zeichnen muss?

[EDIT]
Den Code zu (2) finde ich nicht, poste bitte die komplette Prozedur.

wp_xyz
Beiträge: 5153
Registriert: Fr 8. Apr 2011, 09:01

Re: PrintPreview

Beitrag von wp_xyz »

Hab mir das Drucken etwas näher angesehen, genauer: die Druckvorschau (weil ich kein Papier opfern wollte): War das bei dir auch so, dass während der Druckvorschau der Inhalt des IPro-Fensters, das gedruckt wird, verschwindet? Ich sehe das mit Laz Trunk und auch mit einem uralten Laz 1.20. Das ist glaube ich ein kapitaler Bock, weil während des Druckens globale Variablen gesetzt werden, die aber auch bei der Bildschirmausgabe benötigt werden. Kein Wunder, dass die Druckausgabe per Define ausgeschaltet ist! Weiß nicht, ob ich das hinbekomme... Hat jemand die Original-Delphi Komponente im Einsatz? Macht die auch sowas?

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: PrintPreview

Beitrag von Michl »

@hbr: Offtopic: Darf man fragen, wofür du genau ein IpHtmlPanel verwendest? Zwischen den Zeilen gelesen, käme möglicherweise LazReport für die Aufgabe in Betracht. Falls es zwingend HTML-Code sein muss, könnte man auch fpCEF nutzen (ist aber vermutlich mit Kanonen auf Spatzen geschossen).

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

wp_xyz
Beiträge: 5153
Registriert: Fr 8. Apr 2011, 09:01

Re: PrintPreview

Beitrag von wp_xyz »

Eine Vielzahl von Problemen sind inzwischen in der Lazarus-Trunk-Version behoben und für Version 1.6.2 angemeldet. Damit sollten das Drucken und die Druckvorschau besser nutzbar sein (abgesehen vom flatterigen oberen Seitenrand).

Antworten