В текущей версии 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
уже выделен какой-то текст. Если просто
переместить каретку — не работает.