Delphi - Quick Report DBCheckBox Delphi 7 alatt

forráskód letöltése
Készítünk egy Quick Report komponenst, amely egy adatbázis-kapcsolattal rendelkező CheckBox. A komponenst hozzákapcsolhatjuk egy adatforrás bármely logikai típusú mezőjéhez. Három lehetőség közül választhatunk, hogy a komponens miként jelenítse meg az igaz értékeket.
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;