Delphi の TSplitter がアレなので TSpTBXSplitter を使ってみる

Delphi の Splitterコンポーネント、サイズ変更のため使用するなら問題ないのだが、対象先がサイズ 0 になるような使い方の場合、スプリッタの移動やフォームのリサイズをきっかけに突然使用不能になったりする
適当なタイミングで、対象先とスプリッタ位置を修正したりしてみるが、対象がサイズ 0 の場合、位置関係がハッキリせず、問題が解消したりしなかったりと昔からイライラの素だったりした(現在も変わらない様子)

で、ちょうど入れていた SpTBX のスプリッタを使ってみたら、位置関係不明の状態があっさり解決
MinSizeプロパティの解釈が違うので、ソコだけ修正した

MinSize プロパティ
  • TSplitter は、この値未満になると対象のサイズが 0になる
    サイズを規制するには対象の Constraints で指定
  • TSpTBXSplitter では、この値未満にはスプリッタが移動しなくなる
    対象の Constraints 規制値が実行時に確認すると 0 にされてる
で、TSplitter の MinSize プロパティと同じ動きは
procedure TDocForm.SpTBXSplitter1Moved(Sender: TObject);
begin
    if (Panel1.Height < 30) then begin
        Panel1.Height := 0;
    end;
end;

procedure TDocForm.SpTBXSplitter1Moving(Sender: TObject; var NewSize: Integer; var Accept: Boolean);
begin
    Accept := (NewSize > 25);
end;
のように、OnMoving の Acceptに余裕をもたせて、OnMoved で閾値以下は 0 にする

コメント