powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Объект.Valid() формы FormSet-а + форма-мессага = вечный Valid()
8 сообщений из 33, страница 2 из 2
Объект.Valid() формы FormSet-а + форма-мессага = вечный Valid()
    #36412159
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вообще вопрос был поставлен про увод фокуса из контрола с помощью мышки при получении сообщения и разница при использовании клавы в этом же случае. Ну и в чем причина такого поведения.
...
Рейтинг: 0 / 0
Объект.Valid() формы FormSet-а + форма-мессага = вечный Valid()
    #36412192
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CTAC-KO,

я тоже возмущаться начну сейчас,
так как считаю все сотворенное бредом,
воткни тотже код в метод лостфокус тогда и радуйся
...
Рейтинг: 0 / 0
Объект.Valid() формы FormSet-а + форма-мессага = вечный Valid()
    #36412390
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во-первых, когда делаешь тестовый пример, надо делать ЧИСТУЮ форму. Без всевозможных "наворотов". Вот зачем мне разбираться в куче параметров, если ты используешь только один из них?

Во-вторых, если бы ты сделал в качестве класс MessageWindow просто форму с единственной кнопкой "Выход" без какого-либо кода (ЧИСТУЮ форму), то увидел бы, что проблемы не возникает.

Из этого, мог бы сделать вывод, что проблема в каких-то действиях непосредственно в твоем классе формы MessageWindow.

Далее, добавляя код из оригинальной формы мог бы найти, что проблема возникает если дается команда

this.btnOK.SetFocus()

Т.е. факт ЯВНОГО увода фокуса на другой объект и пораждает подобный эффект. Что, собственно, и следовало ожидать, ведь на момент подачи этой команды форма еще не видна (в init-формы - это запрещенная команда!). Значит, подобную команду давать не надо.

"Рулить" тем, какой объект получит фокус следует через указание значения свойства TabIndex. Или разнести кнопки по страницам PageFrame без закладок и просто активизировать нужную страницу.

====================================================

Вообще-же, выдача сообщений в событии Valid() объектов - это создание СЕБЕ больших проблем. Не должно быть здесь НИКАКИХ сообщений. Все сообщения выводятся при попытке сохранить сделанные изменения. Но никак не в процессе внесения этих изменений.
...
Рейтинг: 0 / 0
Объект.Valid() формы FormSet-а + форма-мессага = вечный Valid()
    #36412491
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
прошелмимоCTAC-KO,
я тоже возмущаться начну сейчас,
да я не возмущался, просто вопрос был не в том, и по поводу Valid-а я уже отписывал.
прошелмимовоткни тотже код в метод лостфокус тогда и радуйся об этом тоже уже думал и писал, хотя не пробовал
прошелмимотак как считаю все сотворенное бредом,Действительно все так плохо? Или все из-за того что выбран метод Valid?

2Владимир
Спасибо!
Да, виноват, подумал на формсет, а оказалось все как обычно - hands.dll...
Так а как же мне выставить кнопку выбранной по-умолчанию, т.е. чтобы форма появилась с фокусом на ней? Надо тогда ей выставить как-то TabIndex=1... Ладно буду разбираться.

Что до проверки в методе валида а не перед записью - так удобнее, т.к. форма пошаговая, т.е. есть несколько страниц с данными и если просто в конце вывести предупреждение юзер потом долго думает а где это, ищет и все такое. А так его сразу предупреждают на текущей странице на текущем контроле.
...
Рейтинг: 0 / 0
Объект.Valid() формы FormSet-а + форма-мессага = вечный Valid()
    #36412497
CTAC-KOТак а как же мне выставить кнопку выбранной по-умолчанию, т.е. чтобы форма появилась с фокусом на ней? Надо тогда ей выставить как-то TabIndex=1...У кнопок есть свойство Default.
...
Рейтинг: 0 / 0
Объект.Valid() формы FormSet-а + форма-мессага = вечный Valid()
    #36412662
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторДействительно все так плохо? Или все из-за того что выбран метод Valid?

