問一個txt顯示在richedit上,以enter為一篇單位限 |
尚未結案
|
paa
初階會員 ![]() ![]() 發表:50 回覆:101 積分:30 註冊:2005-02-01 發送簡訊給我 |
|
chris_shieh
高階會員 ![]() ![]() ![]() ![]() 發表:46 回覆:308 積分:240 註冊:2004-04-26 發送簡訊給我 |
|
paa
初階會員 ![]() ![]() 發表:50 回覆:101 積分:30 註冊:2005-02-01 發送簡訊給我 |
var
FoundAt,nStartPos,nToEnd:Integer;
search:Integer;
begin
FindDialog1.FindText:=edit3.Text;
if RichEdit1.SelLength > 0 then
nStartPos:=RichEdit1.SelStart RichEdit1.SelLength
else
nStartPos:=0;
nToEnd:=Length(RichEdit1.Text) - nStartPos;
if frDown in FindDialog1.Options then
FoundAt:=RichEdit1.FindText(FindDialog1.FindText,
nStartPos ,nToEnd,[stMatchCase])
else
begin
search:= -1 ;
repeat
FoundAt:= search ;
search := RichEdit1.FindText(FindDialog1.FindText,
search 1,RichEdit1.SelStart-search-1,[stMatchCase]);
until search >= 0 ;
end;
if ( FoundAt<>-1 ) then
begin
RichEdit1.SetFocus;
RichEdit1.SelStart:= FoundAt;
RichEdit1.SelLength:=Length(FindDialog1.FindText);
end
else
ShowMessage('找不到' FindDialog1.FindText '字串!');
end;
請問怎麼無法向上搜尋啊?我已經放了while裡面的東西了,可是還是無法耶,請高手幫幫我?
|
chris_shieh
高階會員 ![]() ![]() ![]() ![]() 發表:46 回覆:308 積分:240 註冊:2004-04-26 發送簡訊給我 |
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls; type TForm1 = class(TForm) RichEdit1: TRichEdit; Button1: TButton; OpenDialog1: TOpenDialog; Button2: TButton; FindDialog1: TFindDialog; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure FindDialog1Find(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin if OpenDialog1.Execute then begin RichEdit1.Lines.LoadFromFile(OpenDialog1.FileName); end; end; procedure TForm1.Button2Click(Sender: TObject); begin FindDialog1.Execute; end; procedure TForm1.FindDialog1Find(Sender: TObject); var FoundAt,nStartPos,nToEnd:Integer; search:Integer; searchType:TSearchTypes; begin if frMatchCase in FindDialog1.Options then searchType := searchType + [stMatchCase]; if frWholeWord in FindDialog1.Options then searchType := searchType + [stWholeWord]; if RichEdit1.SelLength > 0 then nStartPos:=RichEdit1.SelStart+RichEdit1.SelLength else nStartPos:=0; nToEnd:=Length(RichEdit1.Text) - nStartPos; if frDown in FindDialog1.Options then FoundAt:=RichEdit1.FindText(FindDialog1.FindText, nStartPos ,nToEnd, searchType) else begin search:= -1 ; repeat FoundAt:= search ; search := RichEdit1.FindText(FindDialog1.FindText, search+1,RichEdit1.SelStart-search-1, searchType); until search<0 ; end; if ( FoundAt<>-1 ) then begin RichEdit1.SetFocus; RichEdit1.SelStart:= FoundAt; RichEdit1.SelLength:=Length(FindDialog1.FindText); RichEdit1.Perform(EM_SCROLLCARET, 0, 0); end else ShowMessage('找不到'+FindDialog1.FindText + '字串!'); end; end.完整程式請參考 http://delphi.ktop.com.tw/loadfile.php?TOPICID=24512608&CC=548212 @瞭解越多.懂得越少@ |
paa
初階會員 ![]() ![]() 發表:50 回覆:101 積分:30 註冊:2005-02-01 發送簡訊給我 |
指到下一篇的button。
procedure TForm1.Button4Click(Sender: TObject);
var
FoundAt,nStartPos,nToEnd:Integer;
search:Integer;
begin
FindDialog1.FindText:=edit3.Text;
if RichEdit1.SelLength > 0 then
nStartPos:=RichEdit1.SelStart+RichEdit1.SelLength
else
nStartPos:=0;
nToEnd:=Length(RichEdit1.Text) - nStartPos;
if frDown in FindDialog1.Options then
FoundAt:=RichEdit1.FindText(FindDialog1.FindText,
nStartPos ,nToEnd,[stMatchCase])
else
begin
search:= -1 ;
repeat
FoundAt:= search ;
search := RichEdit1.FindText(FindDialog1.FindText,
search+1,RichEdit1.SelStart-search-1,[stMatchCase]);
until search<0 ;
end;
if ( FoundAt<>-1 ) then
begin
RichEdit1.SetFocus;
RichEdit1.SelStart:= FoundAt;
RichEdit1.SelLength:=Length(FindDialog1.FindText);
end
else
ShowMessage('找不到' FindDialog1.FindText '字串!');
end;
--------------------------------------------------
指到上一篇的button,但這個無法向上找耶,請高手幫幫我?而我希望能夠把
FindDialog1.FindText:=edit2.Text;要向上找的那個字,能夠傳給edit2.test。
var
FoundAt,nStartPos,nToEnd:Integer;
search:Integer;
searchType:TSearchTypes;
begin
FindDialog1.FindText:=edit2.Text;
if frMatchCase in FindDialog1.Options then
searchType := searchType [stMatchCase];
if frWholeWord in FindDialog1.Options then
searchType := searchType [stWholeWord]; if RichEdit1.SelLength > 0 then
nStartPos:=RichEdit1.SelStart RichEdit1.SelLength
else
nStartPos:=0;
nToEnd:=Length(RichEdit1.Text) - nStartPos;
if frDown in FindDialog1.Options then
FoundAt:=RichEdit1.FindText(FindDialog1.FindText,
nStartPos ,nToEnd, searchType)
else
begin
search:= -1 ;
repeat
FoundAt:= search ;
search := RichEdit1.FindText(FindDialog1.FindText,
search 1,RichEdit1.SelStart-search-1, searchType);
until search>= 0 ;
end;
if ( FoundAt<>-1 ) then
begin
RichEdit1.SetFocus;
RichEdit1.SelStart:= FoundAt;
RichEdit1.SelLength:=Length(FindDialog1.FindText);
RichEdit1.Perform(EM_SCROLLCARET, 0, 0);
end
else
ShowMessage('找不到' FindDialog1.FindText '字串!'); end;
|
chris_shieh
高階會員 ![]() ![]() ![]() ![]() 發表:46 回覆:308 積分:240 註冊:2004-04-26 發送簡訊給我 |
答案不就在這裡嗎
if frDown in FindDialog1.Options then FoundAt:=RichEdit1.FindText(FindDialog1.FindText, nStartPos ,nToEnd, searchType) else begin search:= -1 ; repeat FoundAt:= search ; search := RichEdit1.FindText(FindDialog1.FindText, search+1,RichEdit1.SelStart-search-1, searchType); until search<0 ; end;原程式碼不變 增加兩個button 跟一個Edit procedure TForm1.btn_NextClick(Sender: TObject); begin FindDialog1.FindText:=Edit1.Text; FindDialog1.Options:= FindDialog1.Options + [frDown]; FindDialog1Find(nil); end; procedure TForm1.btn_PrevClick(Sender: TObject); begin FindDialog1.FindText:=Edit1.Text; FindDialog1.Options:= FindDialog1.Options - [frDown]; FindDialog1Find(nil); end;完整程式請參考 http://delphi.ktop.com.tw/loadfile.php?TOPICID=24512608&CC=548212 @瞭解越多.懂得越少@ |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |