两个RichEdit来处理文本!!!(10分)

  • 主题发起人 主题发起人 最笨菜鸟
  • 开始时间 开始时间

最笨菜鸟

Unregistered / Unconfirmed
GUEST, unregistred user!
我是想用两个RichEdit来处理文本,情况如下:
RichEdit1里有文本00000000000 RichEdit2里是用来显示处理完的文本
1111111111111 也就是去除换行的动作。
222222222
333333333333333
444444444444
55555555555555
6666666666666666
7777777777777
888888888888888888
99999999999999

但执行显示,结果却不是 0~9,而是错位的排列,如果是这样的话,去处理实际的文本文件,岂不乱套!!!


unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ComCtrls;

type
TForm1 = class(TForm)
RichEdit1: TRichEdit;
RichEdit2: TRichEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
i,p:integer;
begin
i:=RichEdit1.Lines.Count;
p:=0;
While i>0 do
begin
RichEdit2.Lines[0]:=RichEdit2.Lines[0]+RichEdit1.Lines[p];
p:=p+1;
i:=i-1;
end;
end;

end.
 
你是想让它们同步吗?
如果仅仅是想去除换行,可以在richedit1的onchange事件中这样:
var s:string;
i:integer;
begin
for i:=0 to richedit1.lines.count- 1 do
s:=s+richedit1.lines

richedit2.text:=s;
end;
 
并非同步运行!!!
只是想将richedit1里的文本去除换行!然后在richedit2里显示,但是显示的结果不对!
iseek, 你有没有试过这个方法,我所谓的,0~9只是为了测试最后换行是否真确,可是
只有第一次运行结果是对的,以后,都是乱的了!!!
数字是这样,更何况文本问题就更大了!!!!
 
richeidt1.lines如果没有回车符,就按我上面的代码处理,如果有回车符,就:
var l:integer;
str:string;
begin
str:=richeidt1.lines;
l:=length(richeidt1.lines);
delete(str,l,1);//删除#10
delete(str,l-1,1);//删除#13
end;
回车符就是#13#10,这样richeidt1.lines就没有回车符了。
 
其实菜鸟的代码基本上可以实现想要的功能:把RichEdit1中的文本去掉回车换行后转给
RichEdit2,虽然效率比较低。不过在procedure TForm1.Button1Click(Sender: TObject);中你忘了把
RichEdit2的内容先清空,所以……。

改一下:
procedure TForm1.Button1Click(Sender: TObject);
begin
RichEdit2.Lines.Text:=StringReplace(RichEdit1.Lines.Text,#13#10,'');
end;

 
先给你加上分!!!
我还没测试!!!看看在说!!!
 
skyweb 你的这个我执行的时候出错;
说是没有足够的实际参数这是怎么回事????
 
呵呵,不好意思,漏了点东西,参见Delphi帮助文件(关键字StringReplace):
Unit Sysutils;
type
TReplaceFlags = set of (rfReplaceAll, rfIgnoreCase);
function StringReplace(const S, OldPattern, NewPattern: string
Flags: TReplaceFlags): string;

忘记把Flags参数加上去了,

更正如下:
procedure TForm1.Button1Click(Sender: TObject);
begin
RichEdit2.Lines.Text:=StringReplace(RichEdit1.Lines.Text,#13#10,'',[rfReplaceAll]);
end;

其实你只要把Delphi的编辑光标移动到字符串"StringReplace"上,然后按F1,
即可获得对StringReplace函数的帮助信息了。

 
为什么执行之后richedit2与richedit1显示的是一样的,并没有去除换行!!!!
 
你新建一个项目,放两个RichEdit,放一个Button,在Button的OnClick事件里写:
RichEdit2.Lines.text:=StringReplace(RichEdit1.Lines.Text,#13#10,'',[rfReplaceAll]);
看看会怎样?

我试了没有错,换行全去掉了。
 
后退
顶部