Форум — Ответы     (  К темам )
 ?  SKh: Подскажите как узнать месторасположение курсора (08-01-2003 19:40:32)
Подскажите как узнать месторасположение курсора в текстовом поле RichEdit или Memo и как заставить его перейти в заданную позицию?
Заранее благодарен
 Владимир (08-01-2003 22:23:56)
// что касается получения позиции курсора, то это можно так
void __fastcall TForm1::Button1Click(TObject *Sender)
{
long LineNum;
long CharNum;

LineNum = Memo1->Perform(EM_LINEFROMCHAR, Memo1->SelStart, 0);
CharNum = Memo1->Perform(EM_LINEINDEX, LineNum, 0);
Label1->Caption = IntToStr(LineNum+1)+" : "+IntToStr((Memo1->SelStart-CharNum)+1);

}
 Владимир (08-01-2003 23:04:43)
TPoint tp = Memo1->CaretPos;
Label1->Caption = IntToStr(tp.x)+" : "+IntToStr(tp.y);
 Владимир (08-01-2003 23:42:56)
Это если нужны позиции по х у, а если вообще номер символа то

long lg = Memo1->SelStart;

а установить курсор в заданную позицию

Memo1->SelStart = ...

SelStart — указывает позицию первого выделенного символа в тексте, или, если
выделения текста нет, то позицию курсора
 SKh (09-01-2003 05:42:00)
Большое спасибо!
 Владимир (13-01-2003 19:23:15)
// Да, и еще , так можно установить курсор в позицию по X,Y
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
MemoCursor(Memo1, 1, 5); // вместо 1,5 выберите нужную позицию
}
//---------------------------------------------------------------------------

void MemoCursor(TMemo* Memo, int X, int Y)
{
Memo-> SetFocus();
Memo-> SelStart = SendMessage (Memo-> Handle, EM_LINEINDEX,X, 0)+ Y — 1;
PostMessage(Memo -> Handle,WM_KEYDOWN,VK_LEFT,0);
PostMessage(Memo -> Handle,WM_KEYDOWN,VK_RIGHT,0);
}
//---------------------------------------------------------------------------