xcall для plaintext, input
От: Nikolaz Германия www.nikeware.com
Дата: 15.11.10 12:06
Оценка:
Здравствуйте!

Собственно сабж.Что-то перестали работать такие вызовы как cut, copy, paste. Может и раньше уже не работало. В одном из приложений перешел сразу с 3.3.1.35 на 3.3.2.35.
htmlayout xcall copy paste cut
Re: xcall для plaintext, input
От: Nikolaz Германия www.nikeware.com
Дата: 15.11.10 15:10
Оценка:
Здравствуйте, Nikolaz, Вы писали:

N>Собственно сабж...

Выяснилось следующее:
У меня в стилях стоит для plaintext и input следующее:
context-menu: null; /* disable standard context menu */

я отображаю своё контекстное меню и обрабатываю вызовы команд и их update через свои обработчики (в которых вызываю xcall);
Заметил, что это не работает только для plaintext, для input все ок.
Re: xcall для plaintext, input
От: Nikolaz Германия www.nikeware.com
Дата: 15.11.10 21:30
Оценка:
Здравствуйте, Nikolaz, Вы писали:

N>Здравствуйте!


N>перешел сразу с 3.3.1.35 на 3.3.2.35.

Только что проверил — "отвалилось" начиная с 3.3.2.01.

Что будем делать?
Re: xcall для plaintext, input
От: Walker_Tula  
Дата: 16.11.10 07:05
Оценка:
Здравствуйте, Nikolaz, Вы писали:

N>Здравствуйте!


N>Собственно сабж.Что-то перестали работать такие вызовы как cut, copy, paste. Может и раньше уже не работало. В одном из приложений перешел сразу с 3.3.1.35 на 3.3.2.35.


Я тоже задавал этот вопрос. посоветовали реализовывать так:

<html>
<head>
  <meta http-equiv='Content-Type' content='text/html; charset=UTF-8'/>
  <style>
  </style>
  <script type="text/tiscript">
  function Insert()
  {
    var rt = self.$( plaintext );
    rt.insertHtml( "Hello World" );
  }
  function Append()
  {
    var rt = self.$( plaintext );
    rt.appendHtml( "Hello World" );
  }
  
  function Paste()
  {
    var rt = self.$( plaintext );
    if( rt.canPaste() )
      rt.doPaste();
  } 
  
  self#insert.onClick = Insert;
  self#append.onClick = Append;
  self#paste.onClick = Paste;
 </script>
</head>
<body>
  <button #insert type="button">Insert</button> 
  <button #append type="button">Append</button>
  <button #paste type="button">Paste</button>
  <plaintext #editor toolbar="widget.toolbar"/>
</body>
</html>
Re[2]: xcall для plaintext, input
От: Nikolaz Германия www.nikeware.com
Дата: 16.11.10 08:46
Оценка:
Здравствуйте, Walker_Tula, Вы писали:

W_T>Я тоже задавал этот вопрос. посоветовали реализовывать так:

Так мне надо из С++ кода всё это проделать. Мало того,
хотелось бы еще проверять состояние команды (enable/disable).
Что-то вот не пойму — xcall задекларирован, но отвалился напрочь.
Или он уже depricated в новых версиях?

Разъясните пожалуйста обстановку?

Спасибо.
Re[3]: xcall для plaintext, input
От: c-smile Канада http://terrainformatica.com
Дата: 16.11.10 16:51
Оценка: 6 (1)
Здравствуйте, Nikolaz, Вы писали:

Это вот должно работать:

bool canCopy = dom::element::xcall("canCopy").get(false);
bool canCut = dom::element::xcall("canCut").get(false);
bool canPaste = dom::element::xcall("canPaste").get(false);

dom::element::xcall("doCopy");
dom::element::xcall("doCut");
dom::element::xcall("doPaste");
Re[4]: xcall для plaintext, input
От: Nikolaz Германия www.nikeware.com
Дата: 17.11.10 10:45
Оценка:
Здравствуйте, c-smile, Вы писали:
CS>Это вот должно работать:
Спасибо, Андрей!

Есть только небольшой вопрос. Для input'a это НЕ подходит. Похоже у него своя логика. Для него действительно на данный момент следующее:

bool canCopy = dom::element::xcall("сopy", false).get(false);
dom::element::xcall("copy", true);


Так вот, может это как-то унифицировать?

И кстати, что с такими элементами, как например caption в редактируемом combobox?
У него теперь также как и с plaintext?

Спасибо,
Николай
Re[5]: xcall для plaintext, input
От: Hawk Россия  
Дата: 24.11.10 16:50
Оценка: 46 (2)
Здравствуйте, Nikolaz, Вы писали:

N>Так вот, может это как-то унифицировать?


Присоединяюсь. А то сейчас приходится городить такую вот тупизну:

void HtmlWind::ProcessEditCommands( UINT nID )
{
    dom::root_element root( m_hWnd );

    dom::editbox edit = root.find_first( _T( "*:focus" ) );
    if( edit.is_valid() )
    {
        switch( nID )
        {
        case ID_EDIT_CUT:
            {
                edit.xcall( "cut", true );

                edit.xcall( "doCut", true );

                break;
            }
        case ID_EDIT_COPY:
            {
                edit.xcall( "copy", true );

                edit.xcall( "doCopy", true );

                break;
            }
        case ID_EDIT_PASTE:
            {
                edit.xcall( "paste", true );

                edit.xcall( "doPaste", true );

                break;
            }
        }
    }
}

Кроме того, при отсутствии метода валится assert. И если, например, идет периодическая проверка:

void MainFrame::OnUpdatePaste( CCmdUI* pCmdUI )
{
...
    if( !edit.xcall( "paste", false ).get( false ) || 
        !edit.xcall( "doPaste", false ).get( false ) )
    {
        pCmdUI->Enable( FALSE );
    }
...
}

То получим не один assert и не два, а примерно миллион.

Спасает только то, что можно залезть в htmlayout_dom.hpp и прибить этот злосчастный assert.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.