Hallo zusammen,
ich habe einem StringGrid eine Checkbox verpasst. Das habe ich so getan:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
CHB_OK.Parent := StringGrid1;
CHB_OK.Visible := FALSE;
end;
procedure TForm1.StringGrid1SelectCell(
Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean);
var
R: TRect;
org: TPoint;
begin
if (ACol = 5) AND (ARow >= StringGrid1.FixedRows) then
begin
StringGrid1.Perform(WM_CANCELMODE, 0, 0);
R := StringGrid1.CellRect(ACol, ARow);
org := self.ScreenToClient(self.ClientToScreen(R.TopLeft));
With CHB_OK do
begin
SetBounds(org.X+17, org.Y+5, 13, 13);
Visible := True;
SetFocus;
end;
end;
end;
procedure TForm1.CHB_OKExit(Sender: TObject);
begin
With Sender as TCheckBox do
begin
Visible := FALSE;
with StringGrid1 do
begin
If Checked = TRUE then
Cells[col, row] := 'n.OK'
else
Cells[col, row] := '';
end;
end;
end;
procedure TForm1.CMDialogKey(var msg: TCMDialogKey);
begin
if ActiveControl = CHB_OK then begin
if msg.CharCode = VK_TAB then begin
// setzt den Fokus zurück auf das StringGrid
StringGrid1.SetFocus;
StringGrid1.Perform(WM_KEYDOWN, msg.CharCode, msg.KeyData);
msg.Result := 1;
exit;
end;
end;
end;
Die Checkbox erscheint auch an der entsprechenden Stelle, nur wenn ich Sie anklicke bleibt der Haken in der Chekcbox nicht bestehen. Er flackert nur kurz auf. Was mache ich falsch ?
Gruss
Holger