|
GetCaretPos(); 함수를 이용하세요
그러면 현재 Caret위치의 좌표를 가져올수 있습니다.
자동완성기능이 제대로 되어있지는 않습니다만 아래는 간단한 샘플입니다.
[ 샘 플 ]
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
//디자인타임때 설정할수도 있습니다.
ListBox1->Parent=REdt->Parent; //ListBox가 RichEdit위에 오려면 RichEdit와 Parent가 같아야 합니다.
ListBox1->BringToFront(); //또 RichEdit보다 앞쪽에 배치되어있어야 합니다.
this->DoubleBuffered=true; //Visible를 조작하므로 혹시나.. 껌뻑거림이 발생할까봐...
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SetLocationListBoxAtCaretPos() //Caret위치에 ListBox를 옮겨줍니다.
{
int x,y;
TPoint pt;
GetCaretPos(&pt); //Caret위치의 좌표를 가져옵니다.
ListBox1->Left=pt.x+REdt->Left; //Caret위치를 RichEdit 의 위치만큼 조정합니다.
ListBox1->Top=pt.y+REdt->Top;
//만약 ListBox에 자동완성 String을 넣어서 선택하고자 한다면 아래와 같이...
//ListBox1->Clear();
// ListBox1->Add("asdfasdf 1");
// ListBox1->Add("asdfasdf 2");
// ListBox1->Add("asdfasdf 3");
// ListBox1->Add("asdfasdf 4");
// ListBox1->SetFocus();
ListBox1->Visible=true; //숨겼뒀던 ListBox를 보여줍니다.
}
//---------------------------------------------------------------------------
void __fastcall TForm1::REdtKeyPress(TObject *Sender, char &Key)
{
if(Key=='k') //소문자 k를 입력했을때 보여주도록 하였습니다.
{
SetLocationListBoxAtCaretPos();
}
else
{
ListBox1->Visible=false; //원하는 Key가 아닐경우 ListBox를 안보이게 합니다.
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::REdtExit(TObject *Sender)
{
ListBox1->Visible=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::REdtMouseDown(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
{
ListBox1->Visible=false;
}
//---------------------------------------------------------------------------
이광일 님이 쓰신 글 :
: 제목 그대롭니다.. Builder의 자동완성 기능을 생각하시면 될듯...
: 간단할 것 같은데... 생각처럼 쉽지가 않내요...
: 부탁드립니다..^^
|