powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Интерфейсная бага VFP приводящая к ошибке 0xc0000005
8 сообщений из 8, страница 1 из 1
Интерфейсная бага VFP приводящая к ошибке 0xc0000005
    #33516897
Krey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Коротко об ошибке. Если в проекте используются MDI формы и у какой-то из них установлено свойство MaxButton = .F., то при определенном стечении обстоятельств приложение сваливаеться с ошибкой доступа к памяти (0xc0000005).
У меня в приложении это было так: есть базовый класс формы проекта frmbase от которого наследуються все классы форм проекта. В базовой форме св-во MDIForm = .t.
Есть базовый класс диалога frmdialog, наследующийся от frmbase. В нем MaxButton=.f. MDIForm = .t. (забыл убрать)

Действия пользователя:
Вызов экземпляра диалога.
Вызов из диалога формы с гридом.
Выход из формы.
Закрытие диалога.
Приложение сваливаеться если до вызова диалога существовала какая-либо форма, развернутая на весь экран.

Код демонстрирующий ошибку:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
* Определения классов
DEFINE CLASS MaxMDIFormClass as Form
	MDIForm = .t.	
	WindowState =  2 
ENDDEFINE

DEFINE CLASS ReleaseButtonClass as CommandButton
	Caption = "Close"
	PROCEDURE Click
		thisform.release()
	ENDPROC
ENDDEFINE

DEFINE CLASS CallButtonClass as CommandButton
	Caption = "Show"
	PROCEDURE Click
		LOCAL loForm
		loForm = CREATEOBJECT("FormChildClass")
		loForm.show( 1 )
	ENDPROC
ENDDEFINE

DEFINE CLASS FormChildClass as Form
	MDIForm = .t.	
	ADD Object button1 as ReleaseButtonClass 
ENDDEFINE

DEFINE Class FormParentClass as Form
	MDIForm = .t.	
	MaxButton = .f.
	WindowType =  1 
	ADD Object button as CallButtonClass
	ADD Object button2 as ReleaseButtonClass WITH Top =  20 
ENDDEFINE


* Код
PUBLIC MaxMDIForm as MaxMDIFormClass
MaxMDIForm = CREATEOBJECT("MaxMDIFormClass")
MaxMDIForm.show()

LOCAL FormParent as FormParentClass
FormParent = CREATEOBJECT("FormParentClass")
FormParent.show()

К сожалению эта ошибка трудно воспроизводима в реальном приложении. Что бы ее локализовать мне пришлось очень долго перепахивать весь проект, постепенно убирая из форм все что не приводит к ошибке, до тех пор пока не остались пустые формы со свойствами MDIForm = .t. и MaxButton = .f. :-). Поэтому если вы используете MDI формы и ваше приложение иногда сваливаеться с 0xc0000005 проверьте св-во MaxButton.
...
Рейтинг: 0 / 0
Интерфейсная бага VFP приводящая к ошибке 0xc0000005
    #33516928
Krey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
*проверьте св-во MaxButton
хотел сказать проверьте св-во MDIForm в формах, которые не должны раскрываться на весь экран.
...
Рейтинг: 0 / 0
Интерфейсная бага VFP приводящая к ошибке 0xc0000005
    #33517059
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Баг конешно на лицо, но он не связан непосредственно с тем как фокс очищает память от объектов. Судя по всему какой-то конфликт с системным меню. Поставь SET SYSMENU OFF и баг пропадет.
...
Рейтинг: 0 / 0
Интерфейсная бага VFP приводящая к ошибке 0xc0000005
    #33517120
Krey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я и не говорил что связан. Это другая история.
Если убрать меню баг действительно пропадает, но зачем его убирать?. Пользователь здорово нервничает когда у него окно программы дергаеться. Гораздо правильней убрать MDIForm с окна, которое не должно раскрываться на весь экран, т.к. на это св-во на это окно не должно распространяться.
...
Рейтинг: 0 / 0
Интерфейсная бага VFP приводящая к ошибке 0xc0000005
    #33517729
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Krey!

