관리자입니다. ^_^

이번에도 저번과 유사하게 현재 위치에서 한글자를 지우고 싶으신 것이 맞나요?
보통 이런 기능이 필요한 경우가 거의 없기 때문에 요번엔 조금 복잡해 보이실 수도 있을것 같은데요
일단 매크로는 아래와 같습니다. 기본 매크로 자체는 간단한 편이지요


Delete(CCP_CURRENTLINE, CCP_CARETX, 1);
CCP_CARETX := CCP_CARETX - 1;


첫번째 줄에서 커서의 위치에 있는 1개의 문자를 지운뒤
두번째 줄에서 커서를 앞으로 한줄 당기는 기능을 수행하는 것이 기본 동작입니다.

이 매크로의 경우 실제 백스페이스와 약간 차이가 있는데,

커서가 제일 앞에 있을 경우 아무런 작동을 하지 않는다는 점입니다.

때문에 그 기능까지 필요로 한다면 경우에 따라서 현재의 줄과 바로 위의 줄을 합쳐주는 기능을 넣어야겠지요.
제법 복잡해지지만 전체 매크로가 아래와 같습니다.


if (CCP_CARETX <= 0) Then
Begin
If (CCP_CARETY <= 0) Then Exit;
CCP_CARETY := CCP_CARETY - 1;
CCP_CARETX := Length(CCP_CURRENTLINE);
CCP_CURRENTLINE := CCP_CURRENTLINE + CC_GETLINETEXT(CCP_CARETY+1);
CC_DELETELINE(CCP_CARETY+1)
End
Else
Begin
Delete(CCP_CURRENTLINE, CCP_CARETX, 1);
CCP_CARETX := CCP_CARETX - 1;
End;


조건문이 쓰이게 되는데요,

커서의 위치가 제일 앞일때에는 (CCP_CARETX <= 0) 아래에서 설명할 별도의 다른 동작을 수행하는 것입니다.

먼저 줄이 제일 처음 줄이면 아무것도 하지 않습니다. 매크로를 EXIT 하는거죠
If (CCP_CARETY <= 0) Then Exit;

다음으로 Y 좌표인 줄을 한줄 위로 이동한 다음에
CCP_CARETY := CCP_CARETY - 1;

커서의 위치를 줄의 가장 끝으로 이동합니다.
CCP_CARETX := Length(CCP_CURRENTLINE);

다음으로 해당 줄에 아랫줄의 내용을 끌어다가 붙입니다.
CCP_CURRENTLINE := CCP_CURRENTLINE + CC_GETLINETEXT(CCP_CARETY+1);

아래줄의 내용은 현재줄에 추가되었으므로 중복되는 아랫줄을 지웁니다.
CC_DELETELINE(CCP_CARETY+1)

설명은 달았지만 제법 어려우실지도 모르겠습니다 ^_^;;
추가적으로 문의사항이 있으시면 얼마든지 문의해주시면 답해드리도록 하겠습니다.

그럼 멋진 매크로 만드세요~

Posted by 투명인간취급
,