Q&A

  • RichEdit에서 역 검색은 어떻게?
자주 질문하네요... ^^;;;



질문은 RichEdit에서 역검색을 하고 싶습니다.



FindDialog를 보면



검색 조건에



위로, 아래로 가 있는데.......



이것을 이용해서



TRichEdit.FindText 함수를 이용하여



위로 검색을 하고 싶습니다....



잘 되지 않네요.... 간단할 줄 알았는디... -____-;



고수님들 답변 부탁드립니다.

1  COMMENTS
  • Profile
    구창민 1999.06.03 23:31
    남윤혁 께서 말씀하시기를...

    > 자주 질문하네요... ^^;;;

    > 질문은 RichEdit에서 역검색을 하고 싶습니다.

    > FindDialog를 보면

    > 검색 조건에

    > 위로, 아래로 가 있는데.......

    > 이것을 이용해서

    > TRichEdit.FindText 함수를 이용하여

    > 위로 검색을 하고 싶습니다....

    > 잘 되지 않네요.... 간단할 줄 알았는디... -____-;

    > 고수님들 답변 부탁드립니다.



    남윤혁님 안녕하세요?

    아래 예제를 참고하셔서 응용하시면 충분히 해내실수 있으실 겁니다

    델파이 헬퍼의 팁/강좌란에서 펐습니다.



    컴파일하여 실행하신 후 SpeedButton을 클릭할때마다

    다음찾기를 시도합니다





    // 아래 예제는 Edit1.Text 에 입력한 문자열을 Memo1 에서 찾기하는

    // 것으로 FindDialog 를 사용하지 않고 다음찾기를 구현한 것입니다

    unit Unit1;



    interface



    uses

    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    StdCtrls, Buttons;



    type

    TForm1 = class(TForm)

    Edit1: TEdit;

    Memo1: TMemo;

    CB_CaseSensitive: TCheckBox;

    SpeedButton1: TSpeedButton;

    procedure SpeedButton1Click(Sender: TObject);

    procedure FormCreate(Sender: TObject);

    private

    { Private declarations }

    public

    { Public declarations }

    function FindMemoStr(SrchStr: String; fromIndex: Integer; CaseSensitive: Boolean): Integer;

    end;



    var

    Form1: TForm1;



    implementation

    {$R *.DFM}



    function TForm1.FindMemoStr(SrchStr: String; fromIndex: Integer; CaseSensitive: Boolean): Integer;

    function Replichar(c: char; n: integer):string;

    var

    i: integer;

    o: string;

    begin

    o := '';

    for i := 1 to n do AppendStr(o,c);

    Replichar := o;

    end;



    var

    CRow, CCol, SRow, SCol: longint;

    located: Boolean;

    s, t, p: String;

    begin

    Result := -1;

    if length(SrchStr) < 1 then

    System.Exit;



    // Memo의 주어진 위치부터 찾기위해

    Memo1.SelStart := fromIndex;



    located := False;

    if CaseSensitive then

    s := SrchStr

    else

    s := Uppercase(SrchStr);



    with Memo1 do

    begin

    if lines.count < 1 then

    exit;

    {현재 row and column을 얻는다}

    CRow := SendMessage(Memo1.Handle, EM_LineFromChar, Memo1.SelStart, 0);

    CCol := Memo1.SelStart - SendMessage(Memo1.Handle, EM_LineIndex, CRow, 0);



    SRow := CRow; {검색시작 row}

    while (SRow < lines.count) and not located do

    begin

    if CaseSensitive then

    t := lines[SRow]

    else

    t := UpperCase(lines[SRow]);



    if SRow = CRow then

    begin

    Delete(t,1,CCol+1);

    p := Replichar(' ', CCol+1);

    AppendStr(p, t);

    t := p;

    end;



    SCol := pos(s, t);

    if SCol > 0 then

    located := True

    else

    inc(SRow);

    end;



    if located then

    begin

    SelStart := SendMessage(Memo1.Handle, EM_LineIndex, SRow, 0) + SCol - 1;

    SelLength := length(s);

    Result := SelStart;

    end

    else

    begin

    Result := -1;

    end;

    end;

    end;



    procedure TForm1.SpeedButton1Click(Sender: TObject);

    begin

    // 두번째 파라미터는 대소문자 구별 여부

    SpeedButton1.Tag := FindMemoStr(Edit1.Text, SpeedButton1.Tag, CB_CaseSensitive.Checked);

    if SpeedButton1.Tag = -1 then

    begin

    MessageBeep(MB_ICONHAND);

    MessageDlg('더이상 찾는 문자열이 없습니다', mtInformation, [mbOK],0);

    SpeedButton1.Tag := 0;

    end

    else

    begin

    Memo1.SetFocus;

    SpeedButton1.Tag := SpeedButton1.Tag + 1; // 다음 찾기할 시작위치

    end;

    end;



    procedure TForm1.FormCreate(Sender: TObject);

    begin

    SpeedButton1.Tag := 0; // 처음 찾기할 시작위치(SelStart)



    // 아래는 예제 자료입니다

    Edit1.text := 'ab';

    Memo1.Clear;

    Memo1.Lines.Add('abwerewrabfdfd');

    Memo1.Lines.Add('werteab04549ab');

    Memo1.Lines.Add('ab435435');

    Memo1.Lines.Add('dsfdsfab');

    end;



    end.



    • 노영길
    • 1999.06.04 04:20
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 글쎄요.
      1999.06.05 01:19
      노영길 께서 말씀하시기를... > 안녕하세요 > 저는 전북에 사는 영길이라고 하는데 이번 레포트에서 FFT...
    • 박성훈
    • 1999.06.04 03:07
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 신호성
      1999.06.04 22:46
      박성훈 께서 말씀하시기를... > 메뉴테이블, 재료테이블,재료입력테이블, 판매테이블이 있습니다. (식당관...
    • 신인재
      1999.06.04 04:49
      일딴 질문의 요지를 모르겠군요...말씀하신것을 보면 일딴 프로그램적인 로직은 다 서있으신거 같은데.......
    • 이호선
    • 1999.06.04 00:54
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 김성동
      1999.06.04 20:15
      델4의 경우에는 OWNERDRAW 기능이 있어서 적절한 폰트를 가지고 일일이 그려주면 됩니다. 델4이하 버전에서...
    • 신인재
      1999.06.04 04:32
      글쎄요......2가지 방법이 있습니다.... 첫번째. 팝업메뉴를 새로 만든다......( 팝업메뉴에선 폰트를 ...
    • 박정현
    • 1999.06.04 00:51
    • 1 COMMENTS
    • /
    • 0 LIKES
    • redhead
      1999.06.04 23:30
      박정현 께서 말씀하시기를... > DBGrid에서 행의 위치를 알려면 어떻게 하면 될까요. > PowerBuilder에서...
    • 서영택
    • 1999.06.03 23:29
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이규하
      1999.06.04 19:18
      서영택 께서 말씀하시기를... > 환경 > UNIX, ORACLE8, DELPHI4 > > > 인스톨쉴드로 만들어서 설치...
    • 희우니
      1999.06.10 23:29
      저도 출력때문에... 고민좀 하다가... 보개 되는 군요... > > |고객명 | 판매금액 | 전화 |고객...
    • 김수봉
    • 1999.06.03 21:46
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      1999.06.03 23:25
      김수봉 께서 말씀하시기를... > 안녕하세요. 김수봉입니다. > > RichEdit에서 작성한 문서를 SQL문을 ...
    • chobo
    • 1999.06.03 21:09
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      1999.06.03 23:23
      chobo 께서 말씀하시기를... > 아주 간단한 DB를 만들고자 합니다. > BDE와 같은 Database Engine등은 사...
    • 남윤혁
    • 1999.06.03 20:09
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      1999.06.03 23:31
      남윤혁 께서 말씀하시기를... > 자주 질문하네요... ^^;;; > 질문은 RichEdit에서 역검색을 하고 싶습니...
    • 이정욱
      1999.06.03 20:27
      ServerSoket의 OnClientError와 OnClientDisconnect 에서 처리를 해주시면 됩니다. 델파이 초보자 께서...
    • 초보
      1999.06.05 19:41
      이정욱 께서 말씀하시기를... > ServerSoket의 OnClientError와 OnClientDisconnect 에서 처리를 해주시...
    • 송기원
    • 1999.06.03 18:46
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.06.03 20:30
      커서의 위치는 | 를 사용해서 결정합니다. 쉬프트 누르고 누르면 나오는 문자요... | 문자가 있는 곳에 ...
    • 송기원
    • 1999.06.03 17:27
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 류성호
      1999.06.04 22:46
      송기원 께서 말씀하시기를... > 델파이에 포함되어 있는 FTP컴포넌트를 이용하여 개발한 > 프로그램을 배...
    • 이정욱
      1999.06.03 20:06
      델파이 헬프에서 'Distributable Files'라는 색인으로 보세요. 이부분이 글씨가 작아서 잘 안보이니 인쇄...
    • 조성윤
    • 1999.06.03 05:59
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.06.03 20:02
      Dialogs.pas의 소스를 보시면 1554번째 줄에 ButtonNames: array[TMsgDlgBtn] of string = ( 'Yes...
    • 김윤경
    • 1999.06.03 04:38
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 신인재
      1999.06.03 04:59
      음냐 execsql하기 전에 showmessage(query1.sql.text); 를 삽입해서 쿼리를 확인해 보세요.... 불완전...
    • 정인철
    • 1999.06.03 02:41
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김경수
      1999.06.03 14:54
      안녕하세요. 전 전에 nt에서 퀵레포트를 이용해서 프로그램한적이 있었는데, 질문과 같은 문제가 생기더라...
    • 정창헌
    • 1999.06.03 02:15
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 신인재
      1999.06.03 05:01
      디비그리드를 찍고 마우스 오른쪽버튼을 누르면 컬럼editor를 부를 수 있습니다. 거기서 각 칼럼의 폰트를 ...
    • 기노현
    • 1999.06.03 00:01
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 신인재
      1999.06.03 05:04
      dgMultiSelect 옵션을 True로 주시고 함 해보세요.... 기노현 께서 말씀하시기를... > DBGrid에서 여러...