Q&A

  • 에디트에서 FindText를 사용했을때.
에디트에서 FindText를 사용했을때. 만약

EndPos:= FindText('**', StartPos, ToEnd, [stMatchCase]);

EndPos 에 -1 아닌 값이 들어가면 '**' 그 문자열을

찾은 거잖아요.



그때 그 문자열이 있는 edit 의 line 카운트값을

알고 싶은데

메쏘드나 변수들을 아무리 찾아봐도 없네요.

그럼 고수분들 답변 부탁드립니다.









2  COMMENTS
  • Profile
    이현우 2000.02.16 06:23
    석기명 wrote:

    > 에디트에서 FindText를 사용했을때. 만약

    > EndPos:= FindText('**', StartPos, ToEnd, [stMatchCase]);

    > EndPos 에 -1 아닌 값이 들어가면 '**' 그 문자열을

    > 찾은 거잖아요.

    >

    > 그때 그 문자열이 있는 edit 의 line 카운트값을

    > 알고 싶은데

    > 메쏘드나 변수들을 아무리 찾아봐도 없네요.

    > 그럼 고수분들 답변 부탁드립니다.

    >



    고수는 아니지만 쩝..

    델파이 헬프의 예제에다 한줄만 추가했습니다.



    procedure TForm1.Button1Click(Sender: TObject);

    var EndPos : LongInt;

    StartPos, ToEnd, LineNum : Integer;

    i : Integer;

    begin

    FindDialog1.Position := Point(RichEdit1.Left + RichEdit1.Width, RichEdit1.Top);

    FindDialog1.Execute;

    end;



    procedure TForm1.FindDialog1Find(Sender: TObject);

    var

    FoundAt: LongInt;

    StartPos, ToEnd: integer;

    begin

    with RichEdit1 do

    begin

    { begin the search after the current selection if there is one }

    { otherwise, begin at the start of the text }



    if SelLength <> 0 then

    StartPos := SelStart + SelLength

    else

    StartPos := 0;

    { ToEnd is the length from StartPos to the end of the text in the rich edit control }

    ToEnd := Length(Text) - StartPos;

    FoundAt := FindText(FindDialog1.FindText, StartPos, ToEnd, [stMatchCase]);

    if FoundAt <> -1 then

    begin

    SetFocus;

    SelStart := FoundAt;

    SelLength := Length(FindDialog1.FindText);

    //*********************************추가한 부분

    ShowMessage(IntToStr(RichEdit1.Perform(EM_LINEFROMCHAR,-1,0)));

    //****************************************************************

    end;

    end;

    end;

    end.



    EM_LINEFROMCHAR 메세지는 현재 라인값을 받아오는 메세지입니다.

    그럼...

    수고하세요..



  • Profile
    석기명 2000.02.17 07:17
    이현우 wrote:

    > 석기명 wrote:

    > > 에디트에서 FindText를 사용했을때. 만약

    > > EndPos:= FindText('**', StartPos, ToEnd, [stMatchCase]);

    > > EndPos 에 -1 아닌 값이 들어가면 '**' 그 문자열을

    > > 찾은 거잖아요.

    > >

    > > 그때 그 문자열이 있는 edit 의 line 카운트값을

    > > 알고 싶은데

    > > 메쏘드나 변수들을 아무리 찾아봐도 없네요.

    > > 그럼 고수분들 답변 부탁드립니다.

    > >

    >

    > 고수는 아니지만 쩝..

    > 델파이 헬프의 예제에다 한줄만 추가했습니다.

    >

    > procedure TForm1.Button1Click(Sender: TObject);

    > var EndPos : LongInt;

    > StartPos, ToEnd, LineNum : Integer;

    > i : Integer;

    > begin

    > FindDialog1.Position := Point(RichEdit1.Left + RichEdit1.Width, RichEdit1.Top);

    > FindDialog1.Execute;

    > end;

    >

    > procedure TForm1.FindDialog1Find(Sender: TObject);

    > var

    > FoundAt: LongInt;

    > StartPos, ToEnd: integer;

    > begin

    > with RichEdit1 do

    > begin

    > { begin the search after the current selection if there is one }

    > { otherwise, begin at the start of the text }

    >

    > if SelLength <> 0 then

    > StartPos := SelStart + SelLength

    > else

    > StartPos := 0;

    > { ToEnd is the length from StartPos to the end of the text in the rich edit control }

    > ToEnd := Length(Text) - StartPos;

    > FoundAt := FindText(FindDialog1.FindText, StartPos, ToEnd, [stMatchCase]);

    > if FoundAt <> -1 then

    > begin

    > SetFocus;

    > SelStart := FoundAt;

    > SelLength := Length(FindDialog1.FindText);

    > //*********************************추가한 부분

    > ShowMessage(IntToStr(RichEdit1.Perform(EM_LINEFROMCHAR,-1,0)));

    > //****************************************************************

    > end;

    > end;

    > end;

    > end.

    >

    > EM_LINEFROMCHAR 메세지는 현재 라인값을 받아오는 메세지입니다.

    > 그럼...

    > 수고하세요..

    >



    한번 해봤거든요. 그런데

    FoundAt := FindText('가', StartPos, ToEnd, [stMatchCase]);

    if FoundAt <> -1 then

    begin

    SetFocus;

    SelStart := FoundAt;

    SelLength := Length(FindDialog1.FindText);

    //*********************************추가한 부분

    ShowMessage(IntToStr(RichEdit1.Perform(EM_LINEFROMCHAR,-1,0)));

    //****************************************************************

    end;



    FoundAt := FindText('나', StartPos, ToEnd, [stMatchCase]);

    if FoundAt <> -1 then

    begin

    SetFocus;

    SelStart := FoundAt;

    SelLength := Length(FindDialog1.FindText);

    //*********************************추가한 부분

    ShowMessage(IntToStr(RichEdit1.Perform(EM_LINEFROMCHAR,-1,0)));

    //****************************************************************

    end;



    위와 같이 가를 찾을때는 정확한 라인count를 알수 있는데

    두번째 사용했을때는 첫번재 라인count하고 똑같아 지네요..



    초기화를 시켜야 하는 건가요? 답변 부탁드립니다.