凹凸が切り替わるトグルボタンを作る方法
51 ToggleDownButton 動作確認 Delphi2007 更新日 2008/01/29(火)

一度押すとへこみ、もう一度押すと盛り上がる
そのままくぼんだままのDown状態になる
トグルボタンを作成するのは簡単な2つのやり方があります。

一つはSpeedButtonを使うやり方です。

SpeedButtonを次のように設定するとよいでしょう。
────────────────────
object SpeedButton1: TSpeedButton
  Left = 10
  Top = 10
  Width = 100
  Height = 30
  AllowAllUp = True
  GroupIndex = 1
end
────────────────────
GroupIndexは適当に他のSpeedButtonとぶつからない数にしてください。
こうすると、DownプロパティでUpDownが切り替えられますし
何も記述することなくトグルボタンが実現できます。


もう一つはCheckBoxをボタン状に変えてしまう方法です。

CheckBoxを次のように設定してFormCreateも記述してください。
────────────────────
object CheckBox1: TCheckBox
  Left = 10
  Top = 50
  Width = 100
  Height = 30
  Caption = 'CheckBox1'
  TabOrder = 0
end

procedure TForm1.FormCreate(Sender: TObject);
begin
  SetWindowLong(CheckBox1.Handle, GWL_STYLE,
    GetWindowLong(CheckBox1.Handle, GWL_STYLE) or BS_PUSHLIKE);
end;
────────────────────
これで、CheckBox.Check := True;だと
ボタンが凹んだ状態になります。

SpeedButtonを使うとフォーカスを得られないボタンになるので
CheckBoxを使う方がWindowsとしては標準っぽくなります。


CheckBoxをトグルボタンに変更した時の動作画面です。
設計時にはこのようになっています



実行時はこのようになります。



高さが低かったのでボタンと合わせておきます。
SpeedButtonのDown状態も比較にどうぞ。