Einzelnen Beitrag anzeigen

Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#1

TListView SubItem Position genau feststellen

  Alt 7. Jul 2015, 09:49
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?
Dieter
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt. Die 10. summt dazu die Melodie von Supermario Bros.
MfG Captnemo

Geändert von Captnemo ( 7. Jul 2015 um 10:22 Uhr)
  Mit Zitat antworten Zitat