Tisk v Delphi 8. - náhled - 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 8. - náhled

tisk

15. května 2002, 00.00 | V dnešní - posledním - dílu seriálu o tisku v Delphi si představíme komponentu, díky níž můžete snadno přidat do své aplikace funkci náhledu.

Pokud budete do svého programu implementovat funkci tisku, stojí za to se zamyslet, zda pro zvýšení pohodlí uživatele nepřidat i funkci náhledu. Původně jsem chtěl věnovat jeden až dva díly seriálu tomu, jak si takovou funkci svépomocí napsat, ale pak jsem narazil na komponentu PrintPreview a můj plán se rázem změnil. Tato komponenta vám umožní náhled tisku do vaší aplikace velice jednoduše přidat několika kliknutími a ušetřit si tak spoustu práce. Její autor spam_email('.com', '@', 'delphiarea', 'kambiz'); ji dává k dispozici jako freeware, ale k dispozici máte i zdrojové kódy. Nejnovější verze komponenty (4.0) funguje s verzemi Delphi 3, 4, 5, 6. O C++ Builderu se autor nezmiňuje, ale považuji za značně pravděpodobné, že v jeho posledních verzích bude komponenta fungovat také; nicméně jsem to netestoval.

Co PrintPreview umí?

Po jejím přidání na formulář na její plochu můžete programově vykreslovat stránky, které by se normálně vytiskly na tiskárně. Komponenta v podstatě emuluje metody a vlastnosti klasické tiskárny (přesněji třídy TPrinter), takže vaše s námahou odladěné procedury pro tisk nemusíte takřka vůbec měnit. Jediný rozdíl je, že stránky se místo na tiskárnu posílají do rámečku vymezeného komponentou. Důležité je, že náhled, který jste "vytiskli" do komponenty, můžete její metodou Print poslat přímo na tiskárnu - není tedy třeba proceduru pro tisk volat vícekrát.

Ukázková aplikace

Obrázek nad tímto odstavcem pohází z ukázkové aplikace, kterou jsem k tomuto článku vytvořil. Hlavní procedura, která zajišťuje tisk, vypadá tako:

procedure TForm1.GenerateBtnClick(Sender: TObject);
var
  I, J: Integer;
begin
  Randomize; // inicializace generátoru náhod. čísel
  with PrintPreview do
  begin
    BeginDoc;
    // cyklus přes stránky
    for I := 1 to 5 do
    begin
      // cyklus přes obdélníky
      for J := 1 to 20 do
      begin
        // barva = náhodné číslo z intervalu <0, 2^24-1>
        Canvas.Brush.Color := Random(1 shl 24);
        Canvas.FillRect(Rect
          Random(PaperWidth), Random(PaperHeight),
          Random(PaperWidth), Random(PaperHeight)));
      end;
      if I <> 5 then NewPage;
    end;
    EndDoc;
    PageLabel.Caption := IntToStr(CurrentPage)
      + '/' + IntToStr(TotalPages);
  end;
end;

Jak je z obrázku ukázkové aplikace vidět, komponenta umožňuje nastavovat úroveň zvětšení stránky (pomocí vlastností ZoomState a Zoom). K dispozici jsou tři automatické a jeden "ruční" režim - automatické nastavují velikost stránky tak, aby se vešla do okna na šířku, na výšku nebo celá; ve zbývajícím režimu si nastavuje zvětšení programátor sám. Můžete si také vybrat, která stránka bude v náhledu zobrazena (vlastnost CurrentPage); celkový počet stránek najdete ve vlastnosti TotalPages.

Sympatickou možností je volba jednotek, ve kterých budete při tisku určovat souřadnice (vlastnost Units), takže odpadají problémy se zjišťováním rozlišení, které jsem zmiňoval v některém z předchozích dílů tohoto seriálu. Také jsem si kdysi stěžoval, že některé starší tiskárny mají problém s rozlišením při tisku obrázků - komponenta s tím počítá a po nastavení vlastnosti FastPrint na False by měla problémy obejít. ("Měla" píšu proto, že jsem tuto funkci nezkoušel, jelikož už nemám tiskárnu, která by zmíněnými problémy trpěla.)

Pomocí vlastnosti PaperView můžete detailněji nastavit, jak má vypadat "stránka" nakreslená komponentou - barva pozadí, stínu, jeho hloubka, kontextové menu apod. Ve skutečnosti je objekt stránky samostatnou komponentou TPaperView, kterou můžete také využít i bez TPrintView. Balík tedy vlastně obsahuje komponenty dvě.

Kromě věcí zde zmíněných lze nastavit i několik dalších vlastností, ale ty už nejsou tak významné, a tak je nechám k prozkoumání těm, kteří se rozhodnou si komponentu stáhnout.

Nedostatky

Musím říct, že nedostatky se hledají těžko. Je vidět, že autor na komponentě důkladně a poctivě pracoval, a tak je velice dobře použitelná. Jediná věc, která mi chybí, je možnost zobrazit víc stránek najednou v jednom náhledu (jako to umí třeba Word). No ale vzhledem k tomu, že jsou k dispozici zdrojové kódy, není problém si tuto funkci doprogramovat (a stejně tak není problém opravit si chyby, na které případně narazíte).

Hodnocení

Kdybych měl komponentu ohodnotit, dostala by ode mě ohodnocení maximální možné (pět bodů z pěti nebo tak nějak) - a až budu do svých programů chtít přidat funkci náhledu, nevím o lepším způsobu, jak to udělat.

Závěr

Tímto dílem seriál o tisku v Delphi končí, jelikož mé současné znalosti o tomto tématu jsou vyčerpány. Pokud byste měli nějaké dotazy nebo další náměty, zmiňte se o nich v diskuzi pod článkem. Třeba se z nich vyloupne ještě nějaký "bonusový" dodatek k seriálu. Pokud ale ne, tak se opět těším na setkání se čtenáři Builderu u dalších článků a seriálů.

Obsah seriálu (více o seriálu):

Tématické zařazení:

 » Rubriky  » Komponenty  

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