Да, а собственно перед падением можно заметить "лишнюю" иконку системного
меню - слева от первого пункта главного меню - т.е. судя по всему, фокс
"забывает" убрать эту иконку, т.к. считает что после закрытия
максимизированной MDIForm очередная активизируемая MDI форма (а это по сути
есть "предыдущая форма") тоже будет максимизируемой, но это не так - вот это
самое системное меню потом и вызывает падение.
При этом если закрывать форму не по кнопке (ThisForm.Release()), а через это
самое системное меню, или "крестик", или хоткеем Ctrl+F4 - то проблемы не
будет - тогда это "встраиваемое" системное меню удалится при закрытии формы.
Даже программная эмуляция вида
KEYBOARD '{CTRL+F4}'
и та прячет проблему.
Вообще-то стоит это дело послать в MSFT как багрепорт. В VFP9SP1 проблема
имеет место быть.

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Интерфейсная бага VFP приводящая к ошибке 0xc0000005
    #33518310
Krey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В VFP9 без SP тоже есть, и боюсь что в VFP8SP1 тоже присутствует. Проверять лень.

Баг репорт пошлите сами, у меня начальство-скряги и Fox соответственно пиратский. Незачем светиться лишеий раз.

Насчет того почему этот баг возникает здесь не все ясно. Ясно только то, что это как-то связано с интегрированием меню окна.
После закрытия формы FormChildClass форма MaxMDIFormClass переходит в нормальный режим окна. Соответственно MDI тут не работает. Кроме того мне не понятно почему система валиться только после выгрузки FormParentClass. Т.е. если ее скрыть, но оставить висеть в памяти программа "временно" работает.
...
Рейтинг: 0 / 0
Интерфейсная бага VFP приводящая к ошибке 0xc0000005
    #33518426
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да это один из тех багов которые кочуют в фоксе от версии к версии. Просто мало кому удается их четко выделить. Я для интереса пустил код на VFP6. Фокс отругался на меню, но не упал. Отсюда кстати и сделал вывод.
...
Рейтинг: 0 / 0
Интерфейсная бага VFP приводящая к ошибке 0xc0000005
    #33520652
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Krey!

> В VFP9 без SP тоже есть, и боюсь что в VFP8SP1 тоже присутствует.
> Проверять лень.

В VFP8SP1 точно так-же.

> Баг репорт пошлите сами, у меня начальство-скряги и Fox соответственно
> пиратский. Незачем светиться лишеий раз.

;)

> Насчет того почему этот баг возникает здесь не все ясно. Ясно только то,
> что это как-то связано с интегрированием меню окна.

Угу, с "встраиванием" системного меню (того что Move,Minimize,Close...)
максимизируемого окна - причём только для MDI окон - иначе это меню на своём
месте остаётся - под иконкой окна в его Caption. Видимо не отслеживается та
ситуация, что если фокус уходит на "неразворачиваемое" окно, то и собственно
другие, ранее максимизированные MDI окна уходят в состояние Normal - а при
этом их системное меню "возвращается" под иконку! Т.е. из линейки меню его
надо выкинуть - а это не делается.

> Кроме того мне не понятно почему система валиться только после выгрузки
> FormParentClass

Не только - просто кликни по этому "левому" во всех смыслах :) меню (т.е. по
иконке которая осталась в строке меню).
Также думаю что и некоторые другие манипуляции с меню могут вызвать падение.

Помнится с этой-же иконкой связан и другой глюк - где-то MSFT ошиблось
слегка, и при добавлении этой самой иконки в строку меню, эта самая строка
меню "вырастает" в высоту на 1 пиксель :( Это обычно незаметно, но скажем
открой окно редактирования кода, максимизируй его (это тоже MDI окно), а
потом через Ctrl+F1 попереключайся между ним, и скажем командным окном,
которое не является MDI - хорошо заметно "прыгание" системного тулбара. С
пользовательскими MDI и не-MDI окнами ситуация аналогична.

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


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