Q&A

  • TMemo의 마지막으로 가게 하는 방법
안녕하세요.

질문 하나가 있어서....

메모 컴포넌트를 사용하고 있는데 메모에는 계속적으로 1라인씩 증가하는

데 사용 하고 있습니다.

최근것을 보기 위해서는 메모의 마지막으로 가는 방법이 필요 한데

알 수가 없군요.

답변좀 부탁합니다.

1  COMMENTS
  • Profile
    이정욱 1999.04.23 07:08
    파워러브 델파이 창간호의 일부 입니다~



    1. 현재 라인번호 알아내기

    메모에서 현재 Caret이 위치하고 있는 줄이 몇번째 줄인지를 리턴한다.





    Caption := IntToStr( GetCurrLine(Memo1) );



    function GetCurrLine(Memo : TMemo) : integer;

    begin

    Result := Memo.Perform(EM_LINEFROMCHAR, Memo.SelStart, 0);

    end;



    2. 현재 컬럼알아내기

    현재 Caret이 몇번째 컬럼에 위치하는지를 리턴한다.





    Caption := IntToStr( GetCurrPos(Memo1) );



    function GetCurrPos(Memo : TMemo) : integer;

    begin

    Result := Memo.SelStart -

    Memo.Perform(EM_LINEINDEX, GetCurrLine(Memo), 0);

    end;



    3. 커서를 원하는 라인으로

    Caret을 원하는 라인으로 위치시킨다. 이때 넘겨주는 값이 라인의 한계를 벗어나면 그안으로 위치시킨다. 즉 메모의 맨 끝으로 Caret을 위치시키려면 매우 큰수를 주면된다.





    SetCurrLine(Memo1, 10);



    procedure SetCurrLine(Memo : TMemo; Value: integer);

    begin

    if Value < 0 then Value := 0;

    if Value > Memo.Lines.Count then Value := Memo.Lines.Count;

    Memo.SelLength := 0;

    Memo.SelStart := Memo.Perform(EM_LINEINDEX, Value, 0);

    end;



    4. 커서를 원하는 컬럼으로

    Caret의 컬럼위치를 변경한다.





    SetCurrPos(Memo1, 10);



    procedure SetCurrPos(Memo : TMemo; Value: integer);

    var CurrLine : integer;

    begin

    CurrLine := GetCurrLine(Memo);

    if Value < 0 then Value := 0;

    if (Value > Length(Memo.Lines[CurrLine])) then

    Value := Length(Memo.Lines[CurrLine]);

    Memo.SelLength := 0;

    Memo.SelStart := Memo.Perform(EM_LINEINDEX, CurrLine, 0) + Value;

    end;



    5. Text가 쓰여지는 영역알기

    현재 Text가 쓰여지는 영역을 TRect형으로 리턴한다. 단순히 TMemo의 Width와 Height만을 가지는 텍스트가 그려지는 정확한 영역을 알수 없다. 즉 글자의 높이가 10이고 메모의 높이가 25라면 2라인만이 그려지게된다. 따라서 글자가 그려지는 정확한 영역을 알아야 한다면 이함수를 쓰는게 좋다.





    Rect := GetTextRect(Memo1);



    function GetTextRect(Memo : TMemo) : TRect;

    var

    lParam : TRect;

    begin

    Memo.PerForm(EM_GETRECT, 0, Integer(@lParam) );

    Result := lParam;

    end;



    6. 메모에서 현재 보이는 라인수 알기

    GetTextRect를 이용해서 현재 메모에 그려지는 글자들이 몇줄로 그려지는지를 정확히 알수 있다.





    Caption := IntToStr( GetVisibleLine(Memo1) );



    function GetVisibleLine(Memo : TMemo) : integer;

    var

    Metric : TTextMetric;

    DC : hDC;

    begin

    DC := GetWindowDC(Memo.Handle);

    GetTextMetrics(DC, Metric);

    Result := (GetTextRect(Memo).Bottom div Metric.tmHeight);

    end;



    7. 원하는 라인만큼 스크롤

    현재상태에서 원하는 만큼 x,y로 스크롤한다.





    Scroll_By(Memo1, 10, 10);



    procedure Scroll_By(Memo : TMemo; X: integer; Y: integer);

    begin

    Memo.Perform(EM_LINESCROLL, X, Y);

    end;







    파워러브 델파이!! 97년 3월 제 1호!!





    배리스 wrote:

    > 안녕하세요.

    > 질문 하나가 있어서....

    > 메모 컴포넌트를 사용하고 있는데 메모에는 계속적으로 1라인씩 증가하는

    > 데 사용 하고 있습니다.

    > 최근것을 보기 위해서는 메모의 마지막으로 가는 방법이 필요 한데

    > 알 수가 없군요.

    > 답변좀 부탁합니다.





    • 공대규
    • 1999.04.23 22:45
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 안치봉
      1999.04.23 23:23
      공대규 wrote: > 안녕하십니까요? > > PaintBox에 Image1.canvas를 카피하려 할 때, 에러가 납니다. >...
    • 곽승주
    • 1999.07.06 00:22
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 그냥
      1999.07.06 02:09
      곽승주 께서 말씀하시기를... > Edit콘트롤에 KeyPress이벤트를 걸러두고 그안에서 엔터키(#13)가 > 눌려...
    • 공대규
    • 1999.04.23 22:45
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 안치봉
      1999.04.23 23:23
      공대규 wrote: > 안녕하십니까요? > > PaintBox에 Image1.canvas를 카피하려 할 때, 에러가 납니다. >...
    • 그냥
      1999.07.06 02:03
      답이 아닌거 같긴한데... 제가 아는한 TQuery는 filer를 하지 않아도 Sql문에 그냥 조건절(where)를 사...
    • 이상준
    • 1999.04.23 18:51
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김영대
      1999.04.23 21:07
      이상준 wrote: > 윈도95의 바탕화면에 있는 네트워크 환경처럼 LAN으로 연결된 컴퓨터들의 > 컴퓨터 이름...
    • 고광준
      1999.07.05 23:06
      Unix Server와 PC와 UDP Socket을 써서 통신을 하려고 합니다. 근데 Unix Server에서 Port를 입력할때 hto...
    • 김영대
      1999.07.05 23:50
      고광준 께서 말씀하시기를... > Unix Server와 PC와 UDP Socket을 써서 통신을 하려고 합니다. > 근데 Un...
    • 이민병
    • 1999.04.23 19:14
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김경수
      1999.04.24 05:06
      안녕하세요 김경수라는 사람입니다. 전 nt용 오라클8하구 델파이4랑 해봤는데 뭐 같은내용이겠지요.. 오...
    • camplus
    • 1999.07.05 22:46
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 최석기
    • 1999.07.05 21:46
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 이상준
      1999.04.23 18:51
      윈도95의 바탕화면에 있는 네트워크 환경처럼 LAN으로 연결된 컴퓨터들의 컴퓨터 이름을 읽어오는 방법을 ...
    • 김영대
      1999.04.23 21:07
      이상준 wrote: > 윈도95의 바탕화면에 있는 네트워크 환경처럼 LAN으로 연결된 컴퓨터들의 > 컴퓨터 이름...
    • 임윤경
    • 1999.04.23 00:54
    • 2 COMMENTS
    • /
    • 0 LIKES
    • Jimmy
      1999.07.05 21:11
      안녕하세요... 회계관련 프로그램인데...두 테이블에 '잔액'이라는 필드가 있습니다. 이걸 계산해야 하는...
    • 김영대
      1999.04.23 18:23
      임윤경 wrote: > 제가 김영대씨 홈페이지에서 받은 FTP서버의 파일을 PC로 다운로드하는 소스에 보면, rec...
    • bisbuck
    • 1999.07.05 20:58
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 1999.07.05 20:27
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 이현아
      1999.04.23 03:04
      안녕하세요! 저는 이제 막 델파이 공부를 하는 직장인입니다. 다름이 아니구요! Edit박스로 성명...
    • 송기원
      1999.07.06 18:10
      EdbEngineError 의 errors[index].errorcode 또는 errors[index].NativeError를 참조하면 될거 같은데.. ...
    • 김영대
      1999.04.23 18:04
      이현아 wrote: > 안녕하세요! > 저는 이제 막 델파이 공부를 하는 직장인입니다. > 다름이 아니구요! >...
    • 이현아
      1999.04.24 16:43
      김영대 wrote: > 이현아 wrote: > > 안녕하세요! > > 저는 이제 막 델파이 공부를 하는 직장인입니다. ...
    • 강지영
      1999.04.23 00:51
      구창민님의 홈페이지 팁/강좌란에서 읽은 팁입니다. 실행을 하니까 그리드의 타이틀을 클릭하는 대로 쿼리...
    • 신인재
      1999.07.05 21:15
      Parent 프로퍼티를 설정하셔야 합니다. 아래와 같이 MyBtn.Parent := ScrollBox1; 서경철 께서 말씀...
    • 배리스
      1999.04.23 17:51
      안녕하세요. 강지영씨.. 오늘은 날씨가 별로 좋지 않네요. 하지만 이런 날씨가 더 좋은것 같습니다. 왜냐...
    • 김형하
    • 1999.04.22 20:25
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 레드맨
      1999.07.05 20:00
      델파이를처음 시작하려고 합니다. 뭐부터시작 해야할지? 자세히설명해주세요!!!부탁합니다.....
    • 이정욱
      1999.04.23 07:10
      네.. 저희도 통신 프로그램의 터미널을 만들때 부딪혔던 문제입니다. 프린터같은 경우면 간단하게 LineTo...
    • 배리스
    • 1999.04.23 06:39
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.04.23 07:08
      파워러브 델파이 창간호의 일부 입니다~ 1. 현재 라인번호 알아내기 메모에서 현재 Caret이 위치하...
    • 문창완
    • 1999.04.23 05:16
    • 4 COMMENTS
    • /
    • 0 LIKES
    • Endy
      1999.07.05 19:19
      저는 MS-SQL7.0을 사용합니다. Delphi에서 StoreProcedure를 실행하면 BDE Engine Error가 발생 합니다. 물...
    • 이정욱
      1999.04.23 07:03
      참.. 혹시 검색엔진이 야후같은것을 말씀하신것이라면 기본개념은 이렇습니다. 별것 아니죠. 데이타 베...
    • 조복기
      1999.07.05 19:54
      Endy 께서 말씀하시기를... > 저는 MS-SQL7.0을 사용합니다. Delphi에서 StoreProcedure를 실행하면 BDE E...
    • 이정욱
      1999.04.23 07:01
      그냥 참고만 하세요~ http://www.nobreak.com 에 가시면 CrazySearch라는것이 있습니다. 그것의 소스를 ...