powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Выход из toolbar
17 сообщений из 17, страница 1 из 1
Выход из toolbar
    #33532114
Krushinskaya Olga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как закрыть форму, при нажатии определенной кнопки в тулбаре.
я записала код:

rr32=AINSTANCE(a_formname, "Form")
FOR m_cikl= 1 to rr32
m_form = a_formname(m_cikl)+".release"
&m_form
ENDFOR

он срабатывает во время отладки программы, ф окне фокспра.
а в exeшнике при нажатии на кнопку закрытие, ничего не происходит форма продолжает висеть

С уважением, Ольга.
...
Рейтинг: 0 / 0
Выход из toolbar
    #33532424
Фотография Hel!Riser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пробуй закрывать через колекцию _SCREEN.Forms().
...
Рейтинг: 0 / 0
Выход из toolbar
    #33532675
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема в том, ЧТО ИМЕННО возвращает функция AINSTANCE(). А возвращает она, в данном случае, список переменных, содержащих ссылки на формы. Заметь, реально существующих переменных .

Но вся проблема в том, что команда DO FORM, по умолчанию, создает переменную, содержащую ссылку на форму с областью видимости PRIVATE. Т.е. такая переменная будет автоматически уничтожена по завершении той процедуры или метода, в котором была дана команда DO FORM.

В результате, форма есть, но переменных, которые содержали бы ссылку на эту форму - нет. Как следствие, AINSTANCE() ничего не возвращает. Нет никаких косвенных ссылок. Соответственно, цикл не работает. Количество элементов массива равно 0.

Простой пример

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
do doForm
PUBLIC  gaMyArray( 1 )
? AINSTANCE(gaMyArray, 'Form')
DISPLAY MEMORY LIKE gaMyArray

procedure doForm
do form MyForm.scx
return

Здесь в качестве MyForm.scx укажи любую свою форму. В данном случае НЕ модальную. Запусти этот код и увидишь замечательный эффект: форма отображается, но AINSTANCE() возвращает 0 и массив gaMyArray ничем не заполнен.

Следовательно, как справедливо заметил Hel!Riser , AINSTANCE() для получения ссылок на все открытые формы просто не годится. Он не для этого предназначен.

Следует использовать коллекцию _SCREEN.Forms() или _VFP.Forms(). Хотя, в общем случае, закрытие всех открытых форм это не такая тривиальная задача как кажется.

Для справки имей в виду, что в коллекции _SCREEN.Forms() та форма, которая лежит сверху имеет индекс 1 и при закрытии этой формы список форм в _SCREEN.Forms() сдвинется. Т.е. простейший код будет примерно такой:

Код: plaintext
1.
2.
3.
4.
5.
6.
LOCAL lnFormCount, lnI
lnFormCount = _SCREEN.FormCount
FOR lnI =  1  TO m.lnFormCount
	_SCREEN.Forms( 1 ).Hide()
	_SCREEN.Forms( 1 ).Release()
ENDFOR

Это не опечатка. Всегда удаляется элемент с индексом 1, а не переменная m.lnI.

Однако повторюсь, такой код сработает только в простейшей схеме организации вызова форм. Есть масса вариантов, когда такая схема работать не будет.
...
Рейтинг: 0 / 0
Выход из toolbar
    #33532937
Krushinskaya Olga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
rr32=AINSTANCE(a_formname, "Form")
FOR m_cikl=  1  to rr32
   m_form = a_formname(m_cikl)+".release"
   &m_form
ENDFOR
Да в том то и дело, что в моем коде ainstance возвращает 1, а переменная m_form содержит "tu.release" и форма моя под названием tu закрывается. Но в EXEшнике ничего не происходит

Я хотела закрывать через коллекцию, как вы написали, но в данном случае у меня закрывается toolbar, а форма как висела, так и висит
...
Рейтинг: 0 / 0
Выход из toolbar
    #33533212
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а зачем так накрутили, то
зачем массивы

Код: plaintext
1.
2.
3.
4.
5.
local loForm
loForm = _screen.ActiveForm
if vartype(loForm)=="O"
   loForm.release()
endif

есть хороший метод - вешать
...
Рейтинг: 0 / 0
Выход из toolbar
    #33534045
Krushinskaya Olga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alex11100а зачем так накрутили, то
зачем массивы

Код: plaintext
1.
2.
3.
4.
5.
local loForm
loForm = _screen.ActiveForm
if vartype(loForm)=="O"
   loForm.release()
endif

есть хороший метод - вешать

