Hallo,
ich möchte gerne einige Informationen gruppiert in einem TListView anzeigen.
Im Header jeder Gruppe befindet sich eine
URL, die ich durch folgenden Code "anklickbar" erscheinen lasse:
Delphi-Quellcode:
procedure TForm1.ListView1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var
i: Integer;
r: TRect;
begin
for i := 0 to ListView1.Groups.Count - 1 do
begin
if ListView_GetGroupRect(ListView1.Handle, i, LVGGR_LABEL, r) = 1 then
begin
// if cursor is over group label, change cursor icon
// and set header index for mouse up
if (r.Top < Y) and (r.Bottom > Y) and (r.Left < X) and (r.Right > X) then
begin
ListView1.Cursor := crHandPoint;
FGroupHeaderIndex := i;
Break;
end
else
begin
ListView1.Cursor := crDefault;
FGroupHeaderIndex := -1;
end;
end;
end;
end;
Eigentlich alles kein Problem. Ich benutze LVGGR_LABEL, da sich der Cursor ändern soll, wenn er sich genau über dem Text befindet. Allerdings stimmen die Angaben, die mir ListView_GetGroupRect im TRect zurückgibt, nicht ganz, die Breite ist im Verhältnis zur Textlänge zu gering. Zur Verdeutlichung hab ich mal zwei Panels positionieren lassen, siehe Bild im Anhang. Ab dort, wo die Panels aufhören, ist der Cursor wieder crDefault, obwohl er noch über der
URL ist.
Wie komme ich am besten an die korrekte Breite des Labels?
Vielen Dank,
Björn.