:: Архив конференции по VFP до 2005 года
Re: Не активизируется TreeView при показе скрытой формы
matod

Сообщений: 3062
Откуда: Иркутск
Дата регистрации: 31.10.2001
2Roman2 вариант, конечно, но по ряду причин уже не подойдет. Да и как-то не нравится мне - контейнер можно разместить только внутри формы, а если форма маленькая, то его вообще негде разместить, а менять кучу форм ради этого - сильно сложно. Так-то TreeView давно успешно в программе работает, но вот такой фокус первый раз пробую.

Ну, вот кому интересно. Запускаем код, кликаем на первой форме, появляется вторая, кликаем на ней - выбираем из диалога Microsoft TreeViewпоявляется форма с TreeView (правда не заню, как задать параметр, чтобы диалог выбора ActivX не появлялся).
Закрываем кнопкой внизу, закрываем форму Т2, снова открываем Т2, открываем Т3 - дерево недоступно.
Я проверял на VFP6.0 SP5.

public fTree
local oo
oo= createobject('t1')
oo.Show(0)
read events
release ftree
define class t1 as form
procedure Click
local o
o = createobject('t2')
o.Show(1)
endproc
procedure destroy
clear events
endproc
enddefine
define class t2 as form
* AutoCenter = .t.
procedure Init
endproc
procedure Click
if vartype( fTree )!='O' or Isnull(fTree)
fTree = createobject('T3')
fTree.Show(1)
else
fTree.Show(1)
endif
endproc
enddefine
define class t3 as form
KeyPreview=.t.
procedure init
this.Addobject( 'tree1', 'olecontrol', "mscomctl.Microsoft TreeView Control 6.0 (SP4)" )
this.Addobject( 'b1', 'cmd' )
this.b1.width = 40
this.b1.height = 20
this.b1.top = this.height - 10
this.b1.left = 0
this.b1.visible = .t.
this.tree1.top = 0
this.tree1.left = 0
this.tree1.width=this.width
this.tree1.height = this.height - 10
this.tree1.visible = .t.
with this.tree1.nodes
.add( , 1, '_0', 'root', 0 )
.add( '_0', 4, '_1', 'Node1', 0 )
.add( '_0', 4, '_2', 'Node2', 0 )
.add( '_0', 4, '_3', 'Node3', 0 )
endwith
this.tree1.nodes('_0').expanded = .t.
endproc
enddefine
define class cmd as CommandButton
procedure click
thisform.hide
endproc
enddefine
Ratings: 0 negative/0 positive
Re: Не активизируется TreeView при показе скрытой формы
po2

Сообщений: 2864
Откуда: Иркутск
Дата регистрации: 22.12.2001
Похожая проблема обсуждалась по ссылке:forum.foxclub.ru. Возможно найдется шаманский метод реанимации, например отсылка окну TreeView какого-либо специфического сообщения, меняющего его стиль.
Ratings: 0 negative/0 positive
Re: Не активизируется TreeView при показе скрытой формы
matod

Сообщений: 3062
Откуда: Иркутск
Дата регистрации: 31.10.2001
2 Po2 как я уже говорил, дело не в нарушении модальности-немодальности, я везде за этим проследил и даже варианты попробовал. А шаманить-то оно конечно приятно - танцы, бубны , попробую, хотя и сильно не люблю этого - непонятно работающий код IMHO потенциальный источник самых мерзких ошибок.
Спасибо всем, видимо это все же глюк, а не мои ручки шаловливые. Буду наверное смотреть в сторону открытия удаления формы каждый раз с загрузкой дерева по частям.
Ratings: 0 negative/0 positive
Re: Не активизируется TreeView при показе скрытой формы
Rustam
Автор

Сообщений: 235
Откуда: Иркутск
Дата регистрации: 14.10.2000
Привет Андрей.
Особо не было времени на эксперименты.
Вот как изменил твой код и все работает как надо

public fTree ,o
local oo
oo= createobject('t1')
oo.Show(0)
read events
release ftree
define class t1 as form
procedure Click
* LOCAL o
o = createobject('t2')
o.visible = .T.
* o.Show(1)
endproc
procedure destroy
clear events
endproc
enddefine
define class t2 as form
* AutoCenter = .t.
windowtype=1
procedure Init
endproc
procedure Click
if vartype( fTree )!='O' or Isnull(fTree)
fTree = createobject('T3')
fTree.Show(1)
ELSE
fTree.Show(1)
endif
ENDPROC
enddefine
define class t3 as form
KeyPreview=.t.
windowtype=1
procedure init
this.Addobject( 'tree1', 'olecontrol', "mscomctl.Microsoft TreeView Control 6.0 (SP4)" )
this.Addobject( 'b1', 'cmd' )
this.b1.width = 40
this.b1.height = 20
this.b1.top = this.height - 10
this.b1.left = 0
this.b1.visible = .t.
this.tree1.top = 0
this.tree1.left = 0
this.tree1.width=this.width
this.tree1.height = this.height - 10
this.tree1.visible = .t.
with this.tree1.nodes
.add( , 1, '_0', 'root', 0 )
.add( '_0', 4, '_1', 'Node1', 0 )
.add( '_0', 4, '_2', 'Node2', 0 )
.add( '_0', 4, '_3', 'Node3', 0 )
endwith
this.tree1.nodes('_0').expanded = .t.
endproc
enddefine
define class cmd as CommandButton
procedure click
thisform.hide
endproc
enddefine
Только не знаю поможет это тебе или нет
Ratings: 0 negative/0 positive
Победил!
matod

Сообщений: 3062
Откуда: Иркутск
Дата регистрации: 31.10.2001
2Rustam - твои изменения не помогли, у меня вторая форма без Show, только по visible=.t. вообще не отображается - только мелькает на экране.

Тем не менее, получив вдохновение от обсуждения и указанной po2 ссылки, хорошо отдохнув, достал бубен и...
Короче, помогло скрытие treeView в методе hide формы 3 и восстановление visible=.t. с последующим refresh дерева в activate.
Вот работающий код. Аналогичные изменения внес в приложение и все заработало. Ключевые моменты выделены жирным.
public fTree
local oo
oo= createobject('t1')
oo.Show(0)
read events
release ftree
define class t1 as form
procedure Click
local o
o = createobject('t2')
o.Show()
endproc
procedure destroy
clear events
endproc
enddefine
define class t2 as form
WindowType=1
procedure Init
endproc
procedure Click
if vartype( fTree )!='O' or Isnull(fTree)
fTree = createobject('T3')
fTree.Show(1)
else
fTree.Show(1)
endif
endproc
enddefine
define class t3 as form
KeyPreview=.t.
WindowType=1
procedure init
this.Addobject( 'tree1', 'olecontrol', "mscomctl.Microsoft TreeView Control 6.0 (SP4)" )
this.Addobject( 'b1', 'cmd' )
this.b1.width = 40
this.b1.height = 20
this.b1.top = this.height - 10
this.b1.left = 0
this.b1.visible = .t.
this.tree1.top = 0
this.tree1.left = 0
this.tree1.width=this.width
this.tree1.height = this.height - 10
this.tree1.visible = .t.
with this.tree1.nodes
.add( , 1, '_0', 'root', 0 )
.add( '_0', 4, '_1', 'Node1', 0 )
.add( '_0', 4, '_2', 'Node2', 0 )
.add( '_0', 4, '_3', 'Node3', 0 )
endwith
this.tree1.nodes('_0').expanded = .t.
endproc
procedure hide
this.tree1.visible=.f.
endproc
procedure Activate
this.tree1.visible=.t.
this.tree1.refresh
endproc
procedure QueryUnload
nodefault
this.hide
endproc
enddefine
define class cmd as CommandButton
procedure click
thisform.hide
endproc
enddefine
Ratings: 0 negative/0 positive
Re: Победил!
Rustam
Автор

Сообщений: 235
Откуда: Иркутск
Дата регистрации: 14.10.2000
Поздравляю!
У меня vfp7, возможно поэтому.
Ratings: 0 negative/0 positive


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

On-line: 6 (Гостей: 6)

© 2000-2024 Fox Club 
Яндекс.Метрика