AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

FMX Listview Mouseover Button im Item

Ein Thema von Towmuz · begonnen am 20. Aug 2018 · letzter Beitrag vom 21. Aug 2018
Antwort Antwort
Towmuz

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

FMX Listview Mouseover Button im Item

  Alt 20. Aug 2018, 10:22
Guten Morgen,

nachdem ich mich nun wund gesucht habe, frage ich mal hier.

Gegeben sei ein TListView, darin füge ich Items in DynamicAppearance ein, alles schön herumdesignt usw.
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 )
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.533 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: FMX Listview Mouseover Button im Item

  Alt 20. Aug 2018, 18:13
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):

https://www.delphipraxis.net/187248-...-listview.html

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...
  Mit Zitat antworten Zitat
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
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.533 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: FMX Listview Mouseover Button im Item

  Alt 21. Aug 2018, 22:46
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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:41 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz