大家帮个忙!动态的控制label输出 在线求解(50分)

  • 主题发起人 主题发起人 saga
  • 开始时间 开始时间
S

saga

Unregistered / Unconfirmed
GUEST, unregistred user!
是这个样子,现在从query中返回数目不定的记录,要把这些记录显示在label上。
行满了还要换行。请问具体应该如何去做?谢谢大家了。
 
var i:integer;
TempStr:string;
while not Query.Eof do
begin
TempStr:='';
for i:=0 to Query.FieldCount-1 do
TempStr:=TempStr+Query.Fields.DisplayText+' ';
Lablel.Caption:=Label.Caption+chr(13)+TempStr;
Query.Next;
end;
 
to saga:
什么叫“行满了”,是你指定的长度吗?,请指明
Tuatara的方法是把每条记录分行显示
其实label控件的分行方式主要有两种
1.label.Caption := str1 + #13 + str2;
2.通过设定属性:
a.设定label控件的AutoSize为false
b.设定label控件的Wordwrap为true
c.在需要分行的时候在字符串中加空格
比如:str1空格str2,这样在运行的时候自然会显示分行
所以,你可以先设定长度,当达到“行满”时,使用如下的方法换行,label自己是
不会换行的
 
不好意思,没有说清楚
行满了是这个意思,比如说一个panel只能放四个label。
放了四个之后就要另起一行。还有就是美观的问题,总不能
让我事先就把panel的高度搞的很大吧,这些怎么才能动态的
控制呢?
 
程序大概结构是这个样子的
case TempStr of
One://----
Two://-----
three: 在这个条件下统计记录数量,然后在panel里输出这些记录
end;
 
向Tuatara问一个问题,你这样做。那不是所有的记录都用一个label显示
后面的记录不是把前面的记录覆盖了吗?
如何控制每次输出的label是不同的name?
 
to saga:
这是不可能的,你仔细看看他的代码
TempStr:=TempStr+Query.Fields.DisplayText+' ';
TempStr并没有覆盖它本身呀
是的,所有的字符用一个label表示
我给你写的换行的方法也是用一个label显示
 
嗯,多谢楼上老兄。看到了。
我刚才想了一下,用一个label来显示可能是要简单一些
不用设置每个label的坐标了.
 
是的,只用设置字符串就可以了,跟控件无关

祝你早日解决问题
 
多人接受答案了。
 
后退
顶部