Verschillende documenttypen afdrukken vanuit Delphi

Als uw Delphi-toepassing op verschillende soorten bestanden moet werken, is een van de taken die u voor uw toepassing kunt hebben, de gebruiker van de toepassing in staat te stellen een bestand af te drukken, ongeacht het bestandstype.

De meeste documentgerichte toepassingen, zoals MS Word, MS Excel of Adobe, kunnen gemakkelijk documenten afdrukken die in dat programma zijn gemaakt. Microsoft Word slaat bijvoorbeeld de tekst die u schrijft op in documenten met de DOC-extensie. Aangezien Word bepaalt wat de "onbewerkte" inhoud van een .DOC-bestand is, weet het hoe .DOC-bestanden moeten worden afgedrukt. Hetzelfde geldt voor elk "bekend" bestandstype dat afdrukbare informatie bevat.

Wat als u verschillende soorten documenten / bestanden vanuit uw toepassing moet afdrukken? Weet u hoe u het bestand naar de printer kunt sturen om het correct af te drukken?

Afdrukken vanuit Delphi

We kunnen Windows vragen welke toepassing bijvoorbeeld een PDF-bestand kan afdrukken. Of, nog beter, we kunnen Windows vertellen, hier is een PDF-bestand, stuur het naar de bijbehorende applicatie / belast met het afdrukken van PDF-bestanden.

Open hiervoor Windows Verkenner, ga naar een map met enkele afdrukbare bestanden. Voor de meeste bestandstypen op uw systeem, wanneer u met de rechtermuisknop op een bestand in Windows Verkenner klikt, vindt u de opdracht "Afdrukken". Als u de opdracht Shell afdrukken uitvoert, wordt het bestand naar de standaardprinter verzonden. Nou, dat is precies wat we willen: voor een bestandstype een methode aanroepen die het bestand naar de bijbehorende toepassing verzendt voor afdrukken. De functie waarnaar we op zoek zijn, is de ShellExecute API-functie.

ShellExecute: Print / PrintTo

ShellExecute kan echter veel meer. ShellExecute kan worden gebruikt om een ​​toepassing te starten, Windows Verkenner te openen, een zoekopdracht te starten die begint in de opgegeven map en, wat het meest van belang is voor ons, het opgegeven bestand af te drukken.

Geef de printer op

Met de bovenstaande aanroep wordt een document "document.doc" in de root van de C-schijf naar de standaardprinter van Windows verzonden. ShellExecute gebruikt altijd de standaardprinter voor de "print" -actie. Wat als u naar een andere printer moet afdrukken, wat als u de gebruiker de mogelijkheid wilt geven de printer te wijzigen?

Het PrintTo Shell-commando

Voordat u kopieert en plakt: de algemene printervariabele (type TPrinter) die in alle Delphi-programma's beschikbaar is, kan worden gebruikt voor het beheren van afdrukken die door een toepassing worden uitgevoerd. De printer wordt gedefinieerd in de eenheid "printers", ShellExecute wordt gedefinieerd in de eenheid "Shellapi".

  1. Zet een TComboBox neer op een formulier. Noem het "cboPrinter". Zet Style op csDropDownLidt
  2. Zet de volgende twee regels in de OnCreate even-handler van het formulier:
     // hebben beschikbare printers in de keuzelijstcboPrinter.Items.Assign (printer.Printers);// selecteer vooraf de standaard / actieve printercboPrinter.ItemIndex: = printer.PrinterIndex;
gebruiken om elk documenttype naar een opgegeven printer af te drukken

Opmerking: sommige documenttypen hebben geen toepassing voor afdrukken. Bij sommige is de actie "printto" niet opgegeven.