да, хорошо срабатывает, только после release данные не сохраняются. а если делать на форме кнопку с thisform.release все вводимые данные сохраняются в таблице
...
Рейтинг: 0 / 0
Выход из toolbar
    #33534092
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вообще то
на форме должна быть кнопка <<ОК>>
или я их еще обзываю <<Ладно>>

вот когда на них давим - то и все ок
а если релиз, то это уж релиз полный

определитесь с тем, что вы желаете добится
можно у вормы завести метод SaveDataWithRelease
и его уже звать
...
Рейтинг: 0 / 0
Выход из toolbar
    #33534343
Krushinskaya Olga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alex11100вообще то
на форме должна быть кнопка <<ОК>>
или я их еще обзываю <<Ладно>>

вот когда на них давим - то и все ок
а если релиз, то это уж релиз полный

определитесь с тем, что вы желаете добится
можно у вормы завести метод SaveDataWithRelease
и его уже звать

что то я вообще запуталась с этим тулбаром.
вариант1
Без него, все понятно. Есть форма, кликаю кнопку на форме , вызывается другая форма, реактируются данные, если сохранять надо, жми кнопку сохранить, иначе отмена.
вариант2
С тулбаром все не так работает. Загружается главная форма, и если в тулбаре жму кнопку открыть форму для редактирования тот же самый код, что и в первом варианте т.е. (do form ******) то форма загружается, но такое ощущение что событие init не срабатывает. Может есть какие-то особенности в работе с toolbarом подскажите пожалуйста
...
Рейтинг: 0 / 0
Выход из toolbar
    #33534527
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
все плохо


Вы желаете сделать универсальный тулбар для всех форм
чтобы он перерисовывался и знал с какой формой работать????
...
Рейтинг: 0 / 0
Выход из toolbar
    #33534772
Krushinskaya Olga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alex11100все плохо


Вы желаете сделать универсальный тулбар для всех форм
чтобы он перерисовывался и знал с какой формой работать????
да нет, хочу пока для каждой формы свой сделать тулбар. Но через тулбар данные обновляются как то странно
...
Рейтинг: 0 / 0
Выход из toolbar
    #33534822
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
на взлете тулбара
нужно ему передать
в инит параметром саму форму
и случится чудо

в форме в ините пишите create("tb","library",this)


в ините класса-тулбара
lpara toForm
this.oForm=toForm


и все дальше во всех конпках тулбара пишите
this.parent.oForm.release
...
Рейтинг: 0 / 0
Выход из toolbar
    #33535990
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Krushinskaya Olgaда нет, хочу пока для каждой формы свой сделать тулбар. Но через тулбар данные обновляются как то странно
В таком случае я не советую вообще связываться с классом toolbar!
Добавьте кнопки прямо на форму. Дело в том, что при выборе кнопки из ToolBar у вас на форме будет возникать событие Deactivate, а при возврате обратно - Activate. На самом объекте формы при выборе кнопки ToolBar событие LostFocus и Valid не возникает. Это не всегда удобно. Я создал свой класс универсльного Toolbar (на основе класса Container) и, в случае необходимости, помещаю его на форму (или класс формы).
...
Рейтинг: 0 / 0
Выход из toolbar
    #33536258
valeryka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Aleksey-K


В таком случае я не советую вообще связываться с классом toolbar!
Добавьте кнопки прямо на форму. Дело в том, что при выборе кнопки из ToolBar у вас на форме будет возникать событие Deactivate, а при возврате обратно - Activate. На самом объекте формы при выборе кнопки ToolBar событие LostFocus и Valid не возникает. Это не всегда удобно. Я создал свой класс универсльного Toolbar (на основе класса Container) и, в случае необходимости, помещаю его на форму (или класс формы).


Верное решение
...
Рейтинг: 0 / 0
Выход из toolbar
    #33536293
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
неверным идете путем, товарищи!
посмотрите на интерфейс любого софта
вы где-нить видели обилие тулбаров???
не есть хорошо, однако.

и ече я буду в каждую форму чего-то пихать
не. лучше один, но ууууумммммнннныыыыыыыййййййййй объект
а комп, он железный и умный - пусть и сам разруливает
...
Рейтинг: 0 / 0
Выход из toolbar
    #33539244
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Aleksey!

> Добавьте кнопки прямо на форму.

Это конечно простое решение, но если интерфейс реально многооконный (т.е.
ВИДИМЫ сразу много окон), то не совсем красивое - представь сколько на
экране будет кнопок :) Пример - в Word есть пунктик в меню "сравнить рядом
с..." И при его выборе мы видим 2 окна документа, но лишь один набор
тулбаров.

