弄了半天也没有弄出来,帮助上的例子也不好时,查不到字符。求助!
解决方案 »
- delphixe2 firemonkey ios开发
- Delhpi与VB
- Delphi7下如何把数据库中的数据输出到txt文本里?
- 有顾问的帮忙,问题解决,高兴ing....散分
- Delphi7 Client 端使用 SocketConnection,如何捕捉并修改"Error reading from socket"错误消息?
- 浏览器如实现分页
- 繁體系統,真是煩。來幫忙~
- 如何利用fastreport制作人员名单的报表?有回有分
- TClientSocket与TServerSocket关闭连接总是报错
- 關於Checkbox的問題,急盼回復,等待中.......
- 关于dbgrid的问题
- 怎样把程序的sqlserver数据库文件做成安装文件打包用用户
var i:integer;
begin
for i:=1 to richedit1.lines.count begin
if pos('字符',richedit1.lines[i])>1 then begin
showmessage('字符已经找到');
inc(pos('字符',richeedit1.lines[i]));
end
else
showmessage('没有找到您要的字符');
end;
end;
我搞了很久就是弄不出改变字符颜色这个东东 ,希望谁能来帮帮忙,谢过了
Var
intPos,intPAt:integer;
begin
//intCurLine:=memoCode.Perform(EM_LINEFROMCHAR, -1, 0); With memoCode do
Begin
intPAt:=SelStart+SelLength;
intPos:=Position(RepCode.FindText,Copy(Text,SelStart+SelLength,Length(Text)),1);
intPos:=intPAt+intPos;
if intPos>0 then
Begin
SelStart:=intPos-2;
SelLength:=Length(RepCode.FindText);
//滚动 RichText 以显示找到的文字
Perform(EM_SCROLLCARET, 0 , 0);
End
Else
Begin
Application.MessageBox(Pchar('搜索完毕!'),Pchar('搜索'),MB_OK+MB_ICONINFORMATION);
SelStart:=0;
End;
//SetFocus;
End;
end;Position 是自定义函数
function TfrmMain.Position(SubStr, SourceStr: string;
intOccur: integer): integer;
var
//intProvPos:integer;
//intLastPos:integer;
intSubLength:integer;
intSourceLength:integer;
intOccurNo:integer;
intI:integer;
strFind:String;
begin
if intOccur<1 then
begin
MessageBox(0,Pchar('参数错误,参数intOccur应大于0'),Pchar('参数'),MB_OK+MB_ICONWARNING+MB_TASKMODAL);
Result:=0;
exit;
end;
intSubLength:=Length(SubStr);
intSourceLength:=Length(SourceStr);
intOccurNo:=0;
for intI := 1 to intSourceLength do
Begin
strFind:=Copy(SourceStr,intI,intSubLength);
if strFind=SubStr then
begin
intOccurNO:=intOccurNO+1;
if intOccurNO=intOccur then
begin
Position:=intI;
exit;
end;
end;
end;
Position:=0;
End;
FoundAt: LongInt;
StartPos, ToEnd: Integer;
str:string;
with RichEdit do begin
str:='查找的中文字串';
FoundAt := FindText(str, StartPos, ToEnd, [stMatchCase]);
if FoundAt <> -1 then
begin
SetFocus;
SelStart := FoundAt;
SelLength := Length(str);
SelAttributes.color:=clred;
end;
end;
按你的方法,如果每一行有两个要查找的字符能检测出来吗?
改变颜色用以下方法:
SelStart :=选中的地方
SelLength :=长度
SelAttributes.Color := clRed;//变色
FoundAt: LongInt;
StartPos, ToEnd: Integer;
sSr:string;
begin
with RichEdit1 do begin
Str:='1';
if SelLength <> 0 then
StartPos := SelStart + SelLength
else
StartPos := 0;
ToEnd := Length(Text) - StartPos;
FoundAt := FindText(str, StartPos, ToEnd, [stMatchCase]);
if FoundAt <> -1 then
begin
SelStart := FoundAt;
SelLength := Length(str);
SelAttributes.color:=clred;
end;
end;上面的代码改为这样要明白如何实现文字的颜色,样式改变,还得知道个记录 TCharFormatA = record
cbSize: UINT;
dwMask: Longint;
dwEffects: Longint;
yHeight: Longint;
yOffset: Longint;
crTextColor: TColorRef;
bCharSet: Byte;
bPitchAndFamily: Byte;
szFaceName: array[0..LF_FACESIZE - 1] of AnsiChar;
end;还有消息EM_SETCHARFORMAT试试下面的代码:var
CF:TCharFormat;begin
FillChar(CF, SizeOf(CF), 0);
CF.cbSize := SizeOf(CF);
CF.dwMask := CFM_LINK;
CF.dwEffects := CFE_LINK;
SendMessage(RichEdit1.Handle, EM_SETCHARFORMAT,SCF_ALL,Integer(addr(CF)));
end;改成
CF.dwMask := CFM_COLOR;
CF.crTextColor := clRed;还有其它的自己琢磨,呵呵
end;
老大,都要过年了,直接给个功能模块吧。
cg1120(代码最优化-§新年祝福你,好运伴着你§) 给的代码,在我这里运行错误,没有成功。
只要从一开始的那个字符起取长度为查找字符长度就OK..
FoundAt: LongInt;
StartPos, ToEnd: Integer;
Str:string;
begin
with RichEdit1 do begin
Str:='Test';
if SelLength <> 0 then
StartPos := SelStart + SelLength
else
StartPos := 0;
ToEnd := Length(Text) - StartPos;
While FoundAt <> -1 do
begin
FoundAt := FindText(Str, StartPos, ToEnd, [stMatchCase]);
if FoundAt <> -1 then
begin
SelStart := FoundAt;
SelLength := Length(str);
SelAttributes.color:=clred;
end;
StartPos := FoundAt+1;
ToEnd := Length(Text) - StartPos;
end;
end;
end;//没有我后面说的方法,这个比较好理解!