Событие клик
От: Jukier  
Дата: 18.10.10 08:20
Оценка:
Добрый день.
Есть
<widget type="select" multiple>


Хочу при щелчке по элементу в дереве сделать текст редактируемым (изменить имя файла в дереве каталогов). Для этого вставляю в DOM <widget type=input>.
Но проблема в том, что по щелчку левой кнопкой мыши по элементу в дереве, в handle_mouse() не приходят события MOUSE_UP, MOUSE_DOWN и важное в данном случае MOUSE_CLICK.
Для правой кнопки мыши все события приходят.
Что делать?
Что означает событие 0xFFF?
Спасибо.
Re: Событие клик
От: c-smile Канада http://terrainformatica.com
Дата: 18.10.10 23:17
Оценка:
Здравствуйте, Jukier, Вы писали:

J>Но проблема в том, что по щелчку левой кнопкой мыши по элементу в дереве, в handle_mouse() не приходят события MOUSE_UP, MOUSE_DOWN и важное в


MOUSE_DOWN приходит. Вернее (MOUSE_DOWN | HANDLED) ибо select обрабатывает мышиные события.

Можно также ловить (MOUSE_DOWN | SINKING) если требуется обрбатывать событие до behavior:select.

А вообще всё несколько сложнее, вот более-менее полный пример в Sciter:

<html>
<head>
  <style>
  
    widget.editable[type="select"]
    {
      prototype: EditableList;
    }
    widget.editable[type="select"] caption[editor]
    {
      behavior:edit;
      cursor:text;
      outline:1px solid red;
    }
  
  </style>  
  <script type="text/tiscript">
  
  class EditableList
  {
    function attached()
    {
      this.editorCandidate = null;
      this.preValue = null;
    }
    
    function onOptionTextChanged(option, previousText, newText) {}
  
    function onControlEvent(evt)
    {
      if( evt.type == Event.SELECT_SELECTION_CHANGED )
      {
        var editor = this.$(caption[editor]);
        if( editor ) this.removeEditor(editor);
      }
    }
    
    function onFocus(evt)
    {
      if( evt.type == (Event.LOST_FOCUS | Event.SINKING ) &&
        view.focus.parent.$p(widget) === this )
          this.removeEditor(view.focus);
    }
    
    function onMouse(evt)
    {
      switch( evt.type )
      {
        case Event.MOUSE_DOWN:
          if(evt.target.$is(option:current>caption)) // tick on <caption> in current option
            this.editorCandidate = evt.target;
          else
            this.editorCandidate = null;
          break;
        case Event.MOUSE_UP:
          if(evt.target === this.editorCandidate) // tick on <caption> in current option
            this.setupEditor(evt.target);
          this.editorCandidate = null;
          break;
      }
    }
    function setupEditor(textEl)
    {
      this.preValue = textEl.text;
      textEl.attributes["editor"] = true;
      textEl.style#display; // force style to be updated and behavior:edit; to be removed.
      textEl.xcall(#selectAll,true);
      view.focus = textEl;
    }
    function removeEditor(editor)
    {
      var text = editor.value;
      editor.attributes["editor"] = undefined;
      editor.style#display; // force style to be updated and behavior:edit; to be removed.
      if( text != this.preValue )
        this.onOptionTextChanged(editor.parent, this.preValue, text);
      return true;
    }
  }
  
  </script>  
</head>
<body>

  <widget .editable type="select" multiple >
    <option><caption>One</caption></option>
    <option><caption>Two</caption></option>
    <option><caption>Three</caption></option>
  </widget>

</body>
</html>
Re[2]: Событие клик
От: Jukier  
Дата: 27.10.10 10:59
Оценка:
Спасибо.
А как сделать, чтобы при вводе текста edit расширялся на ширину введенного текста? Как узнать ширину текста в px?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.