Q&A

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



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



FindDialog를 보면



검색 조건에



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



이것을 이용해서



TRichEdit.FindText 함수를 이용하여



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



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



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

3  COMMENTS
  • Profile
    한스 1999.01.15 02:55
    얼마전 윈도우 98을 인스톨 하던 중

    윈도우가 가상드라이브(ram drive or virtual disk)를

    임의로 잡고 인스톨이 되는걸 보았습니다.

    이건 엄밀히 말하면 델파이에 관한 질문은 아닌데... 머쓱

    제가 사용하는 환경인 윈도우NT workstation에서도

    가상 드라이브를 잡어서 사용할 수 있는지 알고 싶습니다.



    지금 까지는 공유메모리를 잡어서 실시간으로 변하는

    통신상의 데이터를 처리해 왔는데, 가상드라이브를 잡을수 있으면

    공유메모리보다 훨 활용가치가 높을것 같거든요..

  • 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.



  • Profile
    이정욱 1999.01.19 19:43
    그것들은 윈도우NT에서 알아서 처리를 해줍니다.

    별로 신경을 안쓰셔도 될듯....



    한스 wrote:

    >

    > 얼마전 윈도우 98을 인스톨 하던 중

    > 윈도우가 가상드라이브(ram drive or virtual disk)를

    > 임의로 잡고 인스톨이 되는걸 보았습니다.

    > 이건 엄밀히 말하면 델파이에 관한 질문은 아닌데... 머쓱

    > 제가 사용하는 환경인 윈도우NT workstation에서도

    > 가상 드라이브를 잡어서 사용할 수 있는지 알고 싶습니다.

    >

    > 지금 까지는 공유메모리를 잡어서 실시간으로 변하는

    > 통신상의 데이터를 처리해 왔는데, 가상드라이브를 잡을수 있으면

    > 공유메모리보다 훨 활용가치가 높을것 같거든요..





    • 문무석
    • 1999.01.16 23:58
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.01.19 19:41
      Resize시에 Invalidate를 원하시는것인가요? WinProc를 가로채서 사용하시면 될듯 하네요.. 문무석 wro...
    • 희우니
      1999.06.10 23:29
      저도 출력때문에... 고민좀 하다가... 보개 되는 군요... > > |고객명 | 판매금액 | 전화 |고객...
    • 김수봉
    • 1999.06.03 21:46
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 김대영
      1998.09.14 21:49
      저는 델파이를 사용하는 초보자 입니다. 델파이에서 세이브 스크린에 대해서 알고자 합니다. 세이브 스크...
    • 구창민
      1999.06.03 23:25
      김수봉 께서 말씀하시기를... > 안녕하세요. 김수봉입니다. > > RichEdit에서 작성한 문서를 SQL문을 ...
    • Trex98
      1999.01.15 03:26
      김대영 wrote: > 저는 델파이를 사용하는 초보자 입니다. > 델파이에서 세이브 스크린에 대해서 알고자 ...
    • 이정욱
      1998.09.15 00:31
      질문의 정확한 요지를 모르겠습니다. 세이브 스크린이란....? 조금 더 자세히 설명을 해주세요. 무엇을 ...
    • chobo
    • 1999.06.03 21:09
    • 3 COMMENTS
    • /
    • 0 LIKES
    • Trex98
      1999.01.15 03:19
      인스톨 쉴드를 이용하여 BDE를 배포할 수 있습니다. 물론 Delphi정품 CD에 있는 쉴드입니다. 방법은 순서...
    • 구창민
      1999.06.03 23:23
      chobo 께서 말씀하시기를... > 아주 간단한 DB를 만들고자 합니다. > BDE와 같은 Database Engine등은 사...
    • 이정욱
      1999.01.21 00:00
      네.. 그러나 3.0에 포함된 인스톨 쉴드에는 BDE배포시 문제가 있다고 합니다. 4.0것은 확인을 해보지는 못...
    • 남윤혁
    • 1999.06.03 20:09
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 한스
      1999.01.15 02:55
      얼마전 윈도우 98을 인스톨 하던 중 윈도우가 가상드라이브(ram drive or virtual disk)를 임의로 잡고...
    • 구창민
      1999.06.03 23:31
      남윤혁 께서 말씀하시기를... > 자주 질문하네요... ^^;;; > 질문은 RichEdit에서 역검색을 하고 싶습니...
    • 이정욱
      1999.01.19 19:43
      그것들은 윈도우NT에서 알아서 처리를 해줍니다. 별로 신경을 안쓰셔도 될듯.... 한스 wrote: > > ...
    • 이정욱
      1999.06.03 20:27
      ServerSoket의 OnClientError와 OnClientDisconnect 에서 처리를 해주시면 됩니다. 델파이 초보자 께서...
    • 초보
      1999.06.05 19:41
      이정욱 께서 말씀하시기를... > ServerSoket의 OnClientError와 OnClientDisconnect 에서 처리를 해주시...
    • 김경수
    • 1999.01.12 05:55
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 신인재
      1999.01.13 03:55
      음냐~ 많은 도움을 받으셨다니 저희도 기쁩니다. 데이블 오픈은 어디에서나 필요한 곳에서 할 수 있습니...
    • 김경수
      1999.01.13 04:20
      일딴 감사합니다. 이초심자가 실수한건데요.. project /options에서 auto create 부분에 데이타모듈...
    • 송기원
    • 1999.06.03 18:46
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.06.03 20:30
      커서의 위치는 | 를 사용해서 결정합니다. 쉬프트 누르고 누르면 나오는 문자요... | 문자가 있는 곳에 ...
    • 김경수
    • 1999.01.12 05:55
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 신인재
      1999.01.13 03:55
      음냐~ 많은 도움을 받으셨다니 저희도 기쁩니다. 데이블 오픈은 어디에서나 필요한 곳에서 할 수 있습니...
    • 김경수
      1999.01.13 04:20
      일딴 감사합니다. 이초심자가 실수한건데요.. project /options에서 auto create 부분에 데이타모듈...
    • 송기원
    • 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 17:26
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 심명준
      1999.01.11 21:48
      수고하십니다. 질문은 다름이 아니고... 현재 Linux 서버에 Interdbase DB를 설치하여 사용하고 있습니다...
    • 신인재
      1999.01.13 03:52
      클라이언트서버하에서는 클라이언트는 서버의 데이타들을 최악의 경우 왕창 다끌어 오는 경향이 있는데 이...
    • 박구남
    • 1999.01.07 11:10
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.01.09 10:49
      receivetext 이벤트의 부분을 보여주세요. 어떻게 코딩을 하셨는지 봐야 알겠습니다. 박구남 wrote: >...
    • 박구남
      1999.01.12 22:05
      아구 해결했네요 제가 개념이 좀 않잡혔던 모양입니다 그런데 receivetext는 있으나 마나하군요 보아하...
    • 조성윤
    • 1999.06.03 05:59
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.06.03 20:02
      Dialogs.pas의 소스를 보시면 1554번째 줄에 ButtonNames: array[TMsgDlgBtn] of string = ( 'Yes...
    • 김경수
    • 1999.01.12 05:55
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 신인재
      1999.01.13 03:55
      음냐~ 많은 도움을 받으셨다니 저희도 기쁩니다. 데이블 오픈은 어디에서나 필요한 곳에서 할 수 있습니...
    • 김경수
      1999.01.13 04:20
      일딴 감사합니다. 이초심자가 실수한건데요.. project /options에서 auto create 부분에 데이타모듈...
    • 김윤경
    • 1999.06.03 04:38
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 신인재
      1999.06.03 04:59
      음냐 execsql하기 전에 showmessage(query1.sql.text); 를 삽입해서 쿼리를 확인해 보세요.... 불완전...
    • 심명준
    • 1999.01.11 21:48
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 신인재
      1999.01.13 03:52
      클라이언트서버하에서는 클라이언트는 서버의 데이타들을 최악의 경우 왕창 다끌어 오는 경향이 있는데 이...
    • 정인철
    • 1999.06.03 02:41
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김경수
      1999.06.03 14:54
      안녕하세요. 전 전에 nt에서 퀵레포트를 이용해서 프로그램한적이 있었는데, 질문과 같은 문제가 생기더라...