Ich stehe wieder vor einem kleinen Problem.
Ich habe eine ListView mit ein paar Spalten. Sagen wir der einfachheithalber mal 5.
Aktuell ist es so, dass ich in einem Array in Prozent stehen habe, wie breit jede Spalte beim Form OnResize sein soll.
aColumnDefWidth: array[0 .. 4] of Byte = (16, 16, 20, 20, 25); // = 97%
(Edit: [0 .. 4] hinzugefügt, vergessen gehabt)
Mein Helfer:
Delphi-Quellcode:
function getPercentageValue(const aBase: Extended; const aPercentage: Extended): Int64;
begin
if (aPercentage > 0) and (aBase > 0) then
Result := Trunc(aBase / 100 * aPercentage)
else
Result := 0;
end;
Und im FormResize dann in etwa
Delphi-Quellcode:
for i := 0 to ListView1.Columns.Count - 1 do
ListView1.Columns[i].Width := getPercentageValue(ListView1.Width, aColumnDefWidth[i]) - 2;
Das funktioniert
wunderbar. Beim verändern der Größe meines Formulars werden alle Spalten genau so groß (in Prozent) gemacht, wie ich es in aColumnDefWidth definiert habe.
Nun zum Problem bzw. zur Frage:
angenommen ich verändere die Spaltenbreite manuell im ListView zur Laufzeit - wie schaffe ich es, dass die prozentuale von mir zur Laufzeit veränderte Breite beibehalten wird?