|
|
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…
|
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!
|