в итоге получилось так
ContentView - TListView
procedure TForm1.ContentViewItemClickEx(const Sender: TObject; ItemIndex: Integer; const LocalClickPos: TPointF;
const ItemObject: TListItemObject);
var
pMy: TPoint;
pItem: TRect;
begin
// вычисляем прямоугольник, где распологается кнопка
pItem.Left := trunc(ContentView.Width - ContentView.ItemAppearanceObjects.ItemObjects.Accessory.WidthWhenVisible -
ContentView.ItemAppearanceObjects.ItemObjects.TextButton.WidthWhenVisible) - 12;
pItem.Right := pItem.Left + trunc(ContentView.ItemAppearanceObjects.ItemObjects.TextButton.WidthWhenVisible);
pItem.Top := trunc((ContentView.ItemAppearance.ItemHeight / 2) -
(ContentView.ItemAppearanceObjects.ItemObjects.TextButton.HeightWhenVisible / 2));
pItem.Bottom := pItem.Top + trunc(ContentView.ItemAppearanceObjects.ItemObjects.TextButton.HeightWhenVisible);
{ смотрим куда тыкаем
ShowMessage('click : ' + LocalClickPos.X.ToString + ' ' + LocalClickPos.Y.ToString + #13#10 + 'client: ' +
ContentView.Width.ToString + #13#10 + pItem.Left.ToString + ' ' + pItem.Top.ToString + #13#10 + pItem.Right.ToString + ' ' +
pItem.Bottom.ToString + #13#10); }
pMy.X := trunc(LocalClickPos.X);
pMy.Y := trunc(LocalClickPos.Y);
if PtInRect(pItem, pMy) then
begin
ShowMessage('Нажалось))');
end else
begin
// нажатие на Item, выполняем код тут, не в OnItemClick
end;
end;
стиль вот такой используется