線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1313
推到 Plurk!
推到 Facebook!

問一個txt顯示在richedit上,以enter為一篇單位限

尚未結案
paa
初階會員


發表:50
回覆:101
積分:30
註冊:2005-02-01

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-09-11 02:16:43 IP:210.70.xxx.xxx 未訂閱
我在txt上,有一小篇文章,很多小小篇,但每篇會以編號為限,想做二個button,一個為指到上一篇,一個為指到下一篇,例如:⊙編號:001是一小篇文章,⊙編號:002是第二小篇文章⊙編號:003是第三小篇文章,等等...,希望在richedit上,按一下下一篇button,就可以指到002這篇,在按下一篇button就指到003篇,按上一篇button,就指到002這篇。
chris_shieh
高階會員


發表:46
回覆:308
積分:240
註冊:2004-04-26

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-09-12 12:46:17 IP:61.63.xxx.xxx 未訂閱
你需要的是RichEdit搜尋功能加上自動移至搜尋結果 請參考 [FindDialog RichEdit ] http://delphi.ktop.com.tw/topic.php?topic_id=65039 @瞭解越多.懂得越少@
paa
初階會員


發表:50
回覆:101
積分:30
註冊:2005-02-01

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-09-13 03:49:47 IP:210.70.xxx.xxx 未訂閱
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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-09-13 12:00:24 IP:203.70.xxx.xxx 未訂閱
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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-09-13 17:20:59 IP:210.70.xxx.xxx 未訂閱
指到下一篇的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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-09-13 18:22:34 IP:203.70.xxx.xxx 未訂閱
答案不就在這裡嗎
  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 @瞭解越多.懂得越少@
系統時間:2024-06-28 18:39:11
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!