Tisk v Delphi 7. - položky struktury TDeviceMode - Builder.cz - Informacni server o programovani

Odběr fotomagazínu

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ší.

dmOrientation

Nastavuje 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:

// nastavíme vodorovnou orientaci
with PDM^ do
begin
  dmFields := dmFiels or DM_ORIENTATION;
  dmOrientation := DMORIENT_LANDSCAPE;
end;

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).

dmPaperLength

Nastaví délku papíru. Jednotka je sice trochu podivná - desetiny milimetru - ale aspoň nemusíme znát rozlišení tiskárny.

Příklad:

// nastavíme délku papíru na 10 cm
with PDM^ do
begin
  dmFields := dmFiels or DM_PAPERLENGTH;
  dmPaperLength := 10 * 100;
end;

dmPaperWidth

Položka je analogická dmPaperLength, pouze určujeme šířku papíru.

dmPaperSize

Tato 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:

// nastavíme formát papíru na A4
with PDM^ do
begin
  dmFields := dmFiels or DM_PAPERSIZE;
  dmPaperSize := DMPAPER_A4;
end;

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.

dmScale

Umožň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:

// nastavíme velikost na 50 %
with PDM^ do
begin
  dmFields := dmFiels or DM_SCALE;
  dmScale := 50;
end;

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.

dmPrintQuality

Tato 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.

dmDuplex

Nastavová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ěr

Př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):

Tématické zařazení:

 » Rubriky  » Delphi  

 » Rubriky  » Windows  

 

 

 

Nejčtenější články
Nejlépe hodnocené články

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: