Genau daran arbeite ich gerade aber es geht alles schief.
Meine Idee ist aktuell WMEnterSizeMove-Event die aktuellen, prozentualen Breiten aller Spalten in ein extra Array zu schreiben
und dann im FormResize-Event wieder umzurechnen. Klappt aber nicht ganz.
Delphi-Quellcode:
procedure TForm1.WMEnterSizeMove(var msg: TMessage);
var
i: Byte;
begin
iAllColWidth := 0;
for i := 0 to ListView1.Columns.Count - 1 do
Inc(iAllColWidth, ListView1.Columns[i].Width);
SetLength(lvDefaultWidthInPercent, Length(aDefaultSettings.lvDefaultWidthInPercent));
for i := 0 to ListView1.Columns.Count - 1 do
lvDefaultWidthInPercent[i] := getPercent(iAllColWidth, ListView1.Column[i].Width);
inherited;
end;
// OnResize (Form)
for i := 0 to ListView1.Columns.Count - 1 do
ListView1.Columns[i].Width := getPercentageValue(ListView1.Width, lvDefaultWidthInPercent[i]) - 2;
VirtualTreeView ist wirklich eine tolle Sache. Nur beherrscht die auch die verschiedenen Ansichten wie die ListView? Konnte ich auf deren Webseite noch nicht ausfindig machen.
Edit:
im Prinzip funktioniert alles mit obigen Code nun wie gewüscht. Einziges Problem ist, dass ich getPercentageValue als Base ListView1.Width übergebe und somit alle Spalten insgesamt immer maximal so breit sein können wie die ListView. iAllColWidth kann ich zwar übergeben, aber dann werden die Spalten kleiner statt größer