我正在尝试获得一个可以找到不跟随括号的字符串的例程。例如,如果在 RichEdit 中打开的文件包含这些 CNC 代码行,我希望它找到前两行并忽略第三行。在第二行中,它应该只找到并突出显示搜索字符串的第一次出现。此示例中的搜索字符串 (mach.TOOL_CHANGE_CALL) 是“T”。
N1T1M6
N1T1M6(1/4-20 TAP .5 DP.)
(1/4-20 TAP .5 DP.)
我已经走到了这一步,但我很难过。
procedure TMainForm.ToolButton3Click(Sender: TObject); // find tool number
var
row:integer;
sel_str:string;
par:integer;
tool:integer;
tool_flag:integer ;
line_counter:integer;
tool_pos:integer;
line_begin:integer;
RE:TRichEdit;
begin
RE:=(ActiveMDIChild as TMDIChild).RichEdit1;
line_counter:=0;
tool_flag:=0;
tool_pos:=0;
row:=SendMessage(RE.Handle,EM_LINEFROMCHAR,-1, RE.SelStart);
while tool_flag =0 do
begin
RE.Perform(EM_LINESCROLL,0,line_counter);
sel_str := RE.Lines[Line_counter];
tool:=pos(mach.TOOL_CHANGE_CALL,sel_str);
par:=pos('(',sel_str);
if par=0 then
par:=pos('[',sel_str);
tool_pos:=tool_pos+length(sel_str);
if (tool>0) and (par = 0) then
begin
RE.SetFocus;
tool_pos:=tool_pos + line_counter-1;
line_begin:=tool_pos-tool;
RE.SelStart := line_begin;
RE.SelLength := Length(sel_str);
tool_flag:=1;
end;
inc (line_counter);
end;
end;
我得到的结果是它会忽略第三个字符串,但也会忽略第二个字符串。它也不会在文件中找到随后出现的字符串,它只是从文本的开头重新开始并再次找到第一个。如何让它找到第二个示例,然后在下次单击按钮时找到下一个“T”?我还需要它来突出显示搜索字符串所在的整行。