Delphi Programming / Object Pascal
サイトのトップページへ リンクのページへ ロゴマーク
[掲載 2022年10月16日] [更新 2022年10月16日] Delphi サンプルプログラム集
788_TTreeView の行の高さ ( アイテムの高さ ) 設定と取得
動作確認等 Windows 10 ビルド 19043 Pro 64 bit + Delphi XE5(UP2) Pro VCL-32
788_TTreeView_ItemHeight.zip [909 KB] 2022年10月16日版 (EXE 同梱)







TTreeView の行の高さ ( アイテムの高さ ) 設定と取得


TTreeView の行 (アイテム) の高さの設定と取得のサンプルです.Winapi.CommCtrlユニットに専用の関数があります.それらを利用したサンプルです.
TListView では,StateImages プロパティに TImageList を指定すると,その TImageList の Height プロパティの値で行の高さを変更することができます.TTreeView の StateImages プロパティに TImageList を指定しても,行の高さを変更することはできません.





01_専用の関数を使用して TTreeView の行の高さを設定 / 取得


TTreeView の行の高さは,TreeView_SetItemHeight 関数で設定できます.
TTreeView の行の高さは,TreeView_GetItemHeight 関数で取得できます.
このサンプルは,Button1 をクリックすると,行の高さを 2 ピクセル単位で増加させます.これで実行時に動作を確認できるようにしています.

TTreeView.SmallImages プロパティに TListImages を指定していても,TreeView_SetItemHeight 関数を使用すれば,行の高さを任意の値に設定できます.



図1
EXE 起動時の画面
  • 行の高さはデフォルトの値
  • TTreeView.Font.Size の値によって異なる
図2
[Button1] クリックで行の高さを変更
  • 最初は 10
  • [Button1] クリックのたびに 2 ピクセル増加
図3
行の高さを 30 にした状態

リスト1
TTreeView 専用の関数を使用して行の高さを設定 / 取得
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes,
  Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.StdCtrls,
  Vcl.ComCtrls;

type
  TForm1 = class(TForm)
    TreeView1: TTreeView;
    Button1: TButton;
    Panel1: TPanel;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private 宣言 }
  public
    { Public 宣言 }
  end;

var
  Form1: TForm1;

implementation

uses
  Winapi.CommCtrl;

{$R *.dfm}

//=============================================================================
//  フォーム生成時の処理
//  テスト用のデータをセット
//=============================================================================
procedure TForm1.FormCreate(Sender: TObject);
var
  LText1 : string;
  LText2 : string;
  LNode1 : TTreeNode;
  LIidx  : Integer;
  LJidx  : Integer;
begin
  TreeView1.Items.BeginUpdate;

  for LIIdx := 0 to 2 do begin
    LText1 := 'Item' + Format('%.2d',[LIIdx + 1]);
    LNode1 := TreeView1.Items.Add(nil, LText1);
    for LJidx := 0 to 2 do begin
      LText2 := LText1 + '-' + Format('%.3d',[LJidx + 1]);
      TreeView1.Items.AddChild(LNode1, LText2);
    end;
  end;

  TreeView1.Items.EndUpdate;

  Button1Click(nil);
end;

//=============================================================================
//  TreeView1 の行の高さの設定と取得
//  uses に Winapi.CommCtrl が必要
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
{$WRITEABLECONST ON}
const
  LItemHeight : Integer = 10;
{$WRITEABLECONST OFF}
var
  LHeight : Integer;
begin
  if TreeView1.Items.Count < 1 then Exit;

  if Sender <> nil then begin
   // 行の高さを変更して,次の高さの値を 2 ピクセル増やす
   TreeView_SetItemHeight(TreeView1.Handle, LItemHeight);
   Inc(LItemHeight, 2);
 end;

 // 行の高さを取得して表示
 LHeight := TreeView_GetItemHeight(TreeView1.Handle);
 Panel1.Caption := 'ItemHeight : ' + IntToStr(LHeight);
end;

end.