自动生成一批的TQRDBText和TQRLabel,在关闭窗口时成批删除(100分)

  • 主题发起人 主题发起人 anson
  • 开始时间 开始时间
A

anson

Unregistered / Unconfirmed
GUEST, unregistred user!
自动生成一批的TQRDBText和TQRLabel,在关闭窗口时成批删除,其中部分程序如下:
atext:=TQRdbtext.create(priWGF);
atext.parent:=DetailBand1;
with atextdo
begin
autostretch:=true;
left:=leftvalue;
top:=2;
autosize:=false;
width:=dataF.Tprint.fieldbyname('width').asinteger-2;
height:=DetailBand1.height;
alignment:=taCenter;
dataset:=dataf.Qprint;
datafield:=dataF.Tprint.fieldbyname('fieldname').asstring;
end;
// with alabeldo
alabel:=TQRLabel.create(priWGF);
alabel.parent:=ColumnHeaderBand1;
with alabeldo
begin
autostretch:=true;
left:=leftvalue;
top:=2;
autosize:=false;
width:=dataF.Tprint.fieldbyname('width').asinteger;
height:=ColumnHeaderBand1.height;
alignment:=taCenter;
caption:=''+dataF.Tprint.fieldbyname('displayname').asstring;
// caption:=inttostr(leftvalue);
end;
// with alabeldo

请各位高手指点。。。。
 
以DetailBand1的清除为例——
while DetailBand1.ControlCount > 0do
DetailBand1.Controls[DetailBand1.ControlCount - 1].Free;
 
这几天刚好在研究类似问题。如下他代码可解决问题。
var i:integer
begin
for i:=0 to componentcount-1do
begin
if (components.classtype = TQRDBText) or (components.classtype = TQRLabel) then
components.free;
end;
end;
 
mat: u can simply use statement like this:
components is TQRDBText
i think if you want to create components dymanticly, you can think of
component array.
 
抱歉英语不太好,希望你看的懂中文。
components is TQRDBText 也可以使用。不过我在介绍上看到的似乎是说。这种方法
比classtype方法费时。
另外components对象与application对象类似,使用时不需要声明的.
 
I can read Chinese, in fact i can write Chinese but English is easy to type.
is 是操作符,写起来比较容易嘛,不过.classtype看上去比较专业罢了,至于费时
好像对于现在的计算机来说不超过百分之一秒吧,ok。不讨论这个问题。
我没说需要声明Components,我的意思是,如果需要批量建立同样类型的控件,用
一个控件array(词组的没有!!!)会比较容易管理。
 
components对象自身就是数组。我不太理解你说的控件array,建立这么个数组怎么管理。
管理什么呢?能不能说的详细些。小弟不盛感激。如需要另有分奉送。
 
to mat:
你是不是忘了在开头加一句with priWGFdo

而且我觉得for i:=0 to componentcount-1do
可能会有问题,因为Free掉一个,
ComponentCount就会减一,这样会出现“List index out of bounds”之类的错误信息。
所以建议倒着来:for I := ComponentCount - 1do
wnto 0do
;
不知小弟理解正确否?:)
 
据俺所知,如果指定了控件的parent属性,那么释放窗体的时候会被自动删除……
 
DQ提醒的对,改一下即可
i:=componentcount-1;
while i>=0do
begin
...
i:=i-1;
end;
如何?
 
左:看样子这位老兄需要不释放parent只释放child,否则,u r right
dq:yes
mat:我的意思是,动态建立时,同样可以
for i:=0 to jdo
mycontrols := tqrdbtext.create...
...
 
CJ:
>在关闭窗口时成批删除
窗口都关掉啦parent还不释放?呵呵
不管怎么说这个问题应该已经解决了,把分数分了吧:-)
 
左同志阿,Close一定free?谁教你的?
 
CJ同志啊,你要钻牛角尖我也没办法
想想吧:
create窗体的时候动态生成一堆控件,close的时候把控件删掉,
窗体不释放,下次show的时候再把它们动态生出来……
谁没事这么瞎折腾啊?
嘿嘿,分数最重要……人都上哪了?
 
多人接受答案了。
 
后退
顶部