TSpeedButton にこのプロパティがある理由はわかりませんが、TSpeedButton が特定のグループ インデックスの唯一のボタンである場合、「AllowAllUp」が押されているかどうかに関係なく、押されたままになりません。ジェダイのコントロールで十分かもしれませんが、いくつかの修正があることを願っています. どんな助けや逸話も大歓迎です。
ところで、私は(まだ)Delphi 7を使用していますが、これが全体的な難問であるかどうかはわかりません。
ここには D7 はありませんが、D2006 では、GroupIndex の値が 0 より大きい場合、Speedbutton が押されたままになります。
これが希望する動作でない場合は、OnClick-Eventhandler で Down-Property を手動で設定できます (GroupIndex が 0 であることを確認してください)。
Delphi 7(ビルド4.453)で試してみました:
TSpeedButton
フォームに追加AllowAllUp := true;
GroupIndex := 1;
ボタンをクリックすると、他のコードを必要とせずにダウン状態に切り替わります。
ナイトキラーは正しいです。どのバージョンの Delphi でも動作することがわかります。
object SpeedButton1: TSpeedButton
Left = 152
Top = 384
Width = 23
Height = 22
AllowAllUp = True
GroupIndex = 99
end
Delphi がその作業を行うので、「コードを書かないでください」。
IDE で、グループとして操作するすべての SpeedButton を選択し、グループ全体の「GroupIndex」を「0」以外に設定すると、完了です -- コードなし -- NADA !!
これを機能させるには、OnClick イベントで常にダウンしているため、Down プロパティを切り替えることはできません。別の値が必要です。
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
MyBoolProperty := not MyBoolProperty;
SpeedButton1.Down := MyBoolProperty;
end;
うーん、奇妙なことに、これをかなりの回数使用して成功したことを覚えています。おそらく、SpeedButton のDown
プロパティを試してみる必要がありますか? クリックしても自動的にトグルするとは思わない---明示的にトグルする必要があるDown
と思います...
[編集: に置き換えChecked
--- Down
TSpeedButton にはChecked
プロパティがありません。申し訳ありません!]
私は自分の問題の解決策を探していましたが、これは同じようなものだと思います。SpeedButtonをスイッチのように上下の状態に切り替えたいので、プロパティを設定してこれを管理しました。
AllowAllUp := True;
GroupIndex := 1;
それからOnClick
私が書いたボタンの場合:
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
if( SpeedButton1.AllowAllUp ) then
begin
SpeedButton1.AllowAllUp := False;
SpeedButton1.Down := True;
end else
begin
SpeedButton1.AllowAllUp := True;
SpeedButton1.Down := False;
end;
end;
これにより、ボタンをクリックするとボタンが下に切り替わり、もう一度クリックするとボタンが上に切り替わります。
それが何か助けになることを願っています
秘訣は、GroupIndex を一意の値に設定し、AllowAllUp を true に設定することです。最初のものを忘れると、ダウンしたままになることはありません。
AllowAllup を true に設定し、Down を false に設定します。
次に、OnClick
イベントで:
....
btn.AllowAllUp := not btn.AllowAllUp;
btn.Down := not btn.Down;
....