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?