Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 TreeView и меню POPUP  [new]
psv73
Member

Откуда: Донецк
Сообщений: 55
Добрый день All !!!

Вот, при возне с TreeView получается такая ерунда. Из вызванного, правой кнопкой мыши над TreeView, меню пользователь выбирает действие. В случае если он выбрал "Редактировать", получается не так, как хотелось бы... как я понимаю достаточно вызвать метод StartLabelEdit() и все... но не выходит. Т.е. появляется рамка (в которой редактируется текст элемента TreeView) и сразу же исчезает, не предоставив возможность изменить данные...
Если же добавить задержку в код ( в моем случае wait '' timeout 0.1) то редактировать можно, но не видно КУРСОРА и соответственно не видно с какой позиции будут добавляться символы.

КОД:

LPARAMETERS lcPrompt, lnBar

DEACTIVATE POPUP _Edit_
RELEASE POPUPS _Edit_ 

DO CASE
  CASE lnBar=1   && --- Добавить элемент
    THIS.Add_new_item()
  CASE lnBar=2   && --- редактировать элемнт
    WAIT '' TIMEOUT 0.1
    THIS.SetFocus()
    THIS.StartLabelEdit() 
  CASE lnBar=3   && --- удалить элемнт
    THIS.DeleteItem()
ENDCASE

Если в методе DBlClick() я прописываю THIS.StartEditLabel() то все прекрасно работает!!!!
Где я перемудрил (или недомудрил) ;)

Спасибо!
22 мар 07, 15:33    [3929390]     Ответить | Цитировать Сообщить модератору
 Re: TreeView и меню POPUP  [new]
slavadem1
Guest
Попробуй так
В методе напиши DblClick() напиши THIS.StartLabelEdit()

адалее

LPARAMETERS lcPrompt, lnBar

DEACTIVATE POPUP _Edit_
RELEASE POPUPS _Edit_

DO CASE
CASE lnBar=1 && --- Добавить элемент
THIS.Add_new_item()
CASE lnBar=2 && --- редактировать элемнт
THIS.SetFocus()
THIS.dblcick()
CASE lnBar=3 && --- удалить элемнт
THIS.DeleteItem()
ENDCASE
22 мар 07, 21:35    [3930987]     Ответить | Цитировать Сообщить модератору
 Re: TreeView и меню POPUP  [new]
Погодин
Member

Откуда:
Сообщений: 117
Из приведенного примера непонятно, в каком методе вызывается код. Я использовал MSComctlLib.TreeCtrl.2. В нем нет события RightClick. Поэтому в его событии MouseUp написал:

*** ActiveX Control Event ***
LPARAMETERS button, shift, x, y
IF button=2
NODEFAULT
this.startLabelEdit
ENDIF

и все работает.
Если писать в событиях самой формы, то надо так (RightClick):

NODEFAULT
thisform.tree.startlabeledit
23 мар 07, 09:21    [3931680]     Ответить | Цитировать Сообщить модератору
 Re: TreeView и меню POPUP  [new]
psv73
Member

Откуда: Донецк
Сообщений: 55
Погодин
Из приведенного примера непонятно, в каком методе вызывается код. Я использовал MSComctlLib.TreeCtrl.2. В нем нет события RightClick. Поэтому в его событии MouseUp написал:

*** ActiveX Control Event ***
LPARAMETERS button, shift, x, y
IF button=2
NODEFAULT
this.startLabelEdit
ENDIF

и все работает.
Если писать в событиях самой формы, то надо так (RightClick):

NODEFAULT
thisform.tree.startlabeledit


Спасибо!
Действительно, код я влупил в MouseDouwn.
Если без меню, сделать так как вы описали, то работает, а если вызывать метод из меню, то уже не работает...
Теперь перенес его в MouseUp результат чуть лучше, но не идеальный... Теперь курсор появился, но без
wait '' timeout 0.1
попрежнему не дает редактировать запись...
В методе MouseUp я рисую меню (по клику правой кнопкой), изменю вызываю метод My_Tree.Choice(), ну а в нем сам код:
LPARAMETERS lcPrompt, lnBar

DEACTIVATE POPUP _Edit_
RELEASE POPUPS _Edit_ 

DO CASE
  CASE lnBar=1   && --- Добавить элемент
    THIS.Add_new_item(THIS.SelectedItem.Key)
  CASE lnBar=2   && --- Добавить элемент
    THIS.Add_new_item(THIS.Nodes.Item(THIS.SelectedItem.Key).Parent.Key)
  CASE lnBar=4   && --- редактировать элемнт
    WAIT '' TIMEOUT 0.1
    THIS.SetFocus()
    THIS.StartLabelEdit() 
  CASE lnBar=5   && --- удалить элемнт
    THIS.DeleteItem()
ENDCASE

в принципе, я выкрутился, но "выкрутился" значит неправильно решал ... хотелось бы понять, где ошибаюсь...
23 мар 07, 10:37    [3932063]     Ответить | Цитировать Сообщить модератору
 Re: TreeView и меню POPUP  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
Надеюсь, сделана глобальная настройка

_VFP.AutoYield = .F.
23 мар 07, 10:41    [3932091]     Ответить | Цитировать Сообщить модератору
 Re: TreeView и меню POPUP  [new]
psv73
Member

Откуда: Донецк
Сообщений: 55
ВладимирМ
Надеюсь, сделана глобальная настройка

_VFP.AutoYield = .F.


Сделал, не помогло... :(
23 мар 07, 10:49    [3932146]     Ответить | Цитировать Сообщить модератору
 Re: TreeView и меню POPUP  [new]
alex11100
Guest
уведите фокус с дерева
затем вызовите StartLabelEdit

также помогает оборачивание
вызова StartLabelEdit в ассайн метод
какого-нить другого объекта
23 мар 07, 10:56    [3932193]     Ответить | Цитировать Сообщить модератору
 Re: TreeView и меню POPUP  [new]
psv73
Member

Откуда: Донецк
Сообщений: 55
alex11100
уведите фокус с дерева
затем вызовите StartLabelEdit


Так он, вроде бы теряет фокус, ведь меню POPUP его забирает на себя... или я ошибаюсь?

alex11100
также помогает оборачивание
вызова StartLabelEdit в ассайн метод
какого-нить другого объекта


я все методы разместил в TreeView, хотел сделать его независимым от других объектов, т.е. чтобы все необходимое было в нем. Может как раз так и нельзя?
23 мар 07, 11:08    [3932283]     Ответить | Цитировать Сообщить модератору
 Re: TreeView и меню POPUP  [new]
alex11100
Guest
пример не мой

вообще-то
тривью нужно оформить как класс

К сообщению приложен файл (vcx.zip - 10Kb) cкачать
23 мар 07, 11:25    [3932442]     Ответить | Цитировать Сообщить модератору
 Re: TreeView и меню POPUP  [new]
alex11100
Guest
в методе filltree
замените код на такой
LPARAMETERS idd
LOCAL old_rec

SCAN FOR razdel.parentid=idd
  try
  	  THISFORM.oleTree.Nodes.ADD(ALLTRIM(parentid),4,ALLTRIM(id), ALLTRIM(name),2,3)
  catch
  endtry
  old_rec=RECNO()
  try
	  thisform.FillTree(razdel.id)
  catch
  endtry
  GOTO old_rec
ENDSCAN

дурдом конечно, так дерево поднимать нельзя
23 мар 07, 11:35    [3932541]     Ответить | Цитировать Сообщить модератору
 Re: TreeView и меню POPUP  [new]
psv73
Member

Откуда: Донецк
Сообщений: 55
Спасибо! Буду делать выводы... ;-)
23 мар 07, 11:59    [3932753]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить