Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!
Zadejte Vaši e-mailovou adresu:
Kamarád fotí rád?
Přihlas ho k odběru fotomagazínu!
Zadejte e-mailovou adresu kamaráda:
Delphi
Tisk v Delphi 7. - položky struktury TDeviceMode
tisk
19. dubna 2002, 00.00 | Dnes budeme pokračovat v minule načatém tématu tiskárna a Win32 API, a to tím, že si ukážeme význam nejdůležitějších položek struktury TDeviceMode.
V minulém dílu seriálu jsme si předvedli, jak získat ukazatel na strukturu TDeviceMode. S její pomocí můžeme nastavovat některé vlastnosti tiskárny, které nejsou dostupné pomocí standardního objektu TPrinter (ale i některé, které s jeho pomocí dostupné jsou).
V dalším textu budu předpokládat, že ukazatel na TDeviceMode máme uložený v proměnné PDM (mnemotechnika: Pointer to Device Mode), což odpovídá minulému dílu seriálu. Proto také k uvedení dnešních ukázek do praxe stačí jejich kód vložit na označené místo v proceduře představené právě v minulém dílu.
Teď už se ale podívejme na jednotlivé položky struktury TDeviceMode. Připomínám, že tu zdaleka neuvádím všechny, ale jen ty nejdůležitější.
dmOrientationNastavuje orientaci papíru v tiskárně, je ekvivalentní vlastnosti TPrinter.Orientation. Jako hodnotu lze nastavit jednu ze dvou konstant DMORIENT_PORTRAIT a DMORIENT_LANDSCAPE, které znamenají svislou resp. vodorovnou orientaci papíru v tiskárně.
Příklad:
|
V příkladu je vidět, že kromě nastavení položky je nutné (bitově) přičíst konstantu DM_ORIENTATION k položce dmField, aby Windows věděly, že jsme změnili položku dmOrientation. Bitové přičítání je použito kvůli "čistotě", normální by fungovalo stejně dobře (pokud by výsledek nezasáhl až do znaménkového bitu).
dmPaperLengthNastaví délku papíru. Jednotka je sice trochu podivná - desetiny milimetru - ale aspoň nemusíme znát rozlišení tiskárny.
Příklad:
|
dmPaperWidth
Položka je analogická dmPaperLength, pouze určujeme šířku papíru.
dmPaperSizeTato položka představuje alternativní způsob zadání velikosti papíru výběrem z nekolika obvyklých velikostí. Ty zahrnují především v našich končinách důležité formáty A3-A5 a B4-B5 a také spoustu dalších formátů, povětšinou užitečných v anglosaských zemích. Hodnotou položky je konstanta, která formátu odpovídá. Kompletní seznam možných konstant tu nebudu vypisovat (je poněkud delší), najdete ho v nápovědě k Win32 API.
Příklad:
|
Položky dmPaperLength a dmPaperWidth "konkurují" dmPaperSize v tom smyslu, že nastavují různým způsobem stejnou věc (rozměry papíru). Můžete se ptát, co se stane v případě, že velikost nastavíme oběma způsoby najednou? Odpověď je, že priorita dmPaperWidth a dmPaperHeight je vyšší a "přebije" dmPaperSize.
dmScaleUmožňuje zmenšit nebo zvětšit výsledný výstup na tiskárně. Jako hodnota se udává koeficient změny velikosti v procentech.
Příklad:
|
dmColor
Čas od času se hodí možnost černobílého tiku. Toho dosáhneme, když do položky dmColor dosadíme hodnotu DMCOLOR_MONOCHROME; opak (barevný tisk) způsobíme dosazením konstanty DMCOLOR_COLOR.
Příklady použití si odteď dovolím vynechávat, protože jsou analogické předchozím a nepřinášejí nic nového.
dmPrintQualityTato položka nastavuje kvalitu tisku. Co přesně to znamená, určuje ovladač tiskárny. Většinou to bývá změna rozlišení tiskárny, ale ovladač může tuto volbu i ignorovat. K dispozici jsou čtyři konstanty (seřazené podle kvality od nejlepší po nejhorší): DMRES_HIGH, DMRES_MEDIUM, DMRES_LOW, DMRES_DRAFT.
dmDuplexNastavováním této položky docílíte jednostranného nebo oboustranného tisku (tzv. duplexu) - pokud ho tiskárna umožňuje. Možné hodnoty jsou DMDUP_SIMPLEX (jednostranný tisk), DMDUP_HORIZONTAL (oboustranný tisk, stránky se obrací vodorovně), DMDUP_VERTICAL (osboustranný tisk, stránky se obrací svisle).
Poznámka: V nápovědě k Win32 API není na rozdíl od ostatních položek v tomto případě vůbec popsáno, co jednotlivé konstanty znamenají; ani na MSDN o tom není zmínka. Microsoft by se měl stydět, že dokumentaci k této části jeho API jsem nakonec našel s pomocí Googlu úplně jinde.
ZávěrPředpokládám, ze vás exkurze do světa Win32 API v posledních dvou dílech už poněkud unavila, takže příště se podíváme na něco diametrálně odlišného - představíme si komponentu na generování náhledu tisknutých stránek.
Obsah seriálu (více o seriálu):
- Tisk v Delphi 1. - obyčejný text
- Tisk v Delphi 2. - grafika
- Tisk v Delphi 3. - standardní dialogy
- Tisk v Delphi 4. - převod délkových jednotek a ladění tisku
- Tisk v Delphi 5. - změna výchozí tiskárny
- Tisk v Delphi 6. - trocha API
- Tisk v Delphi 7. - položky struktury TDeviceMode
- Tisk v Delphi 8. - náhled
-
25. listopadu 2012
-
30. srpna 2002
-
10. října 2002
-
4. listopadu 2002
-
12. září 2002
-
25. listopadu 2012
-
28. července 1998
-
31. července 1998
-
28. srpna 1998
-
6. prosince 2000
-
27. prosince 2007
-
4. května 2007