HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

TCheckBox komponens használata a TDBGrid-en belül logikai típusú mezők esetén


Példaprogram letöltése

8384 bájt

Ebben a példában azt valósítjuk meg, hogy ha adott egy olyan adattábla, melyben logikai mező is található, akkor a TDBGrid komponens ennél a mezőnél minden egyes cellájában automatikusan egy TCheckBox komponenst jelenítsen meg és a felhasználó ezen keresztül adhassa meg az adott mező logikai értékét.
A megoldáshoz a TDBGrid két eseményét kell felhasználnunk. Az egyik az OnDrawColumnCell. Itt egyedi megjelenést kölcsönözhetünk az egyes celláknak. Első lépésként ellenőrizzük, hogy az adott oszlophoz tartozó mező logikai típusú-e vagy sem. Ha igen, akkor kirajzolunk egy TCheckBox komponenst a DrawFrameControl függvény segítségével, majd a mező értékétől függően bejelöljük, vagy üresen hagyjuk azt.
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; 
  const Rect: TRect; DataCol: Integer; Column: TColumn; 
  State: TGridDrawState);
var
  w, h: integer;
  old: TColor;
begin
  with DBGrid1.Canvas do begin
    FillRect(Rect);
    if Column.Field.DataType=ftBoolean then begin
      w:=(Rect.Right+Rect.Left) div 2;
      h:=(Rect.Bottom+Rect.Top) div 2;
      Pen.Width:=1;
      DrawFrameControl(Handle, Classes.Rect(w-7, h-7, 
         w+7, h+7), DFC_BUTTON, DFCS_BUTTONCHECK);
      if Column.Field.AsBoolean then begin
        Pen.Width:=2;
        old:=Pen.Color;
        Pen.Color:=clBlack;
        MoveTo(w-3, h);
        LineTo(w-1, h+3);
        LineTo(w+3, h-3);
        Pen.Color:=old;
      end;
    end else begin
      TextOut(Rect.Left+2, Rect.Top+2, Column.Field.Value);
    end;
  end;
end;
A másik kérdéses esemény az OnCellClick. Ez akkor jön létre, ha a felhasználó rákattint valamely cellára. Amikor ezt tapasztaljuk, akkor ellenőriznünk kell, hogy ez logikai típusú mező-e. Ha igen, akkor válik szükségessé az új értékadás, mely logikai típus esetén az aktuális érték ellenkezője lesz. Érték adás előtt, ha adattáblánk nem lenne szerkesztő vagy beszúró üzemmódban, akkor ezen változtatnunk kell és szerkesztő üzemmódba kell helyeznünk azt, különben hibaüzenetet kapunk.
procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
  if Column.Field.DataType=ftBoolean then begin
    if not (Table1.State in [dsInsert, dsEdit]) then begin
      Table1.Edit;
    end;
    Column.Field.AsBoolean:=not Column.Field.AsBoolean;
  end;
end;



Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2001 évkönyv 161. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |