SpeedButtonのDownでOnOffをするには?

解決


  2007-05-20 01:53:15  No: 26172

よろしくお願いします。
1個のSpeedButtonでクリックしたら押されっぱなし、それをクリックしたら出っ張る(解放する)したいのですがうまくいきません。
例えば、ToolButtonでは
if ToolButton1.Down=false then ToolButton1.Down:= true else ToolButton1.Down:=false;ではうまくいくのですが、
SpeedButtonでやりたいのですが、過去ログの
「ON OFF ボタンコントロールにするには?」でGroupIndex、AllowAllUp、Down
の各プロパティの組み合わせで行けるかと回答されています。
どのように組み合わせるのかといろいろやっているのですが・・・。
ヘルプを見ても書いてあることがよく飲み込めません。GroupIndexを1にしておけば押されっぱなしになるのですが、解放ができません。
よろしくお願いします。


igy  2007-05-20 02:30:33  No: 26173

AllowAllUpプロパティはtrueですか?


  2007-05-20 07:55:39  No: 26174

igyさん、ありがとうございます。
AllowAllUpをTRUEにして、GroupIndexを1にして、下記のようにしていますが
凹み状態にもなりません。

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
     if SpeedButton1.Down= false then
        SpeedButton1.Down:=true
     else
        SpeedButton1.Down:=false;
end;
何か初歩的な設定を忘れているのでしょうか?
よろしくお願いします。


igy  2007-05-20 08:09:17  No: 26175

AllowAllUpをTRUEにして、GroupIndexを1にするだけで、
OnClickイベントでは、何もしない(Downプロパティを変更しない)
場合はどうですか?


del5  2007-05-20 09:42:29  No: 26176

こんなのはダメですか?

https://www.petitmonte.com/bbs/answers?question_id=849
(トグルボタン風?)


  2007-05-20 21:42:40  No: 26177

みなさんありがとうございます。
igyさんの、AllowAllUpをTRUEにして、GroupIndexを1にするだけで、・・に対しては
起動時何もしない状態ではボタンはあがったままです。
クリックしても下がったままになりません。

del5さんのご回答については、これは過去ログで一応見ましたが
SpeedButtonを選んだ理由にボタンにImageとテキストを表示したいためで諦めました。
それから、起動時はCheckBoxの形をしているのですが最初からボタンの形にするにはどうしたらいいのでしょうか?。
procedure TForm1.CheckBox1Click(Sender: TObject);
begin
    SetWindowLong(CheckBox1.Handle, GWL_STYLE, GetWindowLong(CheckBox1.Handle, GWL_STYLE) or BS_PUSHLIKE);
end;
よろしくお願いいたします。


igy  2007-05-20 22:29:07  No: 26178

>igyさんの、AllowAllUpをTRUEにして、GroupIndexを1にするだけで、・・に対しては
>起動時何もしない状態ではボタンはあがったままです。
>クリックしても下がったままになりません。

こちらで試したやり方では、うまくいったのですが・・・

新規プロジェクトに、SpeedButtonを追加し、
AllowAllUpをTRUEにして、GroupIndexを1にし、コンパイル。
クリックしたら下がり、もう一度クリックしたら戻りました。

Delphi7とDelphi2006で試しました。


  2007-05-20 23:28:48  No: 26179

igyさん、ありがとうございます。
私も新規プロジェクトにSpeedButtonだけ置いて、やっているのですがうまくいきません。
Windows XP  Delphi 6 Personalです。
SpeedButtonのOnClickイベントに
     if SpeedButton1.Down= false then SpeedButton1.Down:=true
     else SpeedButton1.Down:=false;
を実行しているだけです。
いいはずなのですが、不思議です。
他の方法を考えてみます。
ありがとうございました。


  2007-05-20 23:53:42  No: 26180

igyさん、うまくいきました。
AllowAllUpをFALSEにしておいて、GroupIndexを0にしておいて、
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
     if SpeedButton1.Down= false then
     begin
        SpeedButton1.GroupIndex:=1;
        SpeedButton1.AllowAllUp:=false;
        SpeedButton1.Down:=true;
     end
     else
     begin
        SpeedButton1.AllowAllUp:=true;
        SpeedButton1.GroupIndex:=0;
        SpeedButton1.Down:=false;
     end;
end;
でボタンのOnOffができました。
ありがとうございました。


スルーできない人  2007-06-01 21:47:40  No: 26181

OnClickイベントが発生するときにはDownは変更された後なので、
>      if SpeedButton1.Down= false then SpeedButton1.Down:=true
>      else SpeedButton1.Down:=false;
で元に戻っている気がします。

> igyさんの、AllowAllUpをTRUEにして、GroupIndexを1にするだけで、・・に対しては
> 起動時何もしない状態ではボタンはあがったままです。
GroupIndexが0以外だと、設計時にDownをTrueにできます。

解決済みのようなので余計かもしれませんが、参考にしていただければと思います。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加