Hallo Gemeinde,
ich sitze im Moment an einer kleinen Datenbankanwendung. Diese Datenbankanwendung hat einige DBGrids zu bieten und diese sollen auf einem Drucker ausgegeben werden. So weit so gut. Ich habe eine Funktion geschrieben, die mir den Inhalt des DBGrids in HTML-Sourcecode umwandelt. Im Browser sehen die ausgegebenen Tabellen auch genau so aus, wie ich mir das vorgestellt habe, allerdings beim Drucken leider nicht.
Ich habe immer wieder die folgenden zwei Funktionen zum Drucken der TWebBrowser Komponente gefunden:
Nummer 1:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34:
| procedure PrintWebBrowser(WB: TWebBrowser); var OleCommandTarget: IOleCommandTarget; Command: TOleCmd; Success: HResult; begin if not Assigned(WB) then exit; if not Assigned(WB.Document) then exit;
WB.Document.QueryInterface(IOleCommandTarget, OleCommandTarget);
Command.cmdID:= OLECMDID_PRINT; if OleCommandTarget.QueryStatus(Nil, 1, @Command, Nil) <> S_OK then begin ShowMessage('Drucken nicht möglich'); exit; end;
if (Command.cmdf and OLECMDF_ENABLED) <> 0 then begin Success:= OleCommandTarget.Exec(Nil, OLECMDID_PRINT, OLECMDEXECOPT_PROMPTUSER, EmptyParam, EmptyParam); case Success of S_OK: ; OLECMDERR_E_CANCELED: ShowMessage('Abbruch durch User'); else ShowMessage('Fehler!!!'); end; end else begin ShowMessage('Drucken nicht möglich'); exit; end; end; |
und Nummer 2:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure PrintWebBrowser(WB: TWebBrowser); var HTMLDoc: IHTMLDocument2; HTMLWnd: IHTMLWindow2; HTMLWindow3: IHTMLWindow3; begin HTMLDoc := WB.Document as IHTMLDocument2; if HTMLDoc = nil then raise Exception.Create('Konnte TWebBrowser nicht nach IHTMLDocument2 konvertieren!'); HTMLWnd := HTMLDoc.parentWindow; HTMLWindow3 := HTMLWnd as IHTMLWindow3; HTMLWindow3.print; end; |
Das Problem ist nun, dass diese Funktionen zwar wunderbar drucken, aber nur eine Seite. In meiner Demo-Tabelle gibt es so viele Spalten, dass alle gar nicht auf eine Seite passen (nicht mal im Querformat). Also ist die Ausgabe auf dem Drucker leider stehts rechts abgeschnitten. Da ich dieses Vorgehen (Drucken mit einer der beiden o.g. Funktionen) so oft im Netz wiederfinden konnte, wundere ich mich doch sehr stark, dass ich nirgendwo etwas zu diesem Problem finden konnte. Daher wende ich mich nun hoffnungsvoll an euch und hoffe, dass ihr mir noch den einen oder anderen guten Ratschlag geben könnt
Danke schon mal für eure Bemühungen.
...
Mir fiel grade auf, dass ich vergessen hatte zu sagen, dass ich natürlich auch gerne bereit bin auf eine andere Methode zum Drucken der DBGrids zurück zu greifen, allerdings habe ich z.b. mit RAVE-Reports das selbe Problem gehabt
Wenn einer von euch also eine Lösung kennen sollte, die nicht auf dem basiert, wie ich es im Moment löse, würde ich mich natürlich trotzdem freuen, wenn er bzw. sie es poste würde
