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 5. - změna výchozí tiskárny
tisk
26. března 2002, 00.00 | Tímto dílem začíná část seriálu pro pokročilejší čtenáře. Podíváme se na programové nastavení výchozí tiskárny ve Windows.
Tímto dílem začíná část seriálu, kterou bych si dovolil nazvat "pro pokročilé". V dnešním dílu se budeme zabývat otázkou, jak trvale změnit nastavení výchozí tiskárny ve Windows. Vlastně budeme dělat totéž, co uživatel může obvykle činit ve složce Tiskárny například pomocí položky "Nastavit jako výchozí" v kontextovém menu u každé tiskárny.
Vše zabalíme do jednoduché aplikace obsahující jen seznam tiskáren nainstalovaných na daném počítači a tlačítko na aktivaci změny výchozí tiskárny (viz obrázek).
Začneme tím, že při vytvoření aplikace seznam naplníme jmény instalovaných tiskáren a vybereme tu tiskárnu, která je nyní nastavena jako výchozí. K tomu nám zatím postačí objekt Printer, se kterým jsme se seznámili ve druhém dílu seriálu.
|
Teď se podíváme blíže na kód obsluhující stisk tlačítka. Zde nastavíme aktivní tiskárnu podle vlastnosti ItemIndex seznamu. Zrádné je, že ve Windows se výchozí tiskárna kvůli zpětné kompatibilitě nastavuje na dvou místech - v registrech a v souboru win.ini. Musíme se postarat o obojí.
Nejdříve registry, ty jsou jednodušší. Jméno výchozí tiskárny se v nich skrývá jako položka s názvem "Default" klíče "\System\CurrentControlSet\Control\Print\Printers" ve větvi HKEY_CURRENT_CONFIG. Jistě jste si všimli, že jména tiskáren poskytovaná vlastností Printer.Pinters jsou ve formátu "<tiskárna> on <port>" (např. "HP DeskJet 710C on LPT1:"). V registrech je použita jen část jména před "on". Na to samozřejmě při programování musíme myslet.
Se souborem win.ini máme situaci ještě o něco zapeklitější. Pro nás důležité jsou jeho sekce [Devices] a [windows]. V nich jsou (mimo jiné) položky podobné následujícím:
|
V sekci [windows] se, jak jste již jistě uhodli, nalézá ona výchozí tiskárna jakožto hodnota položky device. Při jejím nastavování opět použijeme verzi názvu tiskárny bez portu a oddělujícího "on". Hodnotu položky v sekci [Devices] s tímto názvem pak použijeme pro nastavení hodnoty položky device v sekci [windows]. Nakonec nesmíme zapomenout informovat ostatní aplikace o změně výchozí tiskárny, což učiníme rozesláním zprávy WM_WININICHANGE všem oknům v systému (využijeme přitom speciální konstanty HWND_BROADCAST, kterou doplníme místo obvyklého handle okna jako první parametr funkce SendMessage).
Zdá se to poněkud komplikované? Když jsem toto téma nastudovával, také se mi to tak jevilo. Lépe než z mého výkladu snad vše pochopíte přímo z kódu procedury:
|
Ukázkovou aplikaci si jako obvykle můžete stáhnout (i se zdrojovými kódy pro Delphi 3 a vyšší) a vyzkoušet si ji.
V příštím dílu si posvítíme na některé případy, kdy nám k zacházení s tiskárnou nepostačuje objekt TPrinter, a je nutné se uchýlit k použití Win 32 API.
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