Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Формат даты / 24 сообщений из 24, страница 1 из 1
15.04.2008, 08:53
    #35254954
Вика2008
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формат даты
Добрый день, при набивке в поле с форматом даты, если она введена неправильно- выходит сообщение, как заменить его своим?
...
Рейтинг: 0 / 0
15.04.2008, 09:10
    #35254980
Urri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формат даты
Раньше (в FP 2.x) сообщение свое ставилось по ON READERROR.
...
Рейтинг: 0 / 0
15.04.2008, 09:22
    #35255002
Hel!Riser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формат даты
...
Рейтинг: 0 / 0
15.04.2008, 09:24
    #35255007
Hel!Riser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формат даты
дрянь какая-то ) ВОт сцылка
http://forum.foxclub.ru/read.php?32,177185,181614#msg-181614
...
Рейтинг: 0 / 0
15.04.2008, 10:15
    #35255151
Вика2008
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формат даты
прописала как там сказано
Код: plaintext
1.
2.
IF EMPTY(This.Value) = .T. AND This.Text <> TRANSFORM({},"@"+This.Format) 
MessageBox("Ошибка!") 
ENDIF
сообщение на выходит, просто если ошибка поле обнуляется, явно надо что-то добавить, но не пойму
...
Рейтинг: 0 / 0
15.04.2008, 12:07
    #35255625
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формат даты
Где прописала-то? В каком событии? Что записано в свойстве Format для этого TextBox?
...
Рейтинг: 0 / 0
15.04.2008, 12:19
    #35255689
Вика2008
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формат даты
прописала в валиде, формат- D, свойство strict data entry=0 loose

нашла в хелпе ошибку связанную с датой, попробовала сделать:
Код: plaintext
1.
2.
IF nerror= 2034 
Mes="Ошибка!"
endif

все равно не считывает
...
Рейтинг: 0 / 0
15.04.2008, 13:59
    #35256143
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формат даты
Ищите "10 отличий" со своим кодом

Код: 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.
Local loForm
loForm = CreateObject("form_date")
loForm.show( 1 )

DEFINE CLASS form_date AS form

	DoCreate = .T.
	Caption = "Form1"
	Name = "Form1"

	ADD OBJECT text1 AS textbox WITH ;
		StrictDateEntry =  0 , ;
		Alignment =  3 , ;
		Value = (date()), ;
		Height =  23 , ;
		Left =  108 , ;
		Top =  84 , ;
		Width =  100 , ;
		Name = "Text1"


	PROCEDURE text1.Valid
		IF EMPTY(This.Value) = .T. AND This.Text <> TRANSFORM({},"@"+This.Format)  
			MessageBox("Дата введена некорректно!")  
		ENDIF
	ENDPROC


ENDDEFINE
...
Рейтинг: 0 / 0
15.04.2008, 14:18
    #35256235
XAndy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формат даты
Вика2008
Если у вас используется Textbox.ControlSource, то проверять Text в Valid будет не достаточно, т.к. свойство Text в событи Valid будет уже пустым! Обойти это можно введением в класс текстбокса дополнительного свойства LastText, которое должно вестись в InteractiveChange, а в Valid анализировать уже не Text, а LastText.

Код: plaintext
1.
* InteractiveChange()
this.LastText = this.Text

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
* Valid()
#define DIGITS       "0123456789"
with this
if .Format=='D' and empty(.Value) and !empty(chrtran(.LastText,chrtran(.LastText,DIGITS,""),""))
   msgbox("Некорректная дата!",  0 , .Top, .Left)
   .LastText = ""
   return .f.
endif
endwith
...
Рейтинг: 0 / 0
15.04.2008, 14:45
    #35256338
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формат даты
Если TextBox привязан к источнику данных, то можно установить буферизацию и факт изменения отслеживать через

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
LOCAL lcFieldName, lnState
lcFieldName = JustExt(this.ControlSource)
lnState = GetFldState(m.lcFieldName)

IF EMPTY(This.Value) AND m.lnState IN ( 2 , 4 )
	* Данное поле пытались изменить, но значение осталось пустым

	* Сбрасываю признак изменения поля
	=SetFldState(m.lcFieldName, m.lnState- 1 )
ENDIF

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

Хранение вводимого по InteractiveChange() значения можно организовать в свойстве TAG. Правда, свойство TAG принимает только и исключительно символьные значения. Поэтому необходимо организовать конвертацию

This.Tag = TransForm(This.Text)
...
Рейтинг: 0 / 0
15.04.2008, 14:48
    #35256348
Вика2008
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формат даты
XAndy
выдает invalid input на пустую или ошиб дату

