Добрый день,
В событии MouseDown у TListBoxItem ищем в стиле итема объект изображения. Для итема картинка имеет название 'icon'.
Определяем координаты мыши в координатах формы (Абсолютные координаты). На случай отступов и произвольного размещения изображения.
Конвертируем абсолютные координаты в локальные координаты изображения.
Если картинка содержит координаты мыши, значит нажали на картинку.
Delphi:
procedure TForm6.ListBoxItem1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single);
var
Item: TListBoxItem;
StyleObject: TFmxObject;
StyleIcon: TControl;
LocalMousePos: TPointF;
AbsoluteMousePos: TPointF;
begin
if Sender is TListBoxItem then
begin
Item := TListBoxItem(Sender);
LocalMousePos := TPointF.Create(X, Y);
AbsoluteMousePos := Item.LocalToAbsolute(LocalMousePos);
// Ищем объект стиля - картинка. Лучше закешировать один раз, избежав постоянный поиск картинки
StyleObject := Item.FindStyleResource('icon');
if (StyleObject <> nil) and (StyleObject is TControl) then
begin
StyleIcon := TControl(StyleObject);
// Координаты в локальной системе координат картинки
LocalMousePos := StyleIcon.AbsoluteToLocal(AbsoluteMousePos);
if StyleIcon.LocalRect.Contains(LocalMousePos) then
ShowMessage('Click on Image');
end;
end;
end;
Builder C++:
void __fastcall TForm4::ListBoxItem1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, float X, float Y)
{
TListBoxItem *item = dynamic_cast<TListBoxItem*>(Sender);
if (item != 0){
TPointF localMousePos(X, Y);
TPointF absoluteMousePos = item->LocalToAbsolute(localMousePos);
// Ищем объект стиля - картинка. Лучше закешировать один раз, избежав постоянный поиск картинки
TFmxObject *styleObject;
styleObject = item->FindStyleResource("icon");
if (styleObject != NULL) {
TControl *styleIcon = dynamic_cast<TControl*>(styleObject);
// Координаты в локальной системе координат картинки
localMousePos = styleIcon->AbsoluteToLocal(absoluteMousePos);
if (styleIcon->LocalRect.Contains(localMousePos))
ShowMessage("Click on Image");
}
}
}