2

私のアプリケーションにはTSpeedButtons、色を選択するためのいくつかのものがあり、それぞれの選択肢を の色で表示したいと考えていTSpeedButtonます。

の色を変更する方法について、Stackoverflow でこの回答を見つけましたTButton。2番目の答え(色を動的に変更する)は、私が探しているソリューションのようです。次のように書かれています。

var r: TRectangle;
begin
// Find the background TRectangle style element for the button
   r := (Button1.FindStyleResource('background') as TRectangle);
   if Assigned(r) then
   begin
      r.Fill.Color := claBlue;
   end;
end;

これはもう機能しません (私は XE5 を使用していますが、これは XE2 ですか?)。r := ...次のステートメントで例外を生成します。

"illegal cast". 

FindStyleResource は FMXObject を返します。

TRectangle は TShape->TControl->TFMXObject です。

TControl にはキャストできますが、TShape にはキャストできません。ご参考までに、Button1 は TButton です。

の色を変更する方法を知っている人はいTSpeedButtonますか?

余談ですが、どのタイプのオブジェクトが正確に返されているかを判断する方法はありますか? デバッガーではわかりませんでした。

4

2 に答える 2

3

あなたがリンクした質問への答えは、スタイルが完全に形状などから構築されたベクタースタイルに関連しています(TRectangleなど)。

FireMonkey の新しいバージョンでは、「システム」スタイル (OS の外観を模倣する) とその他のいくつかのスタイルでビットマップが使用されます。

ビットマップ スタイルを編集する場合は、スタイル内のビットマップ イメージを見つけて編集し、ボタンのスタイルをやり直し/編集して新しいイメージを使用する必要があります。(モバイルを使用している場合、これはおそらく難しいので、試してはいけません)。

もう 1 つの方法は、Delphi で提供されているビットマップ スタイルのいずれかに変更することです。これらは、Delphi インストールの redist/styles/fmx フォルダにあります。

オブジェクトのクラスについては、他のコメントに従って、返されたオブジェクトの ClassName プロパティを調べます。

ただし、すべてのスタイルに「背景」というオブジェクトがあるわけではないことに注意してください。オブジェクトの名前とそのクラスの両方が、スタイルによって簡単に変わることがあります。オブジェクトを抜き取りたいスタイルを見て、そこに何があるかを確認する必要があります。(オブジェクト名 ('background') は StyleName プロパティにあることに注意してください)。

于 2013-10-25T19:16:58.870 に答える
1

代わりに、プロパティTColorButtonを直接公開する a を使用する方がはるかに簡単です。コンポーネントパレットColorのページにあります。ColorsIDE のフォーム デザイナーの新しい FMX フォームの 2 つを次に示します。

2 つの TColorButton の画像

「返されるオブジェクトのタイプ」に関しては、デバッガーまたは戻り値のShowMessageを使用できます。TFMXObject.ClassName

var 
  Obj: TFmxObject; 
begin 
  Obj := Button1.FindResource('background'); 
  if Assigned(Obj) then 
    ShowMessage(Obj.ClassName); 
end; 
于 2013-10-25T23:49:09.630 に答える