HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Saját készítésű QuickReport komponens


Példaprogram letöltése

11054 bájt

Ha a QuickReport-hoz szeretnénk nyomtatható komponenseket készíteni, akkor bajban vagyunk, hiszen ennek dokumentálását nem vitték túlzásba a készítők. A beépített Help-ben jóformán semmiféle információt nem találunk erről, csupán homályos utalásokat, pedig nem egy egyértelmű dologról van szó. Ebben a cikkben egy egyszerű példát adunk közre, melyből megtudhatjuk, hogy hogyan is készíthetünk ilyen komponenseket.
A mellékelt példaprogram megnyitása előtt a QRSmile.pas-ban lévő komponenst telepítenie kell a Delphi alá.

A példa tényleg egyszerű, a komponens a jól ismert sárga vigyorgó fejet jeleníti meg, amit elhelyezhetünk nyomtatandó QuickReport-unkon, ezzel reprezentálva, hogy mennyire is élvezzük a programfejlesztést…

Mindenekelőtt tudni kell, hogy a QuickReport nyomtatható komponensei mind a TQRPrintable osztályból származnak. Ennél többet a Help-ből sajnos nem tudhatunk meg, de sebaj.

A hagyományos vizuális komponensekkel ellentétben nem elég egy Paint metódus a kívánt eredményhez. Ha csak ezt használnánk, akkor már a nyomtatási nézetben sem jelenne meg a komponens. A Paint metódus a komponens szokásos megjelenítését végzi el, míg a Print metódus a nyomtatási nézet, illetve a nyomtatón történő megjelenítést. Ebből az következne, hogy kétszer kell megírnunk a megjelenítéshez szükséges kódot, mivel a két megjelenítési mód eltér egymástól. Ezen egy kis trükkel segítünk, ezért jött létre a RedrawTo eljárás, ami ezt a problémát megoldja.

A komponens deklarációja így néz ki:
  TQRSmile = class(TQRPrintable)
  private
    procedure RedrawTo(canv: TCanvas; crect: TRect);
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    procedure Paint; override;
    procedure Print(X, Y: integer); override;
  end;
A komponens megjelenítését a szerkesztési nézetben tehát a Paint metódus végzi el. Ebben semmi más dolgunk nincs, mint meghívni a RedrawTo eljárást. Ennek két paramétere van: a Canvas, amire a komponenst meg kell rajzolni, és a komponens területét meghatározó TRect típusú paraméter.
procedure TQRSmile.Paint;
begin
  inherited;
  RedrawTo(Canvas, ClientRect);
end;
A Print eljárásban egy kicsit több dolgunk lesz, mivel itt a QRPrinter objektum Canvas-ára kell rajzolni, méghozzá a megadott pozícióba. A koordinátákat a QRPrinter XPos és YPos függvényekkel kell kiszámolni.
procedure TQRSmile.Print;
var
  r:TRect;
begin
  if ParentReport.FinalPass and IsEnabled then begin
    with QRPrinter do begin
      with Canvas do begin
        r.Left:=XPos(X+Size.Left);
        r.Top:=XPos(Y+Size.Top);
        r.Right:=XPos(X+Size.Left+Size.Width);
        r.Bottom:=YPos(Y+Size.top+Size.Height);
        RedrawTo(QRPrinter.Canvas, r);
      end;
    end;
  end;
  inherited;
end;
A lényegi munkát tehát a RedrawTo eljárás végzi. Természetesen ez egy saját eljárás, tehát bármi más is lehetne a neve. Fontos, hogy itt ne a komponens Width, Height, Left, Top stb. tulajdonságait használjuk, mert akkor a nyomtatási képen egy kicsit furcsa eredményt fogunk kapni. Éppen ezért a crect paramétert használjuk, amiből megtudjuk a tényleges koordinátákat. Innentől kezdve már csak fel kell használnunk ezeket a rajzoláshoz…

Cikksorozat

#IDKategóriaCikk címeSorozat
1063DelphiInterbase 6 alkalmazása Delphi-ben1. rész
1072DelphiInterbase 6 alkalmazása Delphi-ben2. rész
1084DelphiInterbase 6 alkalmazása Delphi-ben3. rész
1092DelphiTIBTable komponens4. rész
1102DelphiTIBTransaction komponens5. rész
1111DelphiTIBQuery komponens6. rész
1120DelphiTIBStoredProc komponens7. rész
1128DelphiTIBDataSet komponens8. rész
1141DelphiTIBSQL komponens9. rész
1150DelphiTIBSQLMonitor komponens10. rész
1159DelphiTIBUpdateSQL komponens11. rész
1167DelphiIBEvents komponens12. rész
1177DelphiIBDatabaseInfo komponens használata13. rész
1183DelphiTIBConfigService komponens14. rész
1192DelphiTIBSecurityService komponens15. rész
1204DelphiTIBServerProperties komponens16. rész
1213DelphiTIBBackupService komponens17. rész
1222DelphiTIBRestoreService komponens18. rész
1231DelphiTIBValidationService komponens19. rész
1240DelphiTIBStatisticalService komponens20. rész
1249DelphiTIBLogService komponens21. rész
1258DelphiTIBUninstall komponens22. rész
1267DelphiInterBase Express komponenscsomag23. rész


Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2001 évkönyv 335. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |