Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Помогите с формами / 5 сообщений из 5, страница 1 из 1
25.12.2005, 00:46
    #33456132
Alekcei_dvo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с формами
Я еще новичек в foxpro, много не знаю
Пока тренируюсь сделать форму для простой несвязанной таблицы
Почему следущее не работает ?
В процедуре инициализации формы прописываю :
( Я так понимаю, что должно быть при запуске формы )
set deleted on
thisform.text1.enabled=.f.
thisform.text2.enabled=.f.
thisform.text3.enabled=.f.
thisform.text4.enabled=.f. // все текстовые поля нельзя изменять
thisform.command1.enabled=.f.
thisform.command2.enabled=.f.
thisform.command3.enabled=.f.
thisform.command4.enabled=.f.
/*Это первые 4 кнопки навигации- первая, следущая, предыдущая,последняя, по умолчанию считаю что в таблице нет записей, так что они неактивны */
thisform.command8.enabled=.t.// добавить- всегда возможно
thisform.command7.enabled=.f.//Редактировать, неактивно
thisform.command6.enabled=.f.//Удалить , неактивно
do case
/* В случае, если есть одна запись, можем ее редактировать и удалить */
case reccount()=1
thisform.command7.enabled=.t.
thisform.command6.enabled=.t.
case reccount()>1
/* В случае если записей больше можем перейти на следущую и последнюю , редактировать и удалить*/
thisform.command2.enabled=.t.
thisform.command4.enabled=.t.
thisform.command7.enabled=.t.
thisform.command6.enabled=.t.
endcase
thisform.buffermode=2
Когда запускаю, даже если одна запись , все равно кнопки следущая и последняя активны
Тоже самое если нет записей
...
Рейтинг: 0 / 0
25.12.2005, 08:13
    #33456175
Владимир СА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с формами
Чувствуется, что ты изучал либо C, либо Delphi. Это видно по объявлению строки комментария. В Fox-е обычно это *. Посмотри Help по *; &&.
Команду:
Код: plaintext
SET DELETED ON
Я обычно оформляю в стартовом файле. Про стартовый файл можно посмотреть в статье Владимира Максимова Главный (стартовый) файл проекта . И вообще почитать его статьи Советы начинающим (Части I-V) . И многое, что еще полезного найдешь.
Функция reccount() - возвращает число записей в текущей или заданной таблице. Но значение, возвращаемое функцией RECCOUNT(), не зависит от установок SET DELETED и SET FILTER. Т.е. если ты создал записи в таблице, а потом их удалил, то RECCOUNT() покажет общее количество записей и удаленных тоже. Может быть поэтому у тебя кнопки и активны. Лучше использовать функцию EOF(). Посмотри Help.
...
Рейтинг: 0 / 0
26.12.2005, 01:01
    #33456513
Alekcei_dvo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с формами
Владимир СА
Код: plaintext
SET DELETED ON
Я обычно оформляю в стартовом файле.
Да, так и сделал
Владимир САФункция reccount() - возвращает число записей в текущей или заданной таблице. Но значение, возвращаемое функцией RECCOUNT(), не зависит от установок SET DELETED и SET FILTER. Т.е. если ты создал записи в таблице, а потом их удалил, то RECCOUNT() покажет общее количество записей и удаленных тоже.

А нельзя ли сделать так, чтобы удаленные полностью исчезали и reccount()
возвращался истинное число записей ?
Владимир СА

Лучше использовать функцию EOF().


If eof()
thisform.command7.enabled=.t.
thisform.command6.enabled=.t
else
thisform.command2.enabled=.t.
thisform.command4.enabled=.t.
thisform.command7.enabled=.t.
thisform.command6.enabled=.t.
endif
Так вообще ошибку выдает и вылетает ...
...
Рейтинг: 0 / 0
26.12.2005, 08:29
    #33456661
Владимир СА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с формами
Alekcei_dvoА нельзя ли сделать так, чтобы удаленные полностью исчезали и reccount() возвращался истинное число записей ?Для этого существует команда PACK
Код: plaintext
1.
2.
3.
SELECT <My_table>
PACK
* Окончательно удаляет все записи, помеченные на удаление
* в текущей таблице
Alekcei_dvo
If eof()
thisform.command7.enabled=.t.
thisform.command6.enabled=.t
else
thisform.command2.enabled=.t.
thisform.command4.enabled=.t.
thisform.command7.enabled=.t.
thisform.command6.enabled=.t.
endif
Так вообще ошибку выдает и вылетает ...Если хочешь посмотри код примера
Код: 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.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
LOCAL o_prim as Form
o_prim = CREATEOBJECT("prim1")
o_prim.Show()
READ EVENTS

