Hi,
wie kann ich ein TRect eines SubItems in einem TListView korrekt feststellen?
Mit folgender Funktion hole ich mir das TRect zur Zeit:
Delphi-Quellcode:
r:=lv1.Items[i].DisplayRect(drBounds);
InlineCheckbox.BoundsRect:=ShrinkToColumn(lv1, 5, r);
.
.
.
function Tfrm_mitarbeiterT.ShrinkToColumn(lv: TListView; Col: Integer;
r: TRect): TRect;
var
i, l: Integer;
begin
Result:=r;
if Col>0 then
begin
l:=0;
for I := 0 to col-1 do
if lv.Columns[i].Width>0 then
l:=l+lv.Columns[i].Width else
l:=l+(lv.Columns[i].Width * -1); //Zum Testen, weil unsichtbare Columns teilweise negative
//Werte haben
Result.Left:=r.Left+l;
end;
Result.Right:=Result.Left+lv.Columns[Col].Width;
end;
Nun ist es aber so, dass die Column 0 auf Autosize steht, und sie sich verkleinert, bis sie eine Width von 1 hat. Wenn man dann weiter verkleinert, bekommt sie eine Width von -1, was zeichnerisch an die optimale Spaltenbreite angepasst wird. Wen man jetzt weiter verkleinert, geht die Width weiter in den negativen Bereich, je nach weiterer Verkleinerung. So komme ich dann aber rechnerisch nicht mehr an die genaue Position des SubItems.
Gibt es dafür eine bessere Lösung?