老革命新问题:关于字符串查找,块查找的问题. ( 积分: 200 )

  • 主题发起人 主题发起人 yeeler
  • 开始时间 开始时间
Y

yeeler

Unregistered / Unconfirmed
GUEST, unregistred user!
平时我们在memo中查找字符串,并选中目标字串,可以用一下方式实现:
function FindMemoStr(const AMemo: TMemo; AString: string): string;
var
p, Len: integer;
begin
Len := Length(AString);
p:=Pos(AString, AMemo.Text);
if (p>0) then
begin
AMemo.SetFocus;
AMemo.SelStart := p - 1;
AMemo.SelLength := Len;
// PostMessage(AMemo.Handle, EM_SCROLLCARET, 0, 0);
end;
end;
查找的文本不能包含 回车 换行 TAB 等. 如何简单高效的实现字符串块的查找呢? 比如我要在一个网页中查找某个表格,用字符串块查找可以有效减少查询的次数,重复的少.
如何像FrontPage哪样,自己做一个 字符串块查找呢? 请各位高手指点,请给出代码,谢谢.
 
首先 我要声明的是 上面的代码是可以实现块查找的.是我另外一部分代码出错,导致了我错误的判断.

我在写一个网页编辑器,上述问题是为了实现 类似frontPage中的 选中链接 同时在代码页能看到相应的HTML代码. 我是这样实现的.
procedure TTaskManage.tsCodeShow(Sender: TObject);
var
Doc: IHtmlDocument2;
TxtRange: IHtmlTxtRange;
begin
// 获取wbPreview中选中的HTML代码
Doc :=wbPreview.Document as IHtmlDocument2;
TxtRange :=Doc.Selection.CreateRange as IHtmlTxtRange;
// 在mmoCode中查找Html代码 TxtRange.htmlText
// TxtRange.parentElement.outerHTML 是显示选中标签的 完整HTML代码
mmo2.Text := TxtRange.htmlText;
ShowMessage(mmo2.Text);
//FindMemoStr(mmoCode, mmo1.Text);
end;

遇到了2个问题.
测试页面http://ent.163.com/06/1030/10/2UM6MRAN00031NJO.html
选中文章图片后,我获得的代码是
<CENTER><IMG alt="" src="http://cimg2.163.com/ent/2006/10/13/200610130948503f5ee.jpg"
border=0>
可是通过IE浏览器,查看源码,该链接应该是
<CENTER><IMG alt="" src="http://cimg2.163.com/ent/2006/10/13/200610130948503f5ee.jpg" border=0>

为什么在得到的TxtRange.htmlText 中会自动给我加个回车换行啊
 
看看这里的
oRange.setStart(oHello, 2);
oRange.setEnd(oWorld, 3);

http://blog.never-online.net/article.asp?id=115
能不能解决你的问题.
 
网页打不开,不知道是不是因为海底光缆没修好. 兄台能贴出来吗?
 
教你个笨方法 删除 那些个Delphi加的字符!

Test := TxtRange.Get_htmlText;
Test := stringreplace(Test, #$D, '', [rfReplaceAll]); //$D => 13
Test := stringreplace(Test, #$A, '', [rfReplaceAll]); //$A => 10
Memo1.Text := Test;
 
全部替换,咳 没有更好的办法了吗?
 
自动回车.?
是因为你的Memo 的宽度太小了呀. 加大它的宽度. 或设置不自动回行就好了
 
to dingbaosheng 实在是没办法的办法,咳.....
to wzca 是获取的html代码有问题,系统自动加了回车换行。
 
请使用规则表达式。微软的FrontPage用的是规则表达式。
 
貌似你把Tmemo的WordWarp属性改为false就行了,
伪代码:
begin
Memo.WordWarp := false;
//你的一系列程序
Memo.WordWarp := true;
end;
 
和我说的一样哦.
加大memo的宽度也能解决问题嘛.嘿嘿
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
913
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部