Toon posts:

[delphi] custom checkbox in dbgrid

Pagina: 1
Acties:
  • 102 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik probeer al een tijdje in een dbgrid met checkboxen te werken voor boolean-velden. Nu is dat op zich geen probleem behalve dat ik de standaard checkboxen van delphi niet zo mooi vind :)

Met wat speurwerk ben ik erachter gekomen hoe ik dat voor mekaar krijg in de DrawColumnCell event van de dbgrid.
Het idee is dat zodra je de cell gaat editen er een dbcheckbox overheen wordt getekend die gekoppeld is aan het bijbehorende dataveld in de tabel. Ben je niet aan het editen dan tekent het programma de checkbox mbv de DrawFrameControl.

In deze zit juist het probleem, ik heb een leuk setje componenten gedownload, raize components 3 en ik wil dat hij deze tekend ipv de standaard checkbox uit de windows.pas unit.

Ik zal hier ff wat code pasten zodat het wat duidelijker wordt:

[EDIT] ff voor de duidelijkheid, is de cell gefocused zie ik dus WEL mijn raize checkbox he ;)

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
procedure TForm1.RzDBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
const IsChecked : array[Boolean] of Integer =
      (DFCS_BUTTONCHECK, DFCS_BUTTONCHECK or DFCS_CHECKED);
var
  DrawState: Integer;
  DrawRect: TRect;
begin
  if (gdFocused in State) then
  begin
    if (Column.Field.FieldName = dbcCompleted.DataField) then
    begin
     dbcCompleted.Left := Rect.Left + RzPanel1.Width + RzDBGrid1.Left + 9;
     dbcCompleted.Top := Rect.Top + RzSplitter1.Top + RzDBGrid1.top + 2;
     dbcCompleted.Width := Rect.Right - Rect.Left;
     dbcCompleted.Height := Rect.Bottom - Rect.Top;
     dbcCompleted.Visible := True;
    end
  end
  else
  begin
    if (Column.Field.FieldName = dbcCompleted.DataField) then
    begin
      DrawRect:=Rect;
      InflateRect(DrawRect,-1,-1);
      DrawState := ISChecked[Column.Field.AsBoolean];
      RzDBGrid1.Canvas.FillRect(Rect);
      DrawFrameControl(RzDBGrid1.Canvas.Handle, DrawRect,
                       DFC_BUTTON, DrawState);
    end;
  end;
end;


Ik moet dus erachter zien te komen wat ik neer moet zetten ipv DFC_BUTTON (en evt drawstate maar k neem aan dat die hetzelfde is) om mijn Raize checkbox tevoorschijn te toveren.

Iemand enig idee hoe ik daarachter ga komen? Heb GEEN source bij die raize componenten.. :(

Alvast bedankt voor reactie!

[ Voor 5% gewijzigd door Verwijderd op 19-06-2004 16:54 ]