![]() |
FMX Listview Mouseover Button im Item
Guten Morgen,
nachdem ich mich nun wund gesucht habe, frage ich mal hier. Gegeben sei ein TListView, darin füge ich Items in
Delphi-Quellcode:
ein, alles schön herumdesignt usw.
DynamicAppearance
Nun habe ich zwei ImageObjectAppearance IM ListViewItem, die als Buttons dienen sollen (Bearbeiten, Entfernen), alles Andere funktioniert auch schon, aber wie tausche ich bei ImageObjectAppearance das Bild bei MouseOver? Also ich möchte einen MouseOver Effekt, nur für diese zwei Buttons im ListItem. Das MouseOverEvent vom ListView bietet mir leider nicht die selben Möglichkeiten wie z.B. ItemClickEx. (Sorry erste ernste FMX Anwendung :)) |
AW: FMX Listview Mouseover Button im Item
Ich nehme mal an, Du hättest in dem Mouse-Over Event gerne die Informationen, die ItenClickEx bietet, also das ListviewItem und die (lokale) Position der Maus innerhalb des ListViewItems?
Letztlich kann man das aber selber ermitteln. Habe hier mal eine Info gepostet, wie man an das ListviewItem kommt, über das die Maus gerade ist (dummerweise ist Sender in Listview.Mousemove ja nicht das ListviewItem, sondern die Listview selber): ![]() So kommst Du an das ListviewItem. Wenn Du das hast, kannst Du anhand der Position Deines Buttons prüfen, ob die Maus gerade da drüber (z.B. Du rechnest die Koordinaten des Schalters per button.localtoabsolute um (ggflls. weitere Berechnungen, je nach Verschachtelung) und prüfst, ob die Maus im Bereich des Buttons ist) die gewünschte Manipulation vornehmen... Denkbar wäre aber auch, dem Button (bzw. dem Image) selber direkt einen Effekt mitzugeben... |
AW: FMX Listview Mouseover Button im Item
Danke schön, funktioniert :)
Mittels
Delphi-Quellcode:
bekommt man auch fix das gewünschte Control.
InLocalRect
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:
|
AW: FMX Listview Mouseover Button im Item
Zu Deiner Frage nach einem alternativen Ansatz:
Du könntest z.B. ein TGlowEffect oder TBeveleffect erzeugen, als Parent das Image setzen (Hittest muss für das Image=True sein) und als Trigger für den Effekt "Mouseover=True" und "enabled=false" als Vorgabe. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz