dom::editbox::replace() работает некорректно
От: Hawk Россия  
Дата: 11.10.10 10:43
Оценка: 40 (1)
В текущей версии HTMLayout (3.3.2.14) htmlayout::dom::editbox::replace() вставляет текст только если есть выделение (т.е. выделен хотя бы один символ). Если просто переместить каретку в любую позицию внутри текста, вставка не работает.

В заголовках у меня следующий код:

  C:\...\HTMLayout\include\htmlayout_behavior.h
...
enum BEHAVIOR_METHOD_IDENTIFIERS
  {
...
    // Replace selection content or insert text at current caret position.
    // Replaced text will be selected. 
    TEXT_EDIT_REPLACE_SELECTION, 
      // p - TEXT_EDIT_REPLACE_SELECTION_PARAMS
...
  }
...
  struct TEXT_EDIT_REPLACE_SELECTION_PARAMS: METHOD_PARAMS
  {
    LPCWSTR text;
    UINT    text_length;
    TEXT_EDIT_REPLACE_SELECTION_PARAMS() { methodID = TEXT_EDIT_REPLACE_SELECTION; }
  };
...

  C:\...\HTMLayout\include\htmlayout_dom.hpp
...
    class editbox: public element
    {
        
      public: 
        ...
        bool replace(const wchar_t* text, size_t text_length)
        {
          TEXT_EDIT_REPLACE_SELECTION_PARAMS sp;
          sp.text = text;
          sp.text_length = UINT(text_length);
          return call_behavior_method(&sp);
        }
...

Вызываю так:
...
htmlayout::dom::editbox edit = root.find_first( _T( "#test_edit" ) );
ASSERT( edit.is_valid() );

edit.set_state( STATE_FOCUS );

CString sTest = _T( "Test" );
edit.replace( t2w( sTest ), sTest.GetLength() );


Работает, но только если внутри edit уже выделен какой-то текст. Если просто переместить каретку — не работает.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.