Delphi - A DecisionGrid komponens

Decision Cube paletta 3. rész

forráskód letöltése
Az előző részben a DecisionCube komponens tulajdonságait és metódusait vizsgáltuk. Folytatva a Decision Cube paletta komponenseinek vizsgálatát, most a DecisionGrid komponenssel ismerkedünk meg részletesebben.
Példaprogramunk alapjait most is az első rész példaprogramjából merítjük. Ez alkalommal is töröljük le a grafikont.
A DecisionGrid az adatelemzés adatainak táblázatszerű megjelenítésére szolgál. Ránézésre nagyon hasonlít a DBGrid-re, de közelebről megvizsgálva azért mégsem. A táblázat összesíti az egyes adatdimenziók értékeit. A dimenziók a táblázat oszlopaiként vagy soraiként jelennek meg.
Komponensünket a DecisionSource tulajdonságon keresztül tudjuk hozzákapcsolni a DecisionCube-hoz, egy TDecisionSource objektum közvetítésével.
A DecisionGrid rengeteg olyan formázási tulajdonsággal rendelkezik, amely már szerkesztés közben is beállítható. Rengeteg szín, betűtípus és más tulajdonság is beállítható. Az alábbi táblázat segít eligazodni abban, hogy a sok szín és betű beállítás közül mi mire is vonatkozik.
Tulajdonság Leírás
CaptionColor: TColor A dimenziók nevét megjelenítő cellák háttérszíne.
CaptionFont: TFont A dimenziók nevét megjelenítő cellák betűinek tulajdonságai.
DataColor: TColor Az adatokat tároló cellák háttérszíne.
DataFont: TFont Az adatokat tároló cellák betűinek tulajdonságai.
DataSumColor: TColor Azoknak a celláknak a háttérszíne, amelyek összesített adatokat tartalmaznak. A példaprogramban az alsó sor és a jobb oldali oszlop.
DefaultColWidth: Integer Alapértelmezett oszlopszélesség.
DefaultRowHeight: Integer Alapértelmezett sormagasság.
Dimensions: TDisplayDims Az egyes dimenziók tulajdonságait itt külön beállíthatjuk, mint a DecisionCube esetében.
GridLineColor: TColor A cellákat elválasztó vonalak színe.
GridLineWidth: Integer A cellákat elválasztó vonalak vastagsága.
LabelColor: TColor Az oszlopok és sorok megnevezéseit tartalmazó cellák háttere.
LabelFont: TFont Az oszlopok és sorok megnevezéseit tartalmazó cellák betűinek tulajdonságai.
LabelSumColor A Sum feliratot tartalmazó cellák háttérszíne.
ScrollBars: TScrollStyle A megjelenítendő görgető sávok beállítására szolgál. ssBoth – mindkettő, ssNone – egyik sem, ssHorizontal – csak avízszintes, ssVertical – csak a függőleges látszik.
A program futása közben a ColCount és RowCount tulajdonságokon keresztül kérdezhetjük le az oszlopok és sorok számát.
property ColCount: Integer;
property RowCount: Integer;
Mindkét tulajdonság Integer típusú értéket ad vissza. Azonban az oszlopok és sorok számába beleszámítanak a fejléceket tartalmazó cellák is. Ha ezekből kivonjuk a FixedCols, illetve FixedRows tulajdonságok értékét, akkor megkapjuk az adatcellák számát.
Lehetőségünk van arra, hogy egy cella tartalmát közvetlenül lekérdezzük. Erre a Cells tömb szolgál.
property Cells[ACol, ARow: Integer]: String;
Az ACol és ARow paraméterekben az oszlop és sor koordinátát kell megadnunk. Itt arra kell figyelnünk, hogy az első oszlop és sor sorszáma 0.
Egy cella tartalmát akkor is le tudjuk kérdezni, ha az egér bal gombjával rákattintunk. Ehhez az OnMouseDown metódust az alábbi módon kell megírnunk.
procedure TForm1.DecisionGrid1MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
  Koord: TGridCoord;
