我将checkboxes(TCheckBox)放在TStringGrid第一列的字符串grid()中.复选框显示正常,正确定位,并在鼠标悬停时通过发光响应鼠标.但是,当我点击它们时,它们不会切换.他们对点击作出反应并突出显示,但最后,实际Checked属性不会改变.更令人费解的是,我没有任何代码在它们存在时更改这些值,我甚至没有OnClick为这些复选框分配事件.此外,我默认这些复选框是未选中的,但在显示时,它们会被检查.
复选框与每个添加到列表中的记录一起创建,并在记录指针内引用,该记录指针分配给要放置复选框的单元格中的对象.
字符串网格黑客用于单元格突出显示:
type
THackStringGrid = class(TStringGrid); //used later...
Run Code Online (Sandbox Code Playgroud)
记录包含复选框:
PImageLink = ^TImageLink;
TImageLink = record
...other stuff...
Checkbox: TCheckbox;
ShowCheckbox: Bool;
end;
Run Code Online (Sandbox Code Playgroud)
创建/销毁复选框:
function NewImageLink(const AFilename: String): PImageLink;
begin
Result:= New(PImageLink);
...other stuff...
Result.Checkbox:= TCheckbox.Create(nil);
Result.Checkbox.Caption:= '';
end;
procedure DestroyImageLink(AImageLink: PImageLink);
begin
AImageLink.Checkbox.Free;
Dispose(AImageLink);
end;
Run Code Online (Sandbox Code Playgroud)
向网格添加行:
//...after clearing grid...
//L = TStringList of original filenames
if L.Count > 0 then
lstFiles.RowCount:= L.Count + 1
else
lstFiles.RowCount:= 2; …Run Code Online (Sandbox Code Playgroud)