Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.01.2009, 13:41   #1
user_jasser
я не ~
Пользователь
 
Аватар для user_jasser
 
Регистрация: 19.09.2008
Сообщений: 58
По умолчанию координаты символов в Edit

вабщем не пойму как работает си-ма метрици каретки. тоесть я нахожу координаты каретки в пикселях(GetCaretPos), потом делю размеры окна на ширину и длину симвала. здесь все хорошо работает и я нахожу какой симвал возле каретки. А вот проблемы начинаються когда происходит скрол текста. Ведь координаты каретки теже, а вот текст уже не тот. Как мне испровить? Как находить символ возле каретки учитывая скрол текста?

Последний раз редактировалось user_jasser; 29.01.2009 в 14:29.
user_jasser вне форума Ответить с цитированием
Старый 29.01.2009, 18:46   #2
Д'якон
Форумчанин
 
Регистрация: 05.12.2007
Сообщений: 236
По умолчанию

Я таким не занимался, но я предположу что эдиту приходит WM_PAINT при скроле.
Д'якон вне форума Ответить с цитированием
Старый 29.01.2009, 19:36   #3
user_jasser
я не ~
Пользователь
 
Аватар для user_jasser
 
Регистрация: 19.09.2008
Сообщений: 58
По умолчанию

вобщем немного разобрался. GetScrollPos и иму подобные должны мне помоч хз. тулько вот нарыл немного инфы. если есть у кого нить пример залейте плис...
user_jasser вне форума Ответить с цитированием
Старый 30.01.2009, 19:18   #4
user_jasser
я не ~
Пользователь
 
Аватар для user_jasser
 
Регистрация: 19.09.2008
Сообщений: 58
По умолчанию

с координатами разобрался. появилась еще одна проблема:
я нахожу ширину и высоту символов так:

Код:
procedure TScrewDriver.CharMetrics(Hnd: hWND);
var
 DC: HDC;
 TM: TEXTMETRIC;
begin
  DC:= GetDC(HND);
 
  //fillchar(TM, sizeof(TM), 0);
  GetTextMetrics(DC, @TM);
  
  DebugMessage(':CharX: ' + IntToStr(TM.tmAveCharWidth));
  DebugMessage(':CharY: ' + IntToStr(TM.tmHeight));

  FCharWidth:= TM.tmAveCharWidth;
  FCharHeight:= TM.tmHeight;
  ReleaseDC(HND, DC);
end;
все вроде правельно находит высоту 16 и ширину 8. но вот когда я меняю шрифт на другой. все равно эта ф-ия возвращает теже параметры, а они должны быть явно другие... Что я не так делаю?
user_jasser вне форума Ответить с цитированием
Старый 31.01.2009, 19:14   #5
user_jasser
я не ~
Пользователь
 
Аватар для user_jasser
 
Регистрация: 19.09.2008
Сообщений: 58
По умолчанию

Блин, так и не разобрался... подозреваю, что не находиться нужный HDC, хотя окно сто-пудово то в котором текст. класс окна Scintilla можеть из за этого баг?
Еще я могу находить имя стиля и размер фонта. можеть это както поможет определить ширину и длину символа? Подмогните! *отчаянье*

Последний раз редактировалось user_jasser; 31.01.2009 в 19:49.
user_jasser вне форума Ответить с цитированием
Старый 01.02.2009, 17:32   #6
user_jasser
я не ~
Пользователь
 
Аватар для user_jasser
 
Регистрация: 19.09.2008
Сообщений: 58
По умолчанию

еще вопросик:

такая вот формула размера шрифта

Код:
TLogFont.lfHeight:= - Round(10 * GetDeviceCaps(DC, LOGPIXELSY) / 72);
TLogFont.lfWidth:= 0;
будет аналогично Size в VCL?

Код:
TFont.Size:= 10;
user_jasser вне форума Ответить с цитированием
Старый 02.02.2009, 21:03   #7
user_jasser
я не ~
Пользователь
 
Аватар для user_jasser
 
Регистрация: 19.09.2008
Сообщений: 58
По умолчанию

все получилось, но оказалось это все равно не выход, ведь шрифты бывают с не фиксированной шириной символов. Вобщем оказалось что я не в том направлении копал.

Вот кажись простой и стабильный вариант:

Код:
function GetCaretPosXY(Handle: hWnd): 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;
user_jasser вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск и замена групп символов данными из edit в memo treefantom Общие вопросы Delphi 5 26.10.2008 17:26
Ограничение по вводу символов в Edit-e Alexij Общие вопросы Delphi 1 26.06.2008 16:27
Координаты ОУ? Fainder Общие вопросы Delphi 9 15.10.2007 20:59
координаты Aram Общие вопросы C/C++ 5 08.06.2007 20:03
Image1.canvas.textout. Координаты символов Alar Компоненты Delphi 0 29.10.2006 22:04