TListViewの vsReportで 2つある列の右側を最大まで広げるという処理を作っているのですが
DelphiXE5とDelphi12でコンパイルしているのですが結果が変わります
ListViewとButtonをフォームに置いて
procedure TForm1.Button1Click(Sender: TObject);
var
d : TListColumn;
dl : TListItem;
begin
ListView1.ViewStyle := vsReport;
d := ListView1.Columns.Add();
d.Caption := 'A';
d.Width := 100;
d := ListView1.Columns.Add();
d.Caption := 'B';
d.Width := ListView1.ClientWidth - 100; // 問題の所
dl := ListView1.Items.Add();
dl.Caption := '1';
dl := ListView1.Items.Add();
dl.Caption := '2';
end;
環境A
Windows10 テキストサイズ 125%
DelphiXE5、Delphi10
結果:問題なし
環境B
Windows11 テキストサイズ 200%
Delphi12.1、Delphi12.2
結果:Width の値が想定の2倍になる
解決方法として 環境Bの場合のみ
d.Width := (ListView1.ClientWidth - 100) div 2 -2; // これで直る
としているのですが横幅の設定で何か別の方法を使わないといけないのでしょうか?
※別件になりますが縦幅も同じような現象が発生します
試してないので、外しているかもしれませんが、
> d.Width := ListView1.ClientWidth - 100; // 問題の所
の代わりに、
ListView_SetColumnWidth(ListView1.Handle, 1, LVSCW_AUTOSIZE_USEHEADER);
を使った場合、結果は同じになりますか?
サンプルありがとうございます
環境Aの方でためしたところ
「ListView_SetColumnWidthが定義されていません」と出ます
環境Bの方は場所が違うので後日試します
>「ListView_SetColumnWidthが定義されていません」と出ます
uses に、CommCtrl を追加した場合は、どうなりますか?
ComCtrlsと間違えてました
CommCtrlを追加して実行したところ環境Aの方で正常に動作しました
環境Bの方は場所が違うので後日結果を報告します
環境Bで試したところ正常に動作したのですが
こちらが提示したサンプルの方も必要最小限のソースにしたせいか正常に動作するので
週末に改めて現象が発生しているソースに組み込んで試したいと思います
現象が発生していた環境で試してみたところ正常に最大の幅の設定にすることができました
ありがとうございます
ツイート | ![]() |