固定幅で動的に作成されたチェックボックスとラジオボタン(FMXではVCLではない)を使用して、含まれるテキストに基づいて高さを変更します。 マイチェックボックスとラジオボタンでワードラップが有効になっています。 AutoSizeとWordWrapを有効にすると、TLabelのようなものを得たいと思っています。Delphi FMX TCheckbox/TRadiobuttonオートサイズ
は、私はすでにこれに近づくことができた:
procedure TFMenu.Button1Click(Sender: TObject);
var
ctr: Integer;
hostingComponent: TComponent;
begin
hostingComponent := Form1; { in my case a Frame or Panel or sth. }
for ctr := 0 to pred(hostingComponent.ComponentCount) do
begin
if hostingComponent.Components[ctr] is TRadioButton { or TCheckBox } then
begin
with (hostingComponent.Components[ctr] as TRadioButton) do
begin
Height := 0; { if text or text Width changes this is useful }
while (Height) * (Width - 32)
<=
(Canvas.TextHeight(Text) * 1.25) * Canvas.TextWidth(Text) do
begin
Height := Height + 1;
end;
end;
end;
end;
end;
これは、20と150文字の間でテキストの許容よう何かを作品しかし、私は、これは非常に間違っている知っていると私にはわかりません私がここで紛失しているもの Canvas.TextHeight
と1.25
を掛け合わせると、上記の長さのテキストが見えるようになりましたが、理由はわかりません。 Width - 32
は、チェックボックス/ラジオボタンの画像のサイズのためです。これは処理したいテキストではありません。だから私の質問は含むテキストに基づいて、それらのコンポーネントのHeigthを変更する方法ある
(私は32が正しいだろう、それは現実には異なる可能性が推測しました)。
また、コードを期待どおりに変更するにはどうすればよいですか。その背後にある数学(推測値1.25の乗算を除く)は正しいはずですが、チェックボックス/ラジオボタンの領域がテキストを完全には含みませんが、テキストとしていくらか空き領域があるため、私が使用する領域は間違っているようですブロックではなく単に左ぶれですが、これが重要かどうか、それをどのように処理するかはわかりません。
ありがとうございました。これは私のために働く。興味のある方:元のRadioButtonイメージの幅が24であることをどうでしたか? 私のDPIは100%です。私はHeigthが低すぎると1であったのを見て、要因1.25は推測数でした。Heigthはより多くのテキストが含まれていましたが、大きなテキストの場合、ラジオボタンはテキストのサイズを大きくし、テキストのサイズはたった3文字のラジオボタンを使用していましたほんの数ピクセルでした。しかし、あなたの解決策が私の問題を首尾よく解決したので、その情報は関係ありません。 – qGold
あなたは大歓迎です。 *あなたはどのように知っていましたか?* TRadioButton/TCheckBoxのスタイルデータで見ることができます。テキストメンバーの 'Position.X'プロパティは21です。計算の安全面に3を追加しました。使用したスタイルがデフォルトと異なる場合は、これらの尺度が異なる可能性があるので、私はその答えを編集したことをあなたの質問は思い出しました。 –
よろしくお願いいたします。私があなたが幅を見つけたかどうかについて尋ねた理由は、私のアプリが異なるプラットホームで動くということでした。ユーザーはいくつかの設定を有効にしてサイズを多少変えることができるので、実行時にこれを理想的に取得する必要があります。あなたの答えはこれをカバーしているようです。私はいくつかの誤動作が発生した場合、私はあなたに知らせるでしょう。 – qGold