![]() |
Hint über SubItem einer ListView
Hi zusammen, :hi:
Gibt es eine Möglichkeit über einem bestimmten SubItem ein Hint anzuzeigen? Ich habe eine JvListView (ViewStyle := vsReport) und habe auch schon das Ereignis OnInfoTip benutzt, aber dort wird der Hint immer über dem Eintrag in der ersten Spalte gezeigt. Vielleicht kann man ja das Hintfenster irgendwo anders positionieren. :?: Vielen Dank für eure Tipps MFG Lorenz |
Re: Hint über SubItem einer ListView
Hallo Lorenz,
in diesem Thread findest du zwei Ansätze um die Spalte in einer ListView zu ermitteln: ![]()
Delphi-Quellcode:
Getestet habe ich mit TListView - und dort funktioniert es.
uses
CommCtrl; function GetItemAt(lv: TListView; X, Y: Integer; var iSubItem: Integer): TListItem; var hti: TLVHitTestInfo; begin hti.pt := Point(X, Y); iSubItem := ListView_SubItemHitTest(lv.Handle, @hti); if iSubItem >= 0 then begin Result := lv.Items[iSubItem]; iSubItem := hti.iSubItem; end else Result := nil; end; procedure TDemoForm.ListViewInfoTip(Sender: TObject; Item: TListItem; var InfoTip: String); var p: TPoint; li: TListItem; iItem, iSubItem: Integer; begin p := ScreenToClient(Mouse.CursorPos); li := GetItemAt(Sender as TListView, p.X, p.Y, iSubItem); if Assigned(li) then iItem := li.Index else iItem := -1; InfoTip := Format('Item %d SubItem %d', [iItem, iSubItem]); end; Grüße vom marabu |
Re: Hint über SubItem einer ListView
So, erstmal danke für den Lösungsvorschlag und sorry, dass ich jetzt erst antworte ... hatte Urlaub :cheers:
Habe mich grad mal an dem Code versucht, bekomme allerdings jetzt noch einen Fehler. Bei Point(X,Y) steht nun: [Fehler] FRM_Main.pas(2275): ')' erwartet, aber ',' gefunden. Delphi schlägt aber das richtige vor:
Delphi-Quellcode:
function Point(AX, AY: Integer): TPoint;
Meine Delphi-Version ist Delphi 5 Enterprise. Ich hoffe mir kann auch hier jemand weiterhelfen ... vielen Dank. MFG Lorenz |
Re: Hint über SubItem einer ListView
hast du selber eine funktion mit dem namen Point definiert?
ggf. mal hti.pt:=classes.Point(x,y); probieren HTH Frank |
Re: Hint über SubItem einer ListView
Nein, ich habe keine Funktion mit dem Namen Point definiert.
Und das Problem, dass ich im ersten Post geschildert habe, ist jetzt auch erledigt. Für alle die an einem alternativen Code interessiert sind, hier:
Delphi-Quellcode:
Und im FormCreate wird es so zugewiesen:
function TForm_Main.GetCol(X : Integer) : Integer;
var Left, Col: integer; begin Left := 0; for Col := 0 to JvListView1.Columns.Count- 1 do begin if (Left <= X) and (X < (Left + JvListView1.Columns.Items[Col].Width)) then Break; Inc(Left, JvListView1.Columns.Items[Col].Width); end; (* of for *) Result := Col; end; (* of GetCol *) procedure TForm1.JvListView1MouseMove(Sender : TObject; Shift : TShiftState; X, Y : Integer); const LastItem : TListItem = nil; LastColIndex : Integer = -1; var ListView : TJvListView; CurrItem : TListItem; CurrColIndex : Integer; begin ListView := Sender as TJvListView; CurrItem := ListView.GetItemAt(X, Y); CurrColIndex := GetCol(X); if (CurrItem <> LastItem) or (CurrColIndex <> LastColIndex) then begin ListView.Hint := ''; if Assigned(CurrItem) then ListView.Hint := 'Hint'; LastItem := CurrItem; LastColIndex := CurrColIndex; Application.ProcessMessages; end; (* of if *) end; procedure TForm1.DoShowHint(var HintStr : String; var CanShow: Boolean; var HintInfo : THintInfo); begin if ((HintInfo.HintControl = JvListView1) and (HintInfo.HintStr <> '')) then with HintInfo do begin HintColor := RGB(159, 207, 255); ReshowTimeout := 500; end; (* of with *) end;
Delphi-Quellcode:
Application.OnShowHint := DoShowHint;
JvListView1.OnMouseMove := JvListView1MouseMove; MFG Lorenz [Edit]Funktion vergessen[/Edit] |
AW: Hint über SubItem einer ListView
Hallo,
ich habe diesen Beitrag gefunden, um einen eignen Hint anzuzeigen. Diese Lösungen funktionieren gut, solange ich RowSelect Eigenschaft auf True nicht eingestellt habe. Gegebenenfalls wird der Hint nicht richtig angezeigt. Ich habe diese Prozedur bearbeitet:
Code:
und im Form.Caption werden richtige Daten des iItems und iSubItems angezeigt, und zwar sowohl wenn RowSelect eines TreeView auf True als auch auf False eingestellt ist. Der Hint wird hingegen nur bei False richtig angezeigt. Mache ich etwas falsch? Ich arbeite unter Delphi 7.
procedure TForm1.ListView1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer); var li: TListItem; iItem, iSubItem: Integer; begin li := GetItemAt(Sender as TListView, X, Y, iSubItem); if Assigned(li) then iItem := li.Index else iItem := -1; Caption := Format('Item %d SubItem %d', [iItem, iSubItem]); if iitem <> -1 then begin if iSubItem = 0 then ListView1.Hint:=ListView1.Items[iitem].Caption else ListView1.Hint:=ListView1.Items[iitem].SubItems[iSubItem-1]; end; end; Vielen Dank für Hilfe im Voraus |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:37 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-2025 by Thomas Breitkreuz