> Дело в том, что при выборе кнопки из ToolBar у вас на форме будет
> возникать событие Deactivate, а при возврате обратно - Activate. На самом
> объекте формы при выборе кнопки ToolBar событие LostFocus и Valid не
> возникает.

В смысле наоборот - НЕ будет возникать ни Deactivate ни LostFocus при работе
с тулбаром (т.к. он не перехватывает фокус у формы), а при работе с кнопками
на форме LostFocus срабатывать будет (и данные из контрола реально запишутся
в соотвествующий источник данных). Впрочем это легко обходится - пара
методов для ручного "увода" фокуса с реального контрола на некоторый
"фиктивый", и обратно - и конечно логика работы "кнопок тулбара" не в самих
этих кнопках описана, а в методах формы (или особого класса-посредника), а
тулбар лишь дёргает эти методы.

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Выход из toolbar
    #33539290
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Igor Korolyov
Это конечно простое решение, но если интерфейс реально многооконный (т.е.
ВИДИМЫ сразу много окон), то не совсем красивое - представь сколько на
экране будет кнопок :) Пример - в Word есть пунктик в меню "сравнить рядом
с..." И при его выборе мы видим 2 окна документа, но лишь один набор
тулбаров.

Да, когда то я тоже так делал, но... это хорошо если вы говорите про общий, одни ToolBar, а если для форм нужны свои, уникальные действия (читай кнопки)?
Тогда при мнокооконном интерфейсе на экране возникает много ToolBar, которые загромождают экран, а если их прятать и показывать при получении (потери) "родной" формой фокуса, то иногда происходит сдвижка форм, из-за того, что не все ToolBar помещаются в Doock ( как правило, это верх экрана). Причем, даже если есть место для ToolBar в первой строке, VFP упорно старался вставить его в то место, где оно появлялось (2, 3, .. строки), когда места в 1 - строке не было. Короче, года три назад я отказался от этой красивой идеи с объектами ToolBar. Может быть в VFP 9.0 теперь с позицией ToolBar все нормально, но судя по тому, как сам VFP обращается со своими ToolBar, то вряд ли.

Igor Korolyov
В смысле наоборот - НЕ будет возникать ни Deactivate ни LostFocus при работе
с тулбаром (т.к. он не перехватывает фокус у формы), а при работе с кнопками
на форме LostFocus срабатывать будет (и данные из контрола реально запишутся
в соотвествующий источник данных).

Ничего срабатывать не будет на форме: не Activate, не Deactivate (тут я описался) и не LostFocus и Valid (а тут Вы описались, похоже) на объектах формы при нажатии кнопки на ToolBar! А вот при нажатии кнопки на форме Activate и Deactivate, разумеется, возникать не будут (если только это таже форма :) ), а Valid (и далее LostFocus) - будут.
С уважением, Алексей.
...
Рейтинг: 0 / 0
Выход из toolbar
    #33547855
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Aleksey!

> Да, когда то я тоже так делал, но... это хорошо если вы говорите про
> общий, одни ToolBar, а если для форм нужны свои, уникальные действия
> (читай кнопки)?

Ну ясное дело что речь идёт про нечто универсальное - иначе сама идея
тулбара теряется - если это по сути просто кусок формы (т.к. связан ТОЛЬКО с
этой формой и ни с чем более), то зачем его отрывать и выносить куда то ещё
:)

> Тогда при мнокооконном интерфейсе на экране возникает много ToolBar,
> которые загромождают экран, а если их прятать и показывать при получении
> (потери) "родной" формой фокуса, то иногда происходит сдвижка форм, из-за
> того, что не все ToolBar помещаются в Doock

Да такая проблема есть, но в целом она решается если указывать 2 и 3
параметры метода Dock (сами значения этих координат определять это кстати
тоже отдельный и не простой вопрос - тут логика у фокса весьма "странная").

>> В смысле наоборот - НЕ будет возникать ни Deactivate ни LostFocus при
>> работе
>> с тулбаром (т.к. он не перехватывает фокус у формы), а при работе с
>> кнопками
>> на форме LostFocus срабатывать будет (и данные из контрола реально
>> запишутся
>> в соотвествующий источник данных).

> Ничего срабатывать не будет на форме: не Activate, не Deactivate (тут я
> описался) и не LostFocus и Valid (а тут Вы описались, похоже)

Нет, я имел в виду что при размещении кнопок на форме они (LostFocus и Valid
для "предыдущего" контрола) будут работать. Так что тут полный консенсус
(если перечитать внимательно предложение и "разделить" его в том месте где
запятая стоит :) )

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Выход из toolbar
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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