Гость_Riedle |
Отправлено: 28.09.2003, 22:03 |
|
Не зарегистрирован
|
Зздравствуйте !
У меня вот какая-проблема!
Мне необходимо в тексте компонента TRichEdit при наведении мышкой на какой-то символ, например 'd', изменить тип курсора (это необходимо для эффекта различных ссылок). Т.е. необходимо в зависимости от курсора мышки как-то перемещать каретку, что-ли
Заранее благодарен,
Борщев Д.А. |
|
Admin |
Отправлено: 30.09.2003, 15:09 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
Наверное вопрос заключается в том,
как определить положение над каким символом
в данный момент проходит курсор.
Это можно сделать, послав в RichEdit сообщение EM_CHARFROMPOS.
В LPARAM передаются координаты мыши по X,Y а получаемое
значение есть номер символа в RichEdit.
CODE |
void __fastcall TForm1::RichEdit1MouseMove(TObject *Sender,
TShiftState Shift, int X, int Y)
{
long i;
TPoint Tp;
Tp.x = X; Tp.y = Y;
i = SendMessage(RichEdit1->Handle,EM_CHARFROMPOS,0,(long)&Tp);
Label1->Caption = IntToStr(i);
Label2->Caption = IntToStr(Tp.x)+":"+IntToStr(Tp.y);
// можем и раскрасить этот символ
RichEdit1->SelStart = i;
RichEdit1->SelLength = 1;
RichEdit1->SelAttributes->Color = clRed;
// при желании можем получить и его координаты
номер символа — номер строки
int LineNum = SendMessage(RichEdit1->Handle,EM_LINEFROMCHAR,RichEdit1->SelStart,0);
Label4->Caption = "LineNum = "+IntToStr(LineNum);
int CharBeforeLine = SendMessage(RichEdit1->Handle, EM_LINEINDEX, LineNum, 0);
Label5->Caption = "Position = "+IntToStr(RichEdit1->SelStart — CharBeforeLine + 1);
// при желании можем изменить и тип курсора мыши
над определенным символом (например 'd')
if(i > 0 && RichEdit1->Text[i] == 'd')
RichEdit1->Cursor = crHandPoint;
else RichEdit1->Cursor = crDefault;
}
//-------------------------------------
|
Удачи.
|
|
|