2016-08-14 9 views
0

私はいくつかのTSpeedButtonを複数の用途を持つフォームに持っています。あるモードでは、1つのボタンをクリックしたくないので、 "Enabled:= False;"と設定します。 Enabledの変更ボタン "Down"ステータスの修正

しかし、それ はダウンだったと私はEnabledにそれを強制場合:= Falseのそれはアップ状態になります。現在の状態を視覚的に表示するために必要なので、現在のアップ/ダウン状態に影響を及ぼす「有効」を防止するにはどうすればよいですか。

+0

私はデルファイ5を持っていませんが、XE8では有効にしてもダウンには影響しません。 – Loghman

答えて

4

要するに、標準TSpeedButtonであなたが求めていることをすることはできません。これはコード化された方法と同じです。

あなたはTSpeedButtonにfalseにEnabledを設定すると、ボタンは関係なく、そのDownプロパティの無効な状態で描かれます。 TSpeedButton.Paint()メソッドは、StateプロパティをbsDisabledに強制し、現在のアップ/ダウン状態をすべて消去します。 Delphi 5では、これによりボタンが上に描かれます。より現代的なDelphiのバージョンでは、ビジュアルスタイルが有効になっている場合、ボタンはUpまたはDownではないフラットな外観で描画されます。

  1. TSpeedButtonから新しいクラスを派生し、あなた自身が、しかし、あなたがしたいボタンをカスタム描くことができるように仮想Paint()メソッドをオーバーライド:

    この動作を変更する唯一の方法は、いずれかのことです。ただし、のボタン全体をボタンで描画する必要があります。

  2. 、VCLのButtons.pasソースファイル(XE2でVcl.Buttons.pas以降)のコピーを作成し、プロジェクトにコピーしたファイルを追加します(ランタイムパッケージが無効になっていることを確認してください)、その後、あなたはしかし、あなたのTSpeedButton.Paint()implementation自体を変更することができます欲しいです。これがプロジェクトのすべてのTSpeedButtonに影響することをご存知でしょうか。

+0

ありがとう、ちょっとだけ疑問がある.XE2にソースを手に入れる方法は?確かに私はXE2を買う必要はありませんか? :)私は実際には、少し大きめのパネルにボタンを置くことでそれを回避し、パネルを無効にしました。無効にするとパネルの色が赤に変わり、ボタンの周りに2ピクセル幅の線があり、ビジュアルのみであることを示します。 – X10WannaBe

+0

はい、XE2のVCLソースコードを取得するには、XE2を購入する必要があります。それ以外のバージョンでも問題ありません。 –

関連する問題