Danke schön, funktioniert
Mittels
InLocalRect
bekommt man auch fix das gewünschte Control.
hier die Testversion, die Icons müssen noch in eine Imagelist o.ä.
Delphi-Quellcode:
//Edit: Der Vollständigkeit halber, hier noch die function von Harry aus dem verlinkten Thread
Function GetIndexAtPos(LV: TListView;
TP: TPointF): Integer;
var
I: Integer;
TR: TRectF;
begin
Result := -1;
for I := 0
to LV.Items.Count-1
do begin
TR := LV.GetItemRect(I);
if TR.
Contains(
TP)
then begin
Result := I;
Break;
end;
end;
end;
procedure Tfrm1.lv_timesMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Single);
var
obj : IControl;
ind : Integer;
item : TListViewItem;
img : TListItemImage;
icoEdit : TBitmap;
begin
obj := ObjectAtPoint(Screen.MousePos);
if obj <>
nil then
begin
ind := GetIndexAtPos(lv_times, TPointF.Create(X, Y));
if ind <> -1
then
begin
item := lv_times.Items[ind];
if item <>
nil then
begin
img := item.Objects.FindObjectT<TListItemImage>('
btn_Edit');
icoEdit := TBitmap.Create;
img.Bitmap := TBitmap.Create(0, 0);
if img.InLocalRect(TPointF.Create(X, Y))
then
begin
icoEdit.LoadFromFile('
C:\Users\Ich\Desktop\edit_over.ico');
img.Bitmap := icoEdit;
end else
begin
icoEdit.LoadFromFile('
C:\Users\Ich\Desktop\edit.ico');
img.Bitmap := icoEdit;
end;
end;
end;
end;
end;
Zitat:
Denkbar wäre aber auch, dem Button (bzw. dem Image) selber direkt einen Effekt mitzugeben...
Hast du dafür einen Ansatz? Das würde sicherlich weniger Overhead produzieren.