Форум для программистов - задавайте интересные вопросы - получайте квалифицированные ответы
Компонент ввода текста, Перемещение каретки по тексту
  • maximkimmaximkim June 2011
    Пишу свой компонент с использованием GDI+. Компонент предназначен для ввода однострочного текста (типа TEdit), но выводится на экран средствами GDI+. Возникла проблема - при перемещение каретки ввода вправо - влево, каретка появляется не между символами. Для определения ширины символа (и соответственно расстояния на которое должна сдвинуться каретка) использую API функцию GetCharABCWidthsFloat. Функция срабатывает нормально, возвращая три необходимых величины. При этом если увеличить/уменьшить шрифт, изменить гарнитуру и т.п., то и функция начинает возвращать соответственно большие или меньшие данные. Но если перемещать каретку на величину возвращаемую этой функцией она, каретка, появляется где попало.
    Такое впечатление что результат функции не в пикселях, а в относительных единицах, хотя стоит режим MM_TEXT, что исходя из SDK соответствует - одна логическая единица = один пиксель.

    Может кто с подобным уже сталкивался?
    Буду благодарен за любые ответы и советы!!!
  • acidlynxacidlynx June 2011
    Может это из-за округления? Размеры шрифтов, обычно, в пунктах измеряются. А пункт - меньше пикселя. То есть тебе функция выдает, что ширина символа - 10 пунктов, а ты передвигаешь каретку на 10 пикселей, хотя надо двигать на 13.
Webparadox - разработка мобильных приложений под iOS и Android.