Autor Beitrag
DerAndy
Hält's aus hier
Beiträge: 14

WinXP, Linux (Debian Sarge)
D5 Pro, D6 Pers, D7 Ent, D2005 Pers, Free-Pascal+Lazarus
BeitragVerfasst: Mi 03.09.08 16:25 
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:

ausblenden volle Höhe Delphi-Quelltext
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(Nil1, @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:

ausblenden 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 :)