вместо подъема форм
можно подумать в сторону подсветки невалидных значений
+ вывода информационных сообщений в постоянное окно - лог

вариант метода Valid контрола, статусбар фокса для сообщатора - это как самый простой вариант,
всемто него может существовать особое окно для логирования действий аля 1-це(к примеру) и т.д.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
With thisform
	if !empty(.dateTo.value) and this.value>.dateTo.value
		_vfp.StatusBar = "Ошибка ввода диапазона дат."
		Store .f. to this.lValid ;
				   , .dateTo.lValid
	Else
		_vfp.StatusBar = ""
		Store .t. to this.lValid ;
				   , .dateTo.lValid
	EndIf
EndWith


в моей библиотеке у контролов есть св-во lValid
у свойства есть ассайн метод,
который анализирует св-во lAlertcolor (возможность/нужность подсветки невалидности)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
lparameters tlNewVal
with this
	.lvalid = tlNewVal
	if tlNewVal
		if .lAlertcolor or vartype(.OldValue)<>vartype(.Value) or .OldValue<>.Value
			* если даже держим  this.lAlertcolor
			* предв-но сбросили  this.lAlertcolor в .f.
			* но знач-е изменилось и оно валидное, то 
			* передергиваем цвет тексту и фону
			.ResetAlertColor()
		endif
	else
		if .lAlertcolor  
			* невалидное значение подсвечиваем 
			* если выставлен this.lAlertcolor в .f.,
			* то подсветки не будет
			.SetAlertColor()
		endif 
	endif
endwith
return .t.

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


если интересно отказаться от вывода
пользователю взлетающих и надоедающих окон
+ разбор полетов в виде различных псевдо вопросов
про глюки от фокса, то поболтаем на эту тему
...
Рейтинг: 0 / 0
Объект.Valid() формы FormSet-а + форма-мессага = вечный Valid()
    #36412719
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторВсе сообщения выводятся при попытке сохранить сделанные изменения. Но никак не в процессе внесения этих изменений.

согласен

но иногда встречаются ТЗ, утвержденные ...,
в которых тупо ставится задача орать и светить во время
каждого телодвижения оператора до момента попытки сохранения всего документа,
и ничего с этим не поделать (как пример - ввод ПД в различных системах КБ).

и это благо, что в фокспро есть событийность на каждый чих.
...
Рейтинг: 0 / 0
Объект.Valid() формы FormSet-а + форма-мессага = вечный Valid()
    #36413186
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот полностью по изложенному выше плану я и собираюсь действовать! И окошко лога типа 1цэ (не так давно как раз поднимал на форуме тему работы вфп с окнами и понял что придеццо ваять класс-форму) и подсветка контролов с инвалидной инфой, и подобное lValid св-во у меня тоже давно есть, я его назвал Validated. И подсветку тоже давно сделал именно для того чтобы юзеру было сразу видать че он криво понабрал (заливаю фон контрола желтым). Кроме того как раз заделал подсветку полей, в которых наличие инфы - обязательно. Уж не знаю как кто, но я решил обводить их красным прямоугольником.
Сообщения типа этих мне надо для случаев, к примеру, если тело вводит дату, которая является выходным днем, например, что недопустимо, или там год нетекущий. Выходит что инфа-то есть, но кривая и об этом я специально так предупреждаю, иначе юзер тупо не увидит и не отреагирует, а если и в этом случае не отреагирует - то потом будет искать постранично ту дату.
В любом случае интересно конечно же пообщаться по поводу.

Ты из этих логов (1цэ) инфу сохраняешь? Если да:
локально или в бд?
историю подтягиваешь?
еще какие-то делал по ним фичи - типа очистки там, поиска и тп?
...
Рейтинг: 0 / 0
8 сообщений из 33, страница 2 из 2
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Объект.Valid() формы FormSet-а + форма-мессага = вечный Valid()
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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