Delphi - QuickReport-ban nyomtatható TGauge komponens adatbázis eléréssel

forráskód letöltése
Amikor egy adatbázisban olyan értékeket is tárolunk, melyeknek százalékos megjelenítése nyomtatásban is szerepel terveink között, akkor jól fog jönni az alábbi komponens. Ez leginkább a Samples paletta TGauge komponensére hasonlít, azzal a különbséggel, hogy az adatokat adatbázisból veszi, és a QuickReport-on elhelyezhető nyomtatható komponens. A mellékelt példaprogram megnyitása előtt a QRDBGauge.pas-ban lévő komponenst telepítenie kell a Delphi alá.

Nyomtatható QuickReport komponensről van szó, tehát a QRPrintable osztályból származtatjuk. A következő property-ket hozzuk létre:
  • Background: háttérszín.
  • Foreground: előtér szín. Ez fogja az értéksávot jelölni.
  • Indicator: igaz érték esetén egy vonalat rajzol a sáv végére. Ez akkor használható jól, ha fekete-fehér nyomtatót használunk árnyalatok nélkül, és az előtérszín és a háttérszín egyaránt fehér.
  • MaxValue: a maximális érték, amihez az adatot viszonyítani kell.
  • DataSet: TDataset osztályból származó komponens (TTable, TQuery, stb.).
  • DataField: az adatmező, amiben az érték található.
A komponens megrajzolása a már eddig is jól bevált RedrawTo eljárásban történik. Ebben ellenőrizzük, hogy a FFieldOK változó értéke igaz-e, és ha igen, akkor az FField változóban eltároljuk a mező adatait.
procedure TQRDBGauge.RedrawTo;
…
  if FFieldOK then begin
    if FDataSet.DefaultFields then FField:=FDataSet.Fields[FFieldNo];
  end else begin
    FField := nil;
  end;
Megnézzük, hogy a mező egész, vagy valós típusú számot tartalmaz-e, és ennek megfelelően olvassuk ki a value változóba.
  if Assigned(FField) then begin
    if FField.DataType=ftFloat then begin
      value := TFloatField(FField).Value;
    end else begin
      value := TIntegerField(FField).Value;
    end;
  end else value:=0;
A cw és ch változókban eltároljuk a megrajzolandó sáv szélességét és magasságát. Az x és y változók a megrajzolandó terület koordinátái. Az xp változóban tároljuk a sáv jobb szélének X koordinátáját. A többi már csak egyszerű rajzolás a Canvas-ra (canv paraméter).