>>36
>ボタンをクリックすると「へこんだ状態」
>再度ボタンをクリックすると「でっぱった状態」といった、

これは、本来、チェックボックスの機能です。「へこんだ状態」が Checked
:= true; に相当しています。見かけをお望みのようにするには、スタイルに
BS_PUSHLIKE を加えます。たとえば、Form1 に CheckBox1 を置いて

procedure TForm1.FormCreate(Sender: TObject);
var
ST:LongInt;
begin
ST := GetWindowLong(CheckBox1.Handle,GWL_STYLE);
ST := ST or BS_PUSHLIKE;
SetWindowLong(CheckBox1.Handle,GWL_STYLE,ST);
end;

とすると外観がプッシュボタンのチェックボックスになります。
TCheckBox を継承して、property Pushlike:Boolean のような
プロパティーを持つようなコンポーネントを作るのは簡単です。