Einzelnen Beitrag anzeigen

Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.028 Beiträge
 
Delphi 12 Athens
 
#14

AW: ListView Spaltenbreite bei Form onResize neu berechnen?

  Alt 18. Jan 2017, 11:14
Folgender Code im Listview-Resize könnte ein Ansatz sein. Dabei werden die Prozente nicht global abgelegt, sondern aus der aktuellen Aufteilung ermittelt. Ausnahme ist die initiale Anzeige.
Delphi-Quellcode:
procedure TForm154.ListView1Resize(Sender: TObject);
var
  I: Integer;
  widthArr: TArray<Double>;
  cnt: Integer;
  totalWidth: Integer;
begin
  cnt := ListView1.Columns.Count;
  SetLength(widthArr, cnt);
  totalWidth := 0;
  for I := 0 to cnt - 1 do begin
    totalWidth := totalWidth + ListView1.Columns[I].Width;
  end;
  if totalWidth = 0 then begin
    { initiale Aufteilung festlegen }
    widthArr[0] := 0.16;
    widthArr[1] := 0.16;
    widthArr[2] := 0.20;
    widthArr[3] := 0.20;
    widthArr[4] := 1 - Sum(Copy(WidthArr, 0, 4));
  end
  else begin
    for I := 0 to cnt - 1 do begin
      widthArr[I] := ListView1.Columns[I].Width/totalWidth;
    end;
  end;
  totalWidth := 0;
  for I := 0 to cnt - 2 do begin
    ListView1.Columns[I].Width := Round(ListView1.ClientWidth*widthArr[I]);
    totalWidth := totalWidth + ListView1.Columns[I].WidthType;
  end;
  { wegen Rundungsfehlern bekommt die letzte Spalte einfach den Rest }
  ListView1.Columns[cnt - 1].Width := ListView1.ClientWidth - totalWidth;
end;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat