powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как организовать контекстное меню в TreeView?
30 сообщений из 30, показаны все 2 страниц
Как организовать контекстное меню в TreeView?
    #33228448
Solmyr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет, народ. Вы мне тут периодически помогаете, большое всем спасибо.
Вот на этот раз вопрос: как же все-таки организовать работу контекстного для папочек? Ну то есть там Добавить и вся байда. В какой метод что записать?
И еще отдельный вопрос: как организовать переименование папочки. Есть метод StartLabelEdit, но не пойму как он работает.
...
Рейтинг: 0 / 0
Как организовать контекстное меню в TreeView?
    #33228690
Недоходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для переименования есть api функция

DECLARE INTEGER MoveFile IN kernel32 STRING , STRING
MoveFile ("с:\abc","<c:\cba >")

В первом имя папки которую нужно переименовать, во втором новое имя.
Функция должна возвращать любое положительное число, 0 - это ошибка.
...
Рейтинг: 0 / 0
Как организовать контекстное меню в TreeView?
    #33228691
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://www.foxclub.ru/sol/index.php?act=view&id=188

Решение не без глюков, но как работает контекстное меню там есть.

StartLableEdit - это команда, которая говорит, что следует начать редактировавние текста узла. Т.е. это способ начать редактирование текста узла программно . Имеет смысл, при установке

TreeView.LabelEdit = 0 - Automatic
...
Рейтинг: 0 / 0
Как организовать контекстное меню в TreeView?
    #33228721
Недоходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To ВладимирМ

По поводу MoveFile. Я пытаюсь переименовать, но уменя выходит 0. Что нехватет?
...
Рейтинг: 0 / 0
Как организовать контекстное меню в TreeView?
    #33228766
Недоходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To ВладимирМ
Дополнение.
Этот код был взят с примера где указывалось что его можно использовать и для папок! Обманули?
...
Рейтинг: 0 / 0
Как организовать контекстное меню в TreeView?
    #33228875
Solmyr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да нет, ребята, переименовать не папку на диске, а папку в дереве. Имя книжечки. Как сделать, чтобы это мог сделать пользователь, интерактивно. Он вызывает контекстное меню, выбирает там "Переименовать", и у него имя книжечки становится редактируемым, в нем мигает курсор, а потом он нажимает Enter или еще что, и то, что он написал, запоминается в качестве нового имени в дереве и в таблице каталогов соответственно. Вот чего надо.
...
Рейтинг: 0 / 0
Как организовать контекстное меню в TreeView?
    #33228917
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Я отвечал на вопрос о TreeView. Имеется в виду, ActiveX компонент Microsoft TreeView.

2. По поводу работы с файлами есть очень хороший объект Scripting.FileSystemObject

Для чтения или изменения имени файла следует воспользоваться методом Name. Пример в синтаксисе FoxPro приведен здесь

http://kodu.neti.ee/~juri4/vfpplus/vbs_fso_04_ru.htm#Name
...
Рейтинг: 0 / 0
Как организовать контекстное меню в TreeView?
    #33229222
Solmyr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to ВладимирМ.
Я так понимаю, вы ответили в послднем посте не на мой вопрос? А как же мой? Ответьте, плиз. Как организовать переименование интерактивное.
...
Рейтинг: 0 / 0
Как организовать контекстное меню в TreeView?
    #33229353
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Solmyrto ВладимирМ.
Я так понимаю, вы ответили в послднем посте не на мой вопрос?
В первом посте ответ на Ваш вопрос. Там нет ничего сложного. Посмотрите во вложении примерчик.

Хотя, более управляемым явялется редактирование через отдельную формочку.
...
Рейтинг: 0 / 0
Как организовать контекстное меню в TreeView?
    #33229455
Недоходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to ВладимирМ

Спасибо за сийт. Очень полезная сылка.


-----------------
Рекомендую всем!
...
Рейтинг: 0 / 0
Как организовать контекстное меню в TreeView?
    #33229780
Solmyr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ага. Вот теперь работает. Сенкс.
А с меню прикол. Сделал, как ты говоришь, вроде все работает, но перестала закрываться форма. Нажимаю на крестик, он становится серенький, а форма не закрывается. Т.е. зависает. Если убираю код из метода DblClick, все нормально. Кроме отсутствия меню, ест-но.
Что за бред?
...
Рейтинг: 0 / 0
Как организовать контекстное меню в TreeView?
    #33229813
Solmyr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т.е. в MouseDown, простите.
...
Рейтинг: 0 / 0
Как организовать контекстное меню в TreeView?
    #33229992
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SolmyrАга. Вот теперь работает. Сенкс.
А с меню прикол. Сделал, как ты говоришь, вроде все работает, но перестала закрываться форма. Нажимаю на крестик, он становится серенький, а форма не закрывается. Т.е. зависает. Если убираю код из метода DblClick, все нормально. Кроме отсутствия меню, ест-но.
Что за бред?
Это не бред. Это глюк

Связан с тем, что остались активные объекты Nodes. Точнее, ссылки на эти объекты. Помогает принудительная очистка TreeView перед закрытием формы (ThisForm.MyTree.Clear) или его ручное удаление.

Т.е. в методе Unload-формы нужно написать что-то ворде

Код: plaintext
1.
2.
3.
IF TYPE("ThisForm.MyTree") = "O"
	ThisForm.RemoveObject("MyTree")
ENDIF
...
Рейтинг: 0 / 0
Как организовать контекстное меню в TreeView?
    #33230086
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Глянь тут: http://www.caws.atnet.ru/vfox/vfoxpro1.html
Может что-нибудь пригодится!
С уважением, Алексей.
...
Рейтинг: 0 / 0
Как организовать контекстное меню в TreeView?
    #33233160
Solmyr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to ВладимирМ.
А вот и не работает. Ставлю в Unload:
THISFROM.RemoveObject("CatalogTree"),
а он мне говорит - объект CatalogTree не найден, хотя он у меня так называется. Что опять не так делаю?
to Aleksey-K.
Сенкс за ссылочку.
...
Рейтинг: 0 / 0
Как организовать контекстное меню в TreeView?
    #33233186
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Solmyr
А вот и не работает. Ставлю в Unload:
THISFROM.RemoveObject("CatalogTree"),
а он мне говорит - объект CatalogTree не найден, хотя он у меня так называется. Что опять не так делаю?

Так может у тебя TreeView не на форме лежит, а на PageFrame ?
ВладимирМ только для примера привел THISFROM.RemoveObject(...), а ты должен поставить свой полный путь у объекту CatalogTree, например:
THISFROM.MyFrames.Page3.RemoveObject("CatalogTree") или подобное.
С уважением, Алексей.
...
Рейтинг: 0 / 0
Как организовать контекстное меню в TreeView?
    #33233198
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Solmyr А вот и не работает. Ставлю в Unload:
THISFROM.RemoveObject("CatalogTree"),
а он мне говорит - объект CatalogTree не найден, хотя он у меня так называется. Что опять не так делаю?

Кстати, ВладимирМ не зря привел код с проверкой существования CatalogTree.
По идее, к моменту UnLoad, все объеты форму уже должны быть удалены из памяти самим VFP и даже с TreeView это так и обычно и происходит, но иногда происходит глюк о котором упоминал ВладимирМ. Поэтому, проверку типа IF TYPE("ThisForm.MyTree") = "O" обязательно оставь.
С уважением, Алексей.
...
Рейтинг: 0 / 0
Как организовать контекстное меню в TreeView?
    #33234259
Solmyr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"... Я бы рад, да мой портрет для меня и то - секрет ..." (с)
У меня он лежит прямо на форме. Становлюсь на него в дизайне и вижу внизу: frmCfgMain.CatalogTree .
...
Рейтинг: 0 / 0
Как организовать контекстное меню в TreeView?
    #33235118
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Aleksey-K!

в Unload это бессмысленно - если форма "подвисает" то до него дело не
доходит. Если же закрывается корректно - то его к тому моменту уже и нету...

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Как организовать контекстное меню в TreeView?
    #33235347
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так это не я пример приводил с UnLoad(), а ВладимирМ :)
Я все закрытия программные делаю в Destroy()
С уважением, Алексей.
...
Рейтинг: 0 / 0
Как организовать контекстное меню в TreeView?
    #33235388
Solmyr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ага, ребят, спасибо. Через Destroy действительно работает. У меня и самого была такая мысля, но что-то не попробовал.
А скажите, вот с этим HitTest обязательно заморачиваться или все же есть более человеческие пути?
...
Рейтинг: 0 / 0
Как организовать контекстное меню в TreeView?
    #33235934
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SolmyrА скажите, вот с этим HitTest обязательно заморачиваться или все же есть более человеческие пути?
Так ты же обрабатываешь нажатие клавиши мыши. Как иначе можно узнать на какой именно узел внутри TreeView ты надавил? Ведь никаких событий собственно узла еще не происходит, т.е. нельзя привязаться к событию узла.
...
Рейтинг: 0 / 0
Как организовать контекстное меню в TreeView?
    #33236025
Solmyr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ага, HitTest вставил. Все вроде работает.
Только вот если нажать на один узел правой, а потом на другой тоже правой, не убирая меню от предыдущего нажатия, то фильтрация в гриде справа происходит не всегда, хотя передвижение в таблице каталогов, по которой фильтрация идет, происходит, я отсмотрел. И обновление грида стоит.
Или это правильно?
...
Рейтинг: 0 / 0
Как организовать контекстное меню в TreeView?
    #33236033
Solmyr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, и еще.
Как сделать, чтобы при открытии формы корневой каталог разворачивался на один уровень?
У меня в Init TreeView стоит:
THIS.Expand(THIS.Nodes(1)).
И ни фига он не разворачивается. Наверно опять что-то не так сделал?
...
Рейтинг: 0 / 0
Как организовать контекстное меню в TreeView?
    #33236057
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надо сначала выбрать ноду

this.nodes[1].selected = .t.
this.nodes[1].expanded = .t.
...
Рейтинг: 0 / 0
Как организовать контекстное меню в TreeView?
    #33236351
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SolmyrАга, HitTest вставил. Все вроде работает.
Только вот если нажать на один узел правой, а потом на другой тоже правой, не убирая меню от предыдущего нажатия, то фильтрация в гриде справа происходит не всегда, хотя передвижение в таблице каталогов, по которой фильтрация идет, происходит, я отсмотрел. И обновление грида стоит.
Или это правильно?
Правильно. Дело тут в следующем.

Видимо у тебя, как и положено, обновление Grid происходит в событии NodeClick. Но, как я уже заметил выше, событие MouseDown происходит ДО события NodeClick. Более того, в зависимости от обработки, событие NodeClick может вообще не произойти.

Чтобы это обойти, надо первой командой в MouseDown сделать принудительное присвоение:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
*** ActiveX Control Event ***
LPARAMETERS button, shift, x, y
* Это для особо нетерпеливых. В принципе, будет работать и без него.
* Но в таком случае, чтобы выбрать узел, который Вы собираетесь перенести, необходимо
* будет четко нажать и отпустить левую клавишу мыши
LOCAL loNode
loNode=This.HitTest(x*This.nTwipX, y*This.nTwipY)
IF IsNull(m.loNode)=.F. AND m.loNode.Selected=.F.
	m.loNode.Selected=.T.
ENDIF
* Далее уже собственно вызов меню

Здесь This.nTwipX и This.nTwipY - это мои свойства, которые я ввел в TreeView для перевода пикселей в твипы

Правда, в этом случае возможно срабатываение события NodeClick дважды. Но не думаю, что это будет такая уж большая проблема.
...
Рейтинг: 0 / 0
Как организовать контекстное меню в TreeView?
    #33236391
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SolmyrДа, и еще.
Как сделать, чтобы при открытии формы корневой каталог разворачивался на один уровень?
У меня в Init TreeView стоит:
THIS.Expand(THIS.Nodes(1)).
И ни фига он не разворачивается. Наверно опять что-то не так сделал?
Ты делаешь распространенную ошибку, считая, что узел с индексом 1 - это корневой узел дерева. В общем случае это не всегда так. Т.е. надо определять корневой узел следующим образом

This.Nodes(1).Root

Для раскрытия узла дерева необходимо не вызывать событие, а изменить состояние, которое вызывает это событие. В данном случае - свойство Expanded

This.Nodes(1).Root.Exapnded = .T.

Кроме того, при работе с ActiveX обязательно надо делать глобальную настройку

_VFP.AutoYield = .F.
...
Рейтинг: 0 / 0
Как организовать контекстное меню в TreeView?
    #33236804
Solmyr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо всем. Все заработало.
to ВладимирМ.
Друг мой, эту команду можно включить в Main.prg прямо в таком виде, как вы написали?
...
Рейтинг: 0 / 0
Как организовать контекстное меню в TreeView?
    #33236928
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Solmyrto ВладимирМ.
Друг мой, эту команду можно включить в Main.prg прямо в таком виде, как вы написали?
Имеется в виду

_VFP.AutoYield = .F.

Да. Это глобальная настройка. Не зависит от Private DataSession. Можно назначить один раз при открытии проги.
...
Рейтинг: 0 / 0
Как организовать контекстное меню в TreeView?
    #33237378
Solmyr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще раз спасибо всем. Таки не знаю, что бы я без вас делал ...
...
Рейтинг: 0 / 0
30 сообщений из 30, показаны все 2 страниц
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как организовать контекстное меню в TreeView?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]