![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Непонятности с определением координат курсора в MEMO [D7, WinXP]
abhtr © (2006-05-29 14:59:00)Загружаю в MEMO текст из текстового файла. Для работы необходимо следить за координатами курсора. Начинаем с X=1, Y=1. Опускаемся по строчкам. Доходим до непонятного предела с координатами X=1, Y=2730. Следующий шаг на одну строчку вниз меняем координаты на X=-65535(с минусом), Y=1. Похоже на переполнение памяти. Но сами строчки идут нормальные, без всяких искажений. Как можно избежать этого "переполнения"?
TUser (2006-05-29 16:33:00) [1]Да, это переполнение, EM_GETSEL возвращает слишком большое значение
function TCustomMemo.GetCaretPos: TPoint;
begin
Result.X := LongRec(SendMessage(Handle, EM_GETSEL, 0, 0)).Hi;
Result.Y := SendMessage(Handle, EM_LINEFROMCHAR, Result.X, 0);
Result.X := Result.X - SendMessage(Handle, EM_LINEINDEX, -1, 0);
end;
abhtr (2006-05-29 15:52:00) [2]
procedure TfrmTxt_Dbf.memTXTKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
nPosX,
nPosY
: integer;
begin
nPosX := memTXT.CaretPos.X + 1;
nPosY := memTXT.CaretPos.Y + 1;
lbl_Info.Caption := 'Позиция символа: X='+IntToStr(nPosX)+', Y='+IntToStr(nPosY);
end;
TUser (2006-05-29 15:21:00) [3]Код давай