马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
procedure TForm1.Find1Click(Sender: TObject);
begin
FindDialog1.FindText:= Memo1.SelText; // 执行查抄
FindDialog1.Execute;
end;
procedure TForm1.FindDialog1Find(Sender: TObject);
var
i, j, PosReturn, SkipChars: Integer;
begin
For i:= 0 to Memo1.Lines.Count do //行数
begin
PosReturn:= Pos(FindDialog1.FindText, Memo1.Lines[i]);
If PosReturn <> 0 then
begin
Skipchars:= 0;
For j:= 0 to i-1 do
Skipchars:= Skipchars + Length(Memo1.Lines[j]);
SkipChars:= SkipChars + (i*2);
SkipChars:= SkipChars + PosReturn - 1;
Memo1.SetFocus;
Memo1.SelStart:= SkipChars;
Memo1.SelLength:= Length(FindDialog1.FindText);
Break;
end;
end;
end;
能帮我解释下
Skipchars:= 0;
For j:= 0 to i-1 do
Skipchars:= Skipchars + Length(Memo1.Lines[j]);
SkipChars:= SkipChars + (i*2);
SkipChars:= SkipChars + PosReturn - 1;
Memo1.SetFocus;
Memo1.SelStart:= SkipChars;
Memo1.SelLength:= Length(FindDialog1.FindText);
这部分代码具体是啥意思呀 没看懂
我以前也没看懂,现在我帮你理解下整个函数。
procedure TForm1.Find1Click(Sender: TObject);
begin
FindDialog1.FindText:= Memo1.SelText; // 执行查抄
FindDialog1.Execute;
end;
procedure TForm1.FindDialog1Find(Sender: TObject);
var
i, j, PosReturn, SkipChars: Integer;
begin
For i:= 0 to Memo1.Lines.Count do //行数
begin
PosReturn:= Pos(FindDialog1.FindText, Memo1.Lines);//寻找你输入的关键字从第0行开始。
If PosReturn <> 0 then //如果不为空,那么就是那行就有你要找的‘文字’
begin
Skipchars:= 0;
For j:= 0 to i-1 do //当i=o时候,代表搜索第一行就有你的关键字,此时就不用循环了。
Skipchars:= Skipchars + Length(Memo1.Lines[j]);//加上第j行所有的字符数 SkipChars:= SkipChars + (i*2);//加上每行末尾的换行字符#13#8,如果我没想错的话。
SkipChars:= SkipChars + PosReturn - 1;// 加上你所搜索的关键字在那行的位置。
Memo1.SetFocus; // 这个不知道,应该就是锁定当前程序(专业名词不会)
Memo1.SelStart:= SkipChars; //选择上面所算出的整数。
Memo1.SelLength:= Length(FindDialog1.FindText);//所选择的长度。
Break;
end;
end;
end;
|