ラジオグループの複数列について

解決


檸檬  2007-11-10 05:23:13  No: 28344

いつもお世話になっています。

初歩的な質問なのかもしれませんが…
ラジオグループで、複数列の項目を横⇒縦の順に並べたいのですが可能でしょうか?

例.Items = aaa, bbb, ccc, ddd, eee  と格納されている
   colums = 3

  -----------------------
 | ○aaa  ○bbb  ○ccc
 | ○ddd  ○eee

こんなイメージなのですが、どうでしょうか?
よろしくお願いします。

環境:WindowsXP、Delphi2007


HOta  2007-11-10 06:11:10  No: 28345

TRadioGroupでは出来ませんので、グループボックスにTRadioButtonをならべるしかないですね。


KHE00221  2007-11-10 16:55:32  No: 28346

KHE00221 です

TRadioGroup の Button は RadioGroup.Butttons で操作する事が可能ですのでボタンの座標を直接変更する事により横向きに配置する事が可能です

(*) RadioGroup の Items に追加されると元に戻ってしまいます

var
   I,X,TopMargin,ButtonWidth,ButtonHeight,ButtonsPerCol : Integer;
   DC : HDC;
   SaveFont : HFont;
   Metrics: TTextMetric;
begin
   DC := GetDC(0);
   SaveFont := SelectObject(DC, Font.Handle);
   GetTextMetrics(DC, Metrics);
   SelectObject(DC, SaveFont);
   ReleaseDC(0, DC);

   ButtonsPerCol := (RadioGroup1.Items.Count + RadioGroup1.Columns -1) div RadioGroup1.Columns;
   ButtonWidth   := (RadioGroup1.Width - 10) div RadioGroup1.Columns;
   I := RadioGroup1.Height - Metrics.tmHeight - 5;
   ButtonHeight := I div (ButtonsPerCol);
   TopMargin := Metrics.tmHeight + 1 + (I mod ButtonsPerCol) div 2;
   for I:=0 to RadioGroup1.Items.Count -1 do
   begin
     RadioGroup1.Buttons[I].Left   := (I mod RadioGroup1.Columns) * ButtonWidth  + 8;
     RadioGroup1.Buttons[I].Top    := (I div RadioGroup1.Columns) * ButtonHeight + TopMargin;
     RadioGroup1.Buttons[I].Width  := ButtonWidth;
     RadioGroup1.Buttons[I].Height := ButtonHeight;
   end;
end;


檸檬  2007-11-13 06:02:13  No: 28347

HOtaさん、KHE00221さん、ありがとうございます。

ボタンの座標を直接変更すると可能は可能なのですね。
今回は可読性を重視して、グループボックスを使用します。

ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加