Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TListView-OnMouseMove->richtige ListItem ermitteln? (https://www.delphipraxis.net/58131-tlistview-onmousemove-richtige-listitem-ermitteln.html)

sniper_w 1. Dez 2005 19:09


TListView-OnMouseMove->richtige ListItem ermitteln?
 
Meine TListView wrid so erzeugt:
Delphi-Quellcode:
var
  HostListView: TListView;
[...]
  HostListView := TListView.Create(Self);
  with HostListView do
  begin
    Name := 'HostListView';
    Parent := VariablesSheet;
    Left := 0;
    Top := 0;
    Width := 441;
    Height := 211;
    Align := alClient;
    Columns := <>;
    GridLines := True;
    ReadOnly := True;
    RowSelect := True;
    ShowWorkAreas := True;
    TabOrder := 0;
    ViewStyle := vsReport;
    OnMouseMove := HostListViewMouseMove;
  end;
[...]
procedure TMainAppForm.HostListViewMouseMove(Sender: TObject;
  Shift: TShiftState; X, Y: Integer);
var
  ListItem:TListItem;
  CurrentListView:TListView;
  i, w:Integer;
begin
  CurrentListView := TListView(Sender);
  ListItem := CurrentListView.GetItemAt(x, y);
  if ListItem<>nil then
  begin
    w := 0;
    for i:=0 to CurrentListView.Columns.Count-1 do
    begin
      w := w + CurrentListView.Columns.Items[i].Width;
      if w>X then
      begin
        if i=0 then
        begin

            CurrentListView.Hint := '|'+CurrentListView.Columns.Items[i].Caption+' = '+ListItem.Caption;

        end else
        begin

            CurrentListView.Hint := '|'+CurrentListView.Columns.Items[i].Caption+' = '+ListItem.SubItems.Strings[i-1];

        end;
        Break;
      end;
    end;
  end else
  begin
    CurrentListView.Hint := '';
  end;
end;
Wenn ich mich jetzt mit dem Maus über TListView bewege, dann wird Hint-Eigenschaft richtig gesezt. ( das kann ich im StatusBar auslesen ). Das Ganze funktionier solange ich das HorizontalScrollBar (von TListView) in Ruhe lasse. Wenn es aber "nach rechts" bewege, um die Einträge zu sehen, die unsichtbar waren, dann liefert die Procedur "HostListViewMouseMove" falsche ergebnisse. Mir ist auch klar warum es so ist. Ich weiss aber nicht, wie ich das korrigieren könnte. Weisst jemand?

marabu 1. Dez 2005 19:18

Re: TListView-OnMouseMove->richtige ListItem ermitteln?
 
Hallo,

kennst du das Ereignis OnInfoTip() der ListView? Im Parameter Item liefert dir dieses Ereignis das Item, über dem sich die Maus befindet. Oder interpretiere ich deinen Code falsch?

Freundliche Grüße vom marabu

sniper_w 1. Dez 2005 19:26

Re: TListView-OnMouseMove->richtige ListItem ermitteln?
 
Zitat:

Im Parameter Item liefert dir dieses Ereignis das Item, über dem sich die Maus befindet.
TListItem kann ich schon ermitteln und zwar mit dem Code von oben. Nur das Richtige SubItem zu ermitteln, ist das Problemm.

Keldorn 1. Dez 2005 19:35

Re: TListView-OnMouseMove->richtige ListItem ermitteln?
 
Hallo

gugg mal hier:
http://www.delphipraxis.net/internal...=listview+hint

Mfg Frank

teebee 1. Dez 2005 19:43

Re: TListView-OnMouseMove->richtige ListItem ermitteln?
 
Versuch mal zur X-Position in MouseMove die aktuelle Position der horiz. Scrollbar hinzu zu addieren.
Stichwort MSDN-Library durchsuchenGetScrollPos mit SB_CTL und SB_HORZ.

Gruß, teebee

sniper_w 1. Dez 2005 19:45

Re: TListView-OnMouseMove->richtige ListItem ermitteln?
 
@Keldorn: Danke, aber ich habe es schon selbst...und zwar muss ich folgendes tun:
Delphi-Quellcode:
//w := 0;// so war es vorher
w := -GetScrollPos( CurrentListView.Handle, SB_HORZ);// so ist es jetzt
Und es funktioniert. :)

EDIT:
Ja, teebee, so ist es. ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:07 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