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 = 'true' then // Checked
result:= DFCS_BUTTONCHECK or DFCS_CHECKED
else if Value = 'false' then // 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] = '1' then // Checked
Cells[iCol, iRow]:= '0'
else if Cells[iCol, iRow] = 'false' then // 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