|
버튼을 누르면 Memo의 실질적인 데이터 맨 끝으로 가게하는 소스를 간단히 구현해 보았습니다.
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int itLine = Memo1->Lines->Count - 1 < 1 ? 0 : Memo1->Lines->Count - 1;
Memo1->SetFocus();
Memo1->SelStart = Memo1->Perform(EM_LINEINDEX, itLine, 0) + Memo1->Lines->Strings[itLine].Length();
SendMessage(Memo1->Handle, EM_SCROLLCARET, 2, 2);
}
괴로운 님이 쓰신 글 :
: 다음과 같이 메모장을 출력하고 있습니다.
: for(int i=0; i<=Height; i++)
: Draw(id+i*width, i); //
: 위는 메모장의 크기만큼 출력하는 루틴입니다.
: 그러니 커서가 다음 칸을 가르키까 맨 위의 라인의 보이지 않고 위로 올라가고
: 맨밑의 공간 라인이 추가되면서 커서가 맨 마지막 공간라인의 첫번째 셀을 가리키고 있더군여..
:
: 전 커서가 마지막 출력 라인(즉 공간라인)바로 위의 라인의 맨끝 라인을 가리키게 하고 싶고
: 그 다음 공간라인은 제거하고 싶습니다.
:
: 그래서
: TShiftState shift;
: sfift << ssHift; // 이부분은 따로 쓸 내용이 없어서 이렇게 적었습니다.
: //그냥 아무키다 받습니다 하니 방법을 잘 몰라서...
: //아시는 분 도움 부탁..
: MemoKeyDown(Memo,VK_SPACE,shift);
:
: 위와 같이 해서 MemoKeyDown을 추가하여 이부분은 그냥 메세지만 출력했습니다.
: MemoKeyDown 는 Memo장의 OnKeyDown에 적었습니다.
: MemoKeyDown 의 내용은 다음과 같습니다.
: case VK_BACK : Memo1->Lines->Delete(Height); //마지막 출력라인 즉 공간라인 제거
: ShowMessage("VK_BACK Press");
: Memo1->SelStat = height -1; //이렇게 하면 라인 크기 끝 라인 바로
: // 위로는 갈줄 알았습니다.
: break;
:
: 아무래도 위의 방법은 아닌거 같습니다.
: 혹시 아시는분 답변좀 헤 주세여..
|