
A mellékelt példaprogram megnyitása előtt a QRDBCheckBox.pas-ban lévő komponenst telepítenie kell a Delphi alá. Ehhez válassza a Component - Install Component menüpontot.
A komponens a Quick Report-hoz készült. A Delphi 7 alapértelmezett telepítés szerint nem tartalmazza a Quick Report-ot, azonban lehetőségünk van arra, hogy azt feltelepítsük.
Ha használni akarjuk a Quick Report komponenseket, akkor azokat importálnunk kell a Delphi 7-be. Az ehhez szükséges komponenscsomag a Bin alkönyvtárban található, a dclqrt70.bpl állományban.
A Delphi 7-ben kattintsunk a Component - Install Packages menüpontra. A megjelenő ablakban kattintsunk az Add feliratú gombra. Ekkor megjelenik egy tallózás ablak, melyben keressük meg a Delphi 7 Bin alkönyvtárát. A Bin alkönyvtárban válasszuk ki a dclqrt70.bpl állományt, majd kattintsunk a Megnyitás gombra.
A QRDBCheckBox komponens rendelkezik egy DataSet property-vel, amelyen keresztül hozzákapcsolhatjuk egy TTable, TQuery, stb. komponenshez. Ezután a Field property-ben kell megadnunk annak az adatmezőnek a nevét, amelynek a tartalmát meg akarjuk jeleníteni.
A Style property-ben választhatjuk ki a komponens által megjelenítendő jelölést. Három lehetőségünk van:
TQRDBCheckBoxStyle = (csCross, csTick, csXShape);
Ha QuickReport komponenst készítünk, akkor származtatási alaposztályként a TQRPrintable osztályt használjuk. Ebből származtatjuk a QRDBCheckBox-ot is.
Ahhoz, hogy a komponens képe megjelenjen, két örökölt metódust kell fölülírnunk.
A Paint metódus a komponens szerkesztési-idejű, míg a Print metódus a futási-idejű (nyomtatás) képet rajzolja meg.
Megrajzolás előtt a Prepare eljárásban a FFieldNo és a FFieldOk változók értékét beállítjuk, a Dataset és Field property-k értékétől függően. Ha a kiválasztott mező logikai típusú, akkor a FFieldNo változóba eltároljuk a mező indexét, a FFieldOk változónak pedig igaz értéket adunk.
procedure TQRDBCheckBox.Prepare;
begin
inherited Prepare;
if Assigned(FDataSet) then begin
FField:=FDataSet.FindField(FDField);
if Assigned(FField) and (FField is TBooleanField) then begin
FFieldNo:=FField.Index;
FFieldOK:=True;
end
else begin
FField:=Nil;
FFieldOK:=False;
end;
end
else begin
FField:=Nil;
FFieldOK:=False;
end;
end;
A komponens tényleges képét a RedrawTo metódusban rajzoljuk meg, a Style property értékének megfelelően. Első lépésben ellenőrizzük a FFieldOk változó értékét. Ha igaz, akkor az FField változóban eltároljuk az adatbázis FFieldNo sorszámú mezőjét.
if FFieldOK then begin
if FDataSet.DefaultFields then
FField:=FDataSet.Fields[FFieldNo];
end else begin
FField:=Nil;
end;
Az FChecked logikai változó értékétől függ, hogy a CheckBox jelet megrajzoljuk-e. Ennek kezdetben hamis értéket adunk, majd ellenőrizzük, hogy a megadott mező típusa TBooleanField-e. Ha igen, akkor kiolvassuk az értékét, és átadjuk az FChecked változónak.
FChecked:=False;
if Assigned(FField) then begin
if (FField is TBooleanField) then begin
FChecked:=TBooleanField(FField).Value;
end;
end;