ВладимирМ
отличий не нашла, формат даты у меня через . пробовала {..} и с пробелами, все равно не получается
...
Рейтинг: 0 / 0
15.04.2008, 14:55
    #35256369
Вика2008
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формат даты
вообще получается что не могу считать вторую часть
Код: plaintext
This.Text <> TRANSFORM({..},"@"+This.Format)

если оставляю только
Код: plaintext
EMPTY(This.Value) = .T.
то работавет, но на пустую дату тоже выдает сообщение
...
Рейтинг: 0 / 0
15.04.2008, 14:56
    #35256376
PaulWist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формат даты
Поместите сюда код который у Вас не работает.
...
Рейтинг: 0 / 0
15.04.2008, 15:05
    #35256414
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формат даты
Вариант для привязки TextBox к полю таблицы с учетом замечаний XAndy

Код: 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.
45.
46.
47.
48.
49.
50.
Local loForm
loForm = CreateObject("form_date")
loForm.show( 1 )

DEFINE CLASS form_date AS form

	DoCreate = .T.
	Caption = "Form1"
	Name = "Form1"

	ADD OBJECT text1 AS textbox WITH ;
		StrictDateEntry =  0 , ;
		Alignment =  3 , ;
		Height =  23 , ;
		Left =  108 , ;
		Top =  84 , ;
		Width =  100 , ;
		Name = "Text1"


	PROCEDURE Load
		Create Cursor test (f1 D)
		Append blank
		replace f1 with Date()
	ENDPROC


	PROCEDURE Init
		ThisForm.text1.ControlSource="test.f1"
	ENDPROC


	PROCEDURE text1.Valid
		#define DIGITS "0123456789"

		IF EMPTY(This.Value) = .T. AND Empty(Chrtran(this.Tag, Chrtran(This.Tag,DIGITS,""), "")) = .F.
			MessageBox("Дата введена некорректно!")  
		EndIf

		* Сброс сохраненного значения
		this.Tag = ""
	ENDPROC


	PROCEDURE text1.InteractiveChange
		This.Tag = TransForm(This.Text)
	ENDPROC


ENDDEFINE
...
Рейтинг: 0 / 0
15.04.2008, 15:07
    #35256428
Вика2008
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формат даты
valid
Код: plaintext
1.
2.
IF EMPTY(This.Value) = .T. AND This.Text <> TRANSFORM({..},"@"+This.Format)  
         MessageBox("Дата введена некорректно!")  
    ENDIF 

может как то связано с {..}?
...
Рейтинг: 0 / 0
15.04.2008, 15:13
    #35256450
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формат даты
Что у Вас написано в TextBox.ControlSource?

Если там что-то есть, то проверка на This.Text не имеет смысла, поскольку к моменту выполнения TextBox.Valid() он уже пустой. Т.е. всегда равен {..} и естесственно, в IF не попадаем.
...
Рейтинг: 0 / 0
15.04.2008, 15:31
    #35256523
Вика2008
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формат даты
в TextBox.ControlSource имя и поте таблицы contacts.data_reg
...
Рейтинг: 0 / 0
15.04.2008, 15:37
    #35256564
PaulWist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формат даты
Вика2008в TextBox.ControlSource имя и поте таблицы contacts.data_reg

Что выдает

Код: plaintext
?type('contacts.data_reg')
...
Рейтинг: 0 / 0
15.04.2008, 15:57
    #35256639
Вика2008
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формат даты
PaulWist
?type('contacts.data_reg')
=D
...
Рейтинг: 0 / 0
15.04.2008, 16:14
    #35256700
Hel!Riser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формат даты
выставь txt.StrictDateEntry=0 и код будет ничтячно отрабатываться в валиде
...
Рейтинг: 0 / 0
15.04.2008, 16:17
    #35256709
Вика2008
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формат даты
Hel!Riser
стоит, не помогает
...
Рейтинг: 0 / 0
15.04.2008, 17:14
    #35256891
XAndy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формат даты
Вика2008
Проверьте всё внимательно, код сам по себе рабочий
...
Рейтинг: 0 / 0
15.04.2008, 23:34
    #35257505
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формат даты
Подправил статью, с учетом возможного сброса значений TextBox.Text

Как заменить сообщение Invalid Date при вводе некорректной даты
...
Рейтинг: 0 / 0
16.04.2008, 10:02
    #35257885
Вика2008
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формат даты
ВладимирМ
Спасибо огромное, теперь получилось!

Извините что всех замучила!!!
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Формат даты / 24 сообщений из 24, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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