我想在GroupBox中根据数据库中的记录数动态生成CheckBox后,按照每行4个,n行的方式将这些生成的控件进行排列,请大家给予帮助!谢谢!
图示:
CheckBox1, CheckBox2, CheckBox3, CheckBox4,
CheckBox5, CheckBox6, ...
图示:
CheckBox1, CheckBox2, CheckBox3, CheckBox4,
CheckBox5, CheckBox6, ...
解决方案 »
- 高手不防看看.问题原因何在.
- 求Delphi遍历全盘gif图片的代码
- ●●●求助●●● 关于提取数据库中的最后一个记录
- 重启计算机的API函数为什么不行???
- 关于ExcelApplication的问题
- 一个可以很多人同时语音通话的软件,不需要对方IP,不需要登陆,欢迎大家下载测试
- 请问下如何更新ASP网站内容
- 国内各大优秀免费源码下载站集合!
- 在DBGrid中如何显示日期型字段中的时间?谢谢。
- 请教高手:如何用sql语句实现将delphi的date类型数据插入到dbf表的date型字段中?
- 鼠标右键事件这么发生呢?
- 請教各位高手:Delphi 的 Object 管理機制是怎麼樣的。為什麼這個代碼不出錯?
G_ITEMS_PEER_ROW = 4;CheckBox放到一个容器上,比如一个Panel上,然后:var
nTmp : Integer;
nLeft: Integer;
nWidth: Integer;
begin
nLeft := 0;
nTop := 0;
nWidth:= Panel1.Width div G_ITEMS_PEER_ROW; for nTmp:= 0 to CheckBox个数 - 1 do
begin
with TCheckBox.Create(Panel1) do
begin
Left := nLeft;
Top := nTop;
Width := nWidth;
Height:= 20; //这里假设高度都为20,其实也可以计算出来然他平均的 Parent:= Panel1; OnClick:= 控件点击事件。
// 其他属性设置
end; inc(nLeft, nWidth);
if (((nTmp + 1) mod G_ITEMS_PEER_ROW) = 0) then
begin
nLeft:= 0;
inc(nTop , 20);
end;
end;
end;
var
Form1: TForm1;
checkbox: array of Tcheckbox;
procedure TForm1.checkboxpositon(num:integer);
var
i:integer;
w,h:integer;
col:integer;
begin
//这里是调节间距的,你可以自己调整
col:=num div 4;
if (num mod 4)<>0 then
col:=(num div 4 )+1
else
col:=num div 4;
w:=GroupBox1.ClientWidth div (4+1);
h:=GroupBox1.ClientHeight div (col+1);
//排列位置
for i:=0 to num-1 do
begin
checkbox[i].Left:=w+(i mod 4)*w;
checkbox[i].Top:=h+(i div 4)*w;
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
var
i:integer;
num:integer;
begin
num:=7; //可以自己设定
setlength(checkbox,num);
for i:=0 to num-1 do
begin
checkbox[i]:=Tcheckbox.Create(self);
checkbox[i].Show;
checkbox[i].Parent:=groupbox1;
end;
checkboxpositon(num);
end;