как вместо Sender придет не TButton, если мы сами создавали массив и присваивали этот обработчик каждой кнопке???
у него написано совершенно верно, только скобок в := MyOnClick() не должно быть
и какая бы кнопка не пришла, именно указатель на нее хранится в Sender
это магия такая
В п.3 Вы добавляете ListViewItem с Purpose := TListItemPurpose.Header. У него Objects.AccessoryObject = nil и приложение падает в TForm1.ListView1UpdateObjects.
Могу предложить такою правку:
procedure TForm1.ListView1UpdateObjects(const Sender: TObject; const AItem: TListViewItem);
begin
if AItem.Purpose <> TListItemPurpose.Header then // проверка назначения айтема
begin
AItem.Objects.TextObject.Width := AItem.Objects.TextObject.Width - (5 + AItem.Objects.AccessoryObject.Width);
AItem.Objects.AccessoryObject.Visible := FChecked.Contains(AItem.Index);
end;
end;