Einzelnen Beitrag anzeigen

michael.cohrs

Registriert seit: 11. Nov 2005
Ort: Hamburg
130 Beiträge
 
#1

Checkboxen in Stringgrid

  Alt 16. Mai 2016, 07:48
Guten morgen zusammen,

ich habe in eine Stringgrid mit folgender Methode Checkboxen in Column 0 gezeichnet:

Delphi-Quellcode:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);

  function CheckBox(Value: String): Cardinal;
  begin
    result:= DFCS_INACTIVE; // no Entry
    if Value = 'truethen // Checked
      result:= DFCS_BUTTONCHECK or DFCS_CHECKED
     else if Value = 'falsethen // not Checked
      result:= DFCS_BUTTONCHECK;
    if not Editing then
      result:= result or DFCS_MONO; // no Editing
  end;

begin
  with TStringGrid(Sender) do
    if (ACol in CheckBoxCols) and not (gdFixed in State) then begin
      Canvas.FillRect(Rect);
      InflateRect(Rect, -4, -4);
      DrawFrameControl(Canvas.Handle, Rect,DFC_Button,
                       CheckBox(Trim(Cells[ACol, ARow])));
    end; // if gdFixed in State
end;
Das MouseDown Event sieht folgendermaßen aus:
Delphi-Quellcode:
procedure TForm1.StringGrid1MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var iCol, iRow: Integer;
begin
  with TStringGrid(Sender) do
    if (Button = mbLeft) and Editing then begin
      MouseToCell(x, y, iCol, iRow);
      if (iCol > 0) and (iRow > 0) then begin
        if Cells[iCol, iRow] = '1then // Checked
          Cells[iCol, iRow]:= '0'
         else if Cells[iCol, iRow] = 'falsethen // not Checked
          Cells[iCol, iRow]:= 'true';
      end;
    end;
end;
soweit klappt alles hervoragend, mein Problem ist folgendes: Ich möchte beim Aufbau des Programms und beim Einlesen aus einer Datenbank die Checkboxen entstprechend des gelesenen Wertes entweder Checken oder halt nicht. Das gelingt mir leider nicht, nach dem Einlesen und setzen des Wertes reagieren die Checkboxen nicht mehr auf den Click, soll heissen der neue Wert wird nicht gezeichnet. Hat vielleicht jemand einen Lösungsansatz?

(Die beiden Methoden stammen nicht von mir!!)

Vielen Dank

Michael
Michael Cohrs
  Mit Zitat antworten Zitat