Einzelnen Beitrag anzeigen

Towmuz

Registriert seit: 21. Sep 2016
Ort: Minden
127 Beiträge
 
Delphi 10.1 Berlin Professional
 
#3

AW: FMX Listview Mouseover Button im Item

  Alt 21. Aug 2018, 10:08
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.
Thomas

Geändert von Towmuz (21. Aug 2018 um 10:12 Uhr)
  Mit Zitat antworten Zitat