有关fastreport里的循环问题 ( 积分: 30 )

  • 主题发起人 主题发起人 wwdd2005
  • 开始时间 开始时间
W

wwdd2005

Unregistered / Unconfirmed
GUEST, unregistred user!
我要动态写入memo1的值,即memo1(序号)当memo2(姓名)不为空的时候显示1,2,3。。。
即如下显示效果:
序号 姓名 科目
1 李三 数学
英语
2 赵武 数学
语文
在MasterData1OnBeforePrint事件里写如下代码:
var i:integer;
f:string;
procedure MasterData1OnBeforePrint(Sender: TfrxComponent);
begin
f:=memo2.text ;
i:=0;
if f<>'' then
begin
i:=i+1;
memo1.text:=inttostr(i);
end;
end;
可是只第一条达到了现实效果,高手指点一下吧!怎么实现呢?谢谢!!
在线等啊!
 
我要动态写入memo1的值,即memo1(序号)当memo2(姓名)不为空的时候显示1,2,3。。。
即如下显示效果:
序号 姓名 科目
1 李三 数学
英语
2 赵武 数学
语文
在MasterData1OnBeforePrint事件里写如下代码:
var i:integer;
f:string;
procedure MasterData1OnBeforePrint(Sender: TfrxComponent);
begin
f:=memo2.text ;
i:=0;
if f<>'' then
begin
i:=i+1;
memo1.text:=inttostr(i);
end;
end;
可是只第一条达到了现实效果,高手指点一下吧!怎么实现呢?谢谢!!
在线等啊!
 
var i:integer;
f:string;
procedure MasterData1OnBeforePrint(Sender: TfrxComponent);
begin
i:=0;
f := Memo1.Lines.Strings
if f<>'' then
begin
i:=i+1;
f := Memo1.Lines.Strings :=inttostr(i);
end;
end;
 
如果要实现整个文本,你要用循环
var i:integer;
f:string;
procedure MasterData1OnBeforePrint(Sender: TfrxComponent);
var
j: integer;
begin
i:=0;
for j := 0 to Memo1.Lines.Count-1do
begin
f := Memo1.Lines.Strings
if f<>'' then
begin
i:=i+1;
f := Memo1.Lines.Strings :=inttostr(i);
end;
end;
//end for
end;
 
lqcros:
你的方法不行啊。能帮我再看看么?
 
高手帮帮忙啊!
 
分组一下不就行了
 
SeekMyself能具体说说怎么做么?
 
我那段程序显示结果是这样的:
序号 姓名 科目
3 李三 数学
1 英语
赵武 数学
2 语文
 
刚才写错了
var i:integer;
f:string;
procedure MasterData1OnBeforePrint(Sender: TfrxComponent);
var
j: integer;
begin
i:=0;
for j := 0 to Memo1.Lines.Count-1do

begin
// f := Memo1.Lines.Strings //这里写错了
f := Memo1.Lines.Strings[j];


if f<>'' then
begin
i:=i+1;
// f := Memo1.Lines.Strings :=inttostr(i);
Memo1.Lines.Strings[j] := inttostr(i) + f;
end
else
begin

Memo1.Lines.Strings[j] := ' ' + f;
end;

//end if
end;
//end for
end;
 
lqcros:你改后的方法,在序号那一栏里每个单元格都显示n个1。是不是不应该用循环?
 
哦,哪我从新测试一下多
 
不是循环出的问题,这里的循环主要是为了遍历文档的所有行,如果不用行,只能是第一行啦
Memo1的字体设为宋体,9号字。这样才看得出是不是对齐了的
Memo1里的内容为
李三 数学
英语
赵武 数学
语文
下面这段是 测试了的

unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
i:integer;
f:string;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
j: integer;
begin
i:=0;
for j := 0 to Memo1.Lines.Count-1do
begin

f := Memo1.Lines.Strings[j];
//主要是这里,判断第j行的文字开始有没得空格
//如果有的话就说明是有名字的,就加一个序号。没有就在前面加两个空格(这里主要是为了对齐)
if Copy(f,1,1) <> ' ' then

begin
i:=i+1;
Memo1.Lines.Strings[j] := inttostr(i) + ' ' + f;
end
else
begin
Memo1.Lines.Strings[j] := ' ' + f;
end;
//end if
end;
//end for
end;

end.
 
lqcros:我现在才看明白你说的是多行文本编辑控件,首先十分感谢你对我问题的关注,可我问的是在fastreport里啊,你有好的方法么?
 
你只需把上面的改成你哪个的,不就行了吗
 
你把循环去了,其他的原理差不多吧
 
你可不可以把源代码贴出来,我帮你看看
 
lqcros:你可以给我你的QQ号吗?
 
我的QQ:250198418
 
我这加不了,你加我吧我的QQ:7877528
 
后退
顶部