안녕하세요.
메모 컴포넌트를 가지고 할 수 있는 여러가지 방법들입니다.
하시는 프로그램에 도움이 되시기를....
1) 현재 라인번호 알아내기
메모에서 현재 Caret이 위치하고 있는 줄이 몇 번째 줄인지를 리턴한다.
Label1.Caption := IntToStr(GetCurrLine(Memo1));
function GetCurrLine(Memo : TMemo) : integer;
begin
Result := Memo.Perform(EM_LINEFROMCHAR, Memo.SelStart, 0);
end;
2) 현재 컬럼번호 알아내기
메모에서 현재 Caret이 위치하고 있는 줄에서 몇 번째 컴럼인지를 리턴한다.
Label1.Caption := IntToStr(GetCurrCul(Memo1));
function GetCurrCul(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을 원하는 컬럼으로 이동하기
SetCurrCul(Memo1. 10);
procedure SetCurrCul(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;
|