begin
  if Button<>mbLeft then Exit;
  Koord:=DecisionGrid1.MouseCoord(X,Y);
  if (Koord.X<DecisionGrid1.FixedCols) or (Koord.Y<DecisionGrid1.FixedRows) then Exit;
  ShowMessage('A cella tartalma a MouseCoord függvénnyel meghatározva: '+DecisionGrid1.Cells[Koord.X-DecisionGrid1.FixedCols,Koord.Y-DecisionGrid1.FixedRows]);
end;
A MouseCoord metódus visszaadja annak a cellának a koordinátáit, amely a megadott X,Y képernyő koordináta alatt szerepel. A metódus beleszámolja az oszlop és sor neveket, valamint a dimenziók nevét tartalmazó cellákat is. Ezért ha ezeket a koordinátákat fel akarjuk használni, mondjuk a Cells tulajdonságnál, akkor korrigálnunk kell a FixedCols és FixedRows értékekkel.
A táblázat megjelenítésére hatással van az Options tulajdonság is. Ha itt a cgGridLines értékét False-ra állítjuk, akkor eltűnnek a cellákat elválasztó vonalak. A cgOutliner érték igazra vagy hamisra állításával kapcsolhatjuk be vagy ki a dimenziók neve mellett megjelenő +/- jeleket.
Ha módosítani szeretnénk egy dimenzió vagy összesítés megjelenítendő feliratát, akkor az Object Inspector-ban kattintsunk duplán a Dimensions tulajdonságra. Megjelenik egy kis ablak, amelyben az adott dimenziók és összesítések nevei szerepelnek. Ha rákattintunk valamelyikre, akkor az Object Inspector az ő tulajdonságait fogja mutatni. A DisplayName mezőben megadhatjuk azt a feliratot, amelyet meg szeretnénk jeleníteni. Az Alignment-ben állíthatjuk be, hogy az egyes oszlop vagy sor nevek igazítása a cellán belül hová történjen.
A felirat módosítását, forráskódból az alábbi módon tehetjük meg.
DecisionGrid1.Dimensions.Items[StrToInt(Edit1.Text)].DisplayName:=Edit2.Text;
És végül két fontos esemény.
Az OnDecisionDrawCell esemény minden egyes cella megrajzolása előtt meghívódik.
procedure TForm1.DecisionGrid1DecisionDrawCell(Sender: TObject; Col, Row: Integer; var Value: String; var aFont: TFont; var aColor: TColor; AState: TGridDrawState; aDrawState: TDecisionDrawState);
begin
  if (Col>=0) and (Row>=0) then
    if ODD(Col) then aColor:=clInactiveCaptionText; 
end;
Itt igazából bármit megtehetünk. Felülbírálhatjuk a cella megjelenítendő tartalmát (Value), színét (aColor), betűtípusát (aFont). Az esemény az oszlop és sor nevek megrajzolása előtt is meghívódik, ezért a Col és a Row értéke negatív számról indul. A 0 értéket az első adatcella kapja.
A másik esemény az OnDecisionExamineCell. Ez akkor hajtódik végre, amikor a felhasználó az egér jobb gombjával rákattint egy cellára.
procedure TForm1.DecisionGrid1DecisionExamineCell(Sender: TObject; iCol,
  iRow, iSum: Integer; const ValueArray: TValueArray);
begin
  ShowMessage ShowMessage('A cella tartalma: '+DecisionGrid1.Cells[iCol,iRow]);
end;
Az iCol, iRow paraméterek megadják a cella koordinátáit. Az iSum az összesítést azonosítja. A legelső összesítés sorszáma 0.
Ha a DecisionGrid fejléc celláin nyomjuk le az egér jobb gombját, akkor egy gyorsmenü jelenik meg. Ebben a menüben a táblázat által megjelenítendő dimenziókat és összesítéseket kapcsolhatjuk ki vagy be.

Decision Cube paletta cikksorozat