Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi HTML Datei drucken (https://www.delphipraxis.net/172507-html-datei-drucken.html)

Metallicwar 8. Jan 2013 07:57

HTML Datei drucken
 
Moin,
ich möchte durch Doppelklick auf eine Exe automatisch eine HTML Datei drucken.
Im OnCreate meiner Form rufe ich folgendes auf:
Delphi-Quellcode:
var
  Pfad: String;
begin
  Pfad := ExtractFilePath(paramstr(0));
  ShellExecute(Handle,'Print',PChar(Pfad+'index.html'),'','',0);
Meine Frage ist nun, wie ich die Druckerauswahl unterdrucken kann und die Datei direkt am Standarddrucker ausgedruckt wird?

MfG David

MeierZwoo 8. Jan 2013 09:26

AW: HTML Datei drucken
 
Den Druckdialog eben nicht benutzen, sondern ohne Druckdialog und RAW-Druck zeilenweise an den Printer drucken. Der Standarddrucker hat den Printer-Index -1.

Oder willst Du die HTML nicht als Ascii-Datei drucken sondern eine erzeugte, gestaltete HTML-Seite?

Metallicwar 8. Jan 2013 09:44

AW: HTML Datei drucken
 
Ich will die gestaltete HTML Seite drucken, nicht den Quelltext
und ich krieg diese Druckerauswahl einfach nicht weg ...

MfG David

MeierZwoo 8. Jan 2013 10:06

AW: HTML Datei drucken
 
Der Druckdialog wird von dem Programm aufgerufen, mit dem *.HTML verknüpft ist und welches du mit ShellExecute startest.

Wenn es nicht möglich ist, in den Optionen dieses Programmes den Druckdialog abzuschalten und sofortigen Druck zum Standard-Drucker einzustellen, musst du eben die Seitengestaltung über HTML-units intern erledigen und dann normal (intern) drucken.

Wobei es eh ziemlich willkürliche Ergebnisse liefert, was du da erzeugt hast; der Standarddrucker kann auf sonst etwas gesetzt sein, die HTML-Zuordnung auf ein anderes Programm verweien ...

Metallicwar 8. Jan 2013 10:28

AW: HTML Datei drucken
 
gibts vll ne ganz andere Möglichkeit, über ein PrintDialog oder über ein TWebbrowser??

Muss diese Druckauswahl unbedingt rauskriegen :evil:

Bummi 8. Jan 2013 11:29

AW: HTML Datei drucken
 
Du kannst es versuchen mit

Delphi-Quellcode:
ShellExecute( 0, 'printto', PChar(DocumentName), PChar(PrinterName), nil,SW_HIDE);


res := ShellExecute(
  0,
  'printto',
  //PChar('C:\temp\test.htm'), >> funktioniert bei mir nicht
  PChar('C:\temp\test.xls'),   // funktioniert
  PChar('PDF24'),
  nil,
  SW_HIDE
);

Metallicwar 8. Jan 2013 12:23

AW: HTML Datei drucken
 
Hat bei mir auch nicht funktioniert ...

Will's jetzt mit Hilfe des TWebbrowser lösen:

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
  Pfad: String;
begin
  Pfad := ExtractFilePath(paramstr(0));
  WebBrowser1.Navigate(Pfad+'index.html');
end;

procedure TForm1.WebBrowser1DocumentComplete(ASender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
begin
  if ParamCount > 0 then
    webbrowser1.ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_PROMPTUSER)
  else
    WebBrowser1.ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER);
end;

Funktioniert auch, nur will er jetzt garnicht mehr aufhören zu drucken. Ist eine andere Procedure zu verwenden, oder was läuft hier falsch?


Nachtrag: Mir ist aufgefallen, dass er die HTML Seite im Webbrowser irgendwie ständig aktualisiert und deshalb auch ständig erneut druckt ... jemand ne Idee weshalb?!?
Problem ist folgendes:
Die HTML Seite wird alle 30 Sekunden neu geladen ... Problem hierbei ist, ich krieg die HTML Datei nur übergeben, heißt ich darf nichts an ihr verändern .
Code:
<HTML><HEAD><TITLE>ZMI - Statustableau</TITLE><meta http-equiv="refresh" content="30">

Metallicwar 8. Jan 2013 14:28

AW: HTML Datei drucken
 
Hab's folgendermaßen gelöst:
Kopier mir zunächst die HTML Datei, lösch den Zeilenabschnitt mit dem Refresh raus und ruf dann die HMTL Seite über den Webbrowser auf, dann funktionierts, wie gewünscht.

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
  Pfad: String;
  strlst: TStringList;
begin
  strlst := TStringList.Create;
  Pfad := ExtractFilePath(paramstr(0));
  try
    CopyFile(PChar(Pfad+'index.html'), PChar(Pfad+'index_print.html'),False);
    strlst.LoadFromFile(Pfad+'index_print.html');
    strlst.Text := StringReplace(strlst.Text, '<meta http-equiv="refresh" content="30">', '', [rfReplaceAll]);
    strlst.SaveToFile(Pfad+'index_print.html');
  finally
    strlst.Free;
  end;
  WebBrowser1.Navigate(Pfad+'index_print.html');
end;


procedure TForm1.WebBrowser1DocumentComplete(ASender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
begin
  if ParamCount > 0 then
    Webbrowser1.ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_PROMPTUSER)
  else
    WebBrowser1.ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER);
end;
Danke für eure Mithilfe !!!

MfG David


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:28 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz