Egyéni sorok kiválasztása
Nagyon gyakran a gyakorlatban szükség van bizonyos vonalak kijelölésére, háttér- vagy betűszín megváltoztatására. Például a számlázásnál a nullával kisebb értékek általában kiválasztásra kerülnek. Tegyük fel, hogy a program az ügyfeleket mutatja, és néhány oszlop tartalmazza az egyenlegét a vállalat fiókjában. Ha ez az egyenleg kisebb, mint 0, akkor az ügyfelet késedelmesen kezeli cégével. A könyvelő nagyon kényelmes lesz, ha az adósok (adósok) az általános vörös listán szerepelnek.
A DBGrid grid adatainak rajzolásának módja a DefaultDrawing tulajdonság értékétől függ. Alapértelmezés szerint a tulajdonság True, vagyis az adatok automatikusan rajzolódnak. Ha a tulajdonság False-t tartalmaz, akkor a rajzot az OnDrawColumnCell vagy az OnDrawDataCell tulajdonságokra kell kódolni, amelyeket már említettünk ebben az előadásban.
Ha rajz algoritmust írtunk, de a DefaultDrawing tulajdonság True-t tartalmaz, akkor először a rácsot automatikusan kitöltjük, majd végrehajtjuk az algoritmust. Más szavakkal, a rács egyes részeinek rajzolására kétszer kerül sor. Ez nem nagyon jó a program sebességéhez, de ezt így kell tennünk: végül is nem szeretnénk különböző sorok és oszlopok megjelenítését más módon, csak néhányat. A fennmaradó részt alapértelmezett adatokkal tölti fel.
Vizsgáljuk meg részletesebben ezt a módszert. Ha megtalálja a Delphi súgóban, látni fogja:
tulajdonság OnDrawColumnCell: TDrawColumnCellEvent;
Vagyis ez a módszer TDrawColumnCellEvent típusú. A típus leírása:
típusú TDrawColumnCellEvent = eljárás (Sender: TObject; const téglalap: TRect; DataCol: integer; oszlop: TColumn; Állam: TGridDrawState) objektum;
Nézzük meg a paramétereket. Rect - a rajz koordinátái.
A DataCol az aktuális oszlop sorszáma (0-tól kezdve). Oszlop - az aktuális oszlop adatai. Állam - a sejt állapota. Lehet:
• gdSelected - a cellum kiemelve van
• gdFocused - bemeneti fókusz a cellában
• gdFixed - cell - az oszlopfejléc.
Példánkban például a katonai szolgálatért felelős személyzet vonalai piros színnel jelennek meg:
Ábra. 12.7. Sorok kiválasztása
Egyszerre megjegyezzük, hogy az üres oszlopok jelenléte további, de megoldható problémákat okoz. Az OnDrawColumnCell esemény kódját módosítani kell, ez lesz:
eljárás TfMain.DBGrid1DrawColumnCell (Feladó: TObject; const Rect: TRect;
DataCol: Integer; Oszlop: TColumn; Állapot: TGridDrawState); var
a DBGridl.Canvas elkezdődik
// A "Warranted" mező tartalmazza az igazságot?
if (ADOTable1 [ 'BoeHHOo6H3aHHbra']) = True, és nem (gdSelected állami), akkor kezdődik // származik az összes sejtvonalak fehér, piros: Font.Color: = clRed; FillRect (Rect); végén; // ha
// ha ez egy üres rendezési oszlop, ha a Column.Index = 0 majd elkezdődik
ha ADOTable1 ['Keresztnév'] <> Null akkor
s: = ADOTable1 ['Utónév'] + ''; ha ADOTable1 ['Név'] <> Null akkor
// ha ez egy üres oszlop a másik gombbal, ha a Column.Index = 6 majd elkezdődik
DBGrid1.DefaultDrawColumnCell (Rect, DataCol, oszlop, állapot); Kilépés;
// minden más oszlop más
TextOut (Rect.Left + 2, Rect.Top + 2, Column.Field.Text); végén; // végével;
A kóddal foglalkozunk. Először az jelezzük, hogy mi fog működni közvetlenül DBGrid1.Canvas tulajdonság, amely felelős a rajz a sejt stílusban. Ezután megnézzük, hogy az Igaz-e az aktuális rekord "War-bound" mezőjében. Ha igen, akkor rámutatnak, hogy a színét kell piros, majd FillRect funkció (téglalap) töröljük a standard kimenetre.
Ezután meghatároztuk, hogy ebben az időben az üres előregyártott oszlopot "IO utónév" -el megrajzoljuk. Ha ez megtörténik, akkor a változó s-ot a szükséges adatokkal formázzuk és kinyomtatjuk, mint az utóbbi időben.
Ha ez egy üres oszlop, amelynek "." Gombja van, akkor standard kimenetet készítünk és kilépünk az eljárásból. Ha ezt nem tesszük, programhibát kapunk. Az összes többi oszlop, amelyet egy karakterlánccal nyomtatunk
TextOut (Rect.Left + 2, Rect.Top + 2, Column.Field.Text);
Vegyük észre, hogy két képpontot adtunk a cellának a bal oldali és legfelső koordinátájához. Ha ez nem történik meg, akkor az új rajz nem fog teljesen festeni a régire:
Ábra. 12.8. Helytelen rajz
Az Ön által hozzáadott képpontok száma az adatformátumtól és a betűmérettől függ. Ez általában mintavételezéssel történik. Például egy cella olyan számokat tartalmazhat, amelyeket általában a jobb szélre nyomnak, majd két képpontot nem lehet elhagyni.
Lehet ellenőrizni egy adattípust, például:
// ha a szöveg, csak 2 képpontot mozgasson, ha a Column.Field.DataType = ftString majd
TextOut (Rect.Left, Rect.Top + 2, Column.Field.Text) // ha a számok, akkor váltani őket a megfelelő 28 pixelek mást TextOut (Rect.Left + 28, Rect.Top + 2, Column.Field.Text) ;
A vonal piros szöveggel történő kiemelése esetleg nem elegendő az ügyfél számára. Mi van, ha megköveteli, hogy ezek a sorok fehér piros színű piros vonallal jelennek meg? Aztán, ahelyett, hogy
Font.Color: = clRed; FillRect (Rect);
meg kell írni
// nyomtassa ki a vonal összes celláját fehér szöveggel piros háttéren: Brush.Color: = clRed; Font.Color: = clWhite; FillRect (Rect);
Amint látja, az alproperty
DBGridl.Canvas.Brush.Color felelős a cellatöltés színéért, és
DBGridl.Canvas.Font.Color a megjelenített betűtípus színére. Megnyithatja az elérhető színek listáját bármelyik összetevő színes tulajdonságában. Most rácsot hozhat létre összetett rajzelemekkel.
Előadás 13. DBChart. Grafikonok és diagramok.
Diagramok és diagramok készítéséhez használja a Chart elemeket a További fülön, és a DBChart elemet az összetevők palettájának Data Controls fülén. Ez egyenértékű a komponensek, a különbség abban rejlik, hogy DBChart veszi az adatokat a megadott adathalmaz - a táblát vagy lekérdezést, és a használata Chart adatok kell tenni magad.
Ezek meglehetősen bonyolult összetevők, sok tulajdonságuk van, ami viszont összetett tárgyak. Ha részletesen leírjuk a grafikonok és diagramok összetevõit, kapunk egy kis könyvet, így csak a velük való együttmûködés alapvetõ technikáit vizsgáljuk.