DEFINE CLASS prim1 AS form

	Height =  240 
	Width =  200 
	DoCreate = .T.
	AutoCenter = .T.
	Caption = "Пример"
	Name = "Form1"

	ADD OBJECT cmd_add AS commandbutton WITH ;
		Top =  4 , ;
		Left =  11 , ;
		Height =  27 , ;
		Width =  31 , ;
		Caption = "Add", ;
		StatusBarText = "Добавить", ;
		TabIndex =  1 , ;
		ToolTipText = "Добавить", ;
		Name = "Cmd_add"

	ADD OBJECT cmd_edit AS commandbutton WITH ;
		Top =  4 , ;
		Left =  42 , ;
		Height =  27 , ;
		Width =  31 , ;
		Caption = "Edit", ;
		StatusBarText = "Редактировать", ;
		TabIndex =  2 , ;
		ToolTipText = "Редактировать", ;
		Name = "Cmd_edit"

	ADD OBJECT cmd_del AS commandbutton WITH ;
		Top =  4 , ;
		Left =  73 , ;
		Height =  27 , ;
		Width =  29 , ;
		Caption = "Del", ;
		StatusBarText = "Удалить текущий", ;
		TabIndex =  3 , ;
		ToolTipText = "Удалить текущий", ;
		Name = "Cmd_del"

	ADD OBJECT cmd_quit AS commandbutton WITH ;
		Top =  4 , ;
		Left =  152 , ;
		Height =  27 , ;
		Width =  41 , ;
		Cancel = .T., ;
		Caption = "Close", ;
		StatusBarText = "Закрыть", ;
		TabIndex =  4 , ;
		ToolTipText = "Закрыть", ;
		Name = "Cmd_quit"

	ADD OBJECT shape2 AS shape WITH ;
		Top =  4 , ;
		Left =  6 , ;
		Height =  0 , ;
		Width =  190 , ;
		BackStyle =  0 , ;
		SpecialEffect =  0 , ;
		Name = "Shape2"

	ADD OBJECT shape6 AS shape WITH ;
		Top =  32 , ;
		Left =  6 , ;
		Height =  0 , ;
		Width =  190 , ;
		BackStyle =  0 , ;
		SpecialEffect =  0 , ;
		Name = "Shape6"

	ADD OBJECT shape7 AS shape WITH ;
		Top =  3 , ;
		Left =  4 , ;
		Height =  30 , ;
		Width =  5 , ;
		BackStyle =  0 , ;
		SpecialEffect =  0 , ;
		Name = "Shape7"

	ADD OBJECT shape8 AS shape WITH ;
		Top =  4 , ;
		Left =  196 , ;
		Height =  28 , ;
		Width =  0 , ;
		BackStyle =  0 , ;
		SpecialEffect =  0 , ;
		Name = "Shape8"

	ADD OBJECT grid1 AS grid WITH ;
		DeleteMark = .F., ;
		Height =  199 , ;
		Left =  6 , ;
		ReadOnly = .T., ;
		RecordSource = "My_cur1", ;
		TabIndex =  5 , ;
		Top =  36 , ;
		Width =  188 , ;
		Name = "Grid1"

	PROCEDURE Unload
		USE IN My_cur1
		CLEAR EVENTS
	ENDPROC

	PROCEDURE Load
		CREATE CURSOR My_cur1 ;
		  (n_recno I, c_name C( 10 ))

		FOR i= 1  TO  10 
		  INSERT INTO My_cur1 ;
		      (n_recno, c_name);
		    VALUES ;
		      (i, SYS( 2015 ))
		ENDFOR
		GO TOP IN My_cur1
	ENDPROC

	PROCEDURE Activate
		IF !EOF("My_cur1")
		  THIS.Cmd_edit.Enabled = .T.
		  THIS.Cmd_del.Enabled  = .T.
		ELSE
		  THIS.Cmd_edit.Enabled = .F.
		  THIS.Cmd_del.Enabled  = .F.
		ENDIF
	ENDPROC

	PROCEDURE Init
		IF !EOF("My_cur1")
		  THIS.Grid1.SetFocus()
		ENDIF
	ENDPROC

	PROCEDURE cmd_quit.Click
		THISFORM.Release()
	ENDPROC

ENDDEFINE
Запусти сначала эту программу, а затем закоментируй в процедуре LOAD
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
	PROCEDURE Load
		CREATE CURSOR My_cur1 ;
		  (n_recno I, c_name C( 10 ))

*		FOR i= 1  TO  10 
*		  INSERT INTO My_cur1 ;
*		      (n_recno, c_name);
*		    VALUES ;
*		      (i, SYS( 2015 ))
*		ENDFOR
*		GO TOP IN My_cur1
	ENDPROC
и запусти снова. Обрати внимание на процедуру Activate. Проанализируй.
...
Рейтинг: 0 / 0
26.12.2005, 12:42
    #33457244
Владимир СА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с формами
Вот еще пример, там есть навигационные кнопки, но их Enabled = .F. при одной или крайних записях, я считаю, неследует. Скопируй форму и в окне Command запусти форму:
Код: plaintext
DO FORM form2.scx
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Помогите с формами / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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