グループ内で唯一のDelphi TSpeedButtonが押されたままになるようにする方法

StackOverflow https://stackoverflow.com/questions/202702

  •  03-07-2019
  •  | 
  •  

質問

TSpeedButtonにこのプロパティがある理由はわかりませんが、TSpeedButtonが特定のグループインデックスの唯一のボタンである場合、「AllowAllUp」かどうかに関係なく、TSpeedButtonは押されたままになりません。が押されます。ジェダイのコントロールで十分かもしれませんが、うまくいけば修正があります。ヘルプや逸話をいただければ幸いです。

ところで、私は(まだ)Delphi 7を使用していますが、これが全面的な難問かどうかはわかりません。

役に立ちましたか?

解決

ここにはD7がありませんが、D2006では、GroupIndexの値が>の場合、Speedbuttonは押したままになります。 0。

これが希望する動作でない場合は、OnClick-EventhandlerでDown-Propertyを手動で設定できます(GroupIndexが0であることを確認してください)。

他のヒント

Delphi 7(ビルド4.453)で試しました:

  • 新しいアプリケーションを作成
  • フォームに TSpeedButton を追加
  • set AllowAllUp:= true;
  • set GroupIndex:= 1;
  • アプリケーションを実行

ボタンをクリックすると、他のコードを必要とせずにダウン状態に切り替わります。

knight_killerは正しいです。デルファイのどのバージョンでも動作することを教えてください:

object SpeedButton1: TSpeedButton
  Left = 152
  Top = 384
  Width = 23
  Height = 22
  AllowAllUp = True
  GroupIndex = 99
end

Delphiが作業を行うため、「コードを記述しないでください」

IDEで、すべてのSpeedButtonsを選択します グループとして動作し、全体を設定したい グループの" GroupIndex" 「0」以外の何かに; これでコードはありません-NADA !!

うーん、奇妙なことに、これを何度も使用して成功したことを覚えています。おそらく、SpeedButtonの Down プロパティで遊んでみてください。クリックすると自動的に切り替わるとは思わない--- Down を明示的に切り替える必要があります...

[edit: Checked Down に置き換えました--- TSpeedButtonには Checked プロパティがありません、申し訳ありません!]

これを機能させるために、Downプロパティは常にOnClickイベントでダウンしているため、Downプロパティを切り替えることはできません。別の値が必要です:

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
  MyBoolProperty := not MyBoolProperty;
  SpeedButton1.Down := MyBoolProperty;
end;

トリックは、GroupIndexを一意の値に設定し、AllowAllUpをtrueに設定することです。 最初のものを忘れた場合、ダウンしたままにならず、2番目のものを忘れた場合、一度ダウンすると、アップしたままになりません。

AllowAllUpをTrueに設定します。

GroupIndexを0以外に設定します。

すべてをOnClickに保持するには、試してください

 with Speedbutton1 do
 begin
      if tag = 1 then tag := 0 else tag := 1;
      down := (tag = 1);
 end;

GroupIndex はボタンをグループ化します。グループ内の1つのボタンのみがアクティブになります。それらはすべて、 0 よりも高い同じインデックスを持つ必要があります。

AllowAllUp では、ボタンを2回連続でクリックすると、ボタンを上下に切り替えることができます。

自分の問題の解決策を探していましたが、これは同じものだと思います。 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;

これにより、ボタンがクリックされるとボタンが下に切り替わり、もう一度クリックされるとボタンが上に切り替わります。

何か助けになることを願って

AllowAllupをtrueに、Downをfalseに設定します。

その後、 OnClick イベントで:

....
btn.AllowAllUp := not btn.AllowAllUp;
btn.Down       := not btn.Down;
....
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top