一個語言邏輯的問題 小弟不太懂 |
尚未結案
|
艾里希思
一般會員 發表:1 回覆:2 積分:0 註冊:2003-05-09 發送簡訊給我 |
procedure TForm1.FindDialog1Find(Sender: TObject);
var
I, J, PosReturn, SkipChars: Integer;
begin
with RichEdit1 do
For I := LinePos to Lines.Count do
begin
PosReturn := Pos(FindDialog1.FindText,Lines[I]);
if PosReturn <> 0 then {found!}
begin
Skipchars := 0;
for J := 0 to I - 1 do
Skipchars := Skipchars Length(Lines[J]); SkipChars := SkipChars (I*2);
SkipChars := SkipChars PosReturn - 1;
RichEdit1.SetFocus;
RichEdit1.SelStart := SkipChars;
RichEdit1.SelLength := Length(FindDialog1.FindText);
end;
end;
end; 以上是一個'搜尋文字' 的語法 不過對於她的邏輯我實在是想不通
問題一 LinePos to Lines.Count 這是什麼意思
問題二 J := 0 to I - 1 do
Skipchars := Skipchars Length(Lines[J]); SkipChars := SkipChars (I*2);
SkipChars := SkipChars PosReturn - 1;
RichEdit1.SetFocus;
RichEdit1.SelStart := SkipChars;
RichEdit1.SelLength := Length(FindDialog1.FindText);
這整個意思 又是什麼
問題三 為什麼 I*2 請各位大大 幫忙一下 小弟剛學不久 謝謝
|
ccchen
版主 發表:61 回覆:940 積分:1394 註冊:2002-04-15 發送簡訊給我 |
procedure TForm1.FindDialog1Find(Sender: TObject); var I, J, PosReturn, SkipChars: Integer; begin with RichEdit1 do For I := LinePos to Lines.Count do LinePos應該是程式中宣告的變數, 用來記錄,游標目前所在之行數, 此行之意義應該是由目前行至最後一行 begin PosReturn := Pos(FindDialog1.FindText,Lines[I]); if PosReturn <> 0 then {found!} begin Skipchars := 0; //以下要計算目前所在位置由最前開始是第幾個字 //首先由第一行起將每一行之字數加起來, 直到找到符合字串之前一行 for J := 0 to I - 1 do Skipchars := Skipchars Length(Lines[J]); 由於每一個換行均包含 $0d,$0a兩個字元(此兩字元就是Carriage Return及New Line, 因此須加上(i*2), I為行數 SkipChars := SkipChars (I*2); 再加上此行中, 符合字串之位置 SkipChars := SkipChars PosReturn - 1; RichEdit1.SetFocus; 設定被選擇之Text, 使其反白, 開始位置乃前面計算之結果, 長度為搜尋之字串長度 RichEdit1.SelStart := SkipChars; RichEdit1.SelLength := Length(FindDialog1.FindText); end; end; end; |
艾里希思
一般會員 發表:1 回覆:2 積分:0 註冊:2003-05-09 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |