C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Эффект ссылок в тексте, Работа с TRichEdit
Гость_Riedle
Отправлено: 28.09.2003, 22:03


Не зарегистрирован







Зздравствуйте !

У меня вот какая-проблема!

Мне необходимо в тексте компонента TRichEdit при наведении мышкой на какой-то символ, например 'd', изменить тип курсора (это необходимо для эффекта различных ссылок). Т.е. необходимо в зависимости от курсора мышки как-то перемещать каретку, что-ли smile.gif

Заранее благодарен,
Борщев Д.А.
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;
}
//-------------------------------------


Удачи. biggrin.gif

Вернуться в Вопросы программирования в C++Builder