powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Помогите с формами
5 сообщений из 5, страница 1 из 1
Помогите с формами
    #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
Помогите с формами
    #33456175
Фотография Владимир СА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чувствуется, что ты изучал либо C, либо Delphi. Это видно по объявлению строки комментария. В Fox-е обычно это *. Посмотри Help по *; &&.
Команду:
Код: plaintext
SET DELETED ON
Я обычно оформляю в стартовом файле. Про стартовый файл можно посмотреть в статье Владимира Максимова Главный (стартовый) файл проекта . И вообще почитать его статьи Советы начинающим (Части I-V) . И многое, что еще полезного найдешь.
Функция reccount() - возвращает число записей в текущей или заданной таблице. Но значение, возвращаемое функцией RECCOUNT(), не зависит от установок SET DELETED и SET FILTER. Т.е. если ты создал записи в таблице, а потом их удалил, то RECCOUNT() покажет общее количество записей и удаленных тоже. Может быть поэтому у тебя кнопки и активны. Лучше использовать функцию EOF(). Посмотри Help.
...
Рейтинг: 0 / 0
Помогите с формами
    #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
Помогите с формами
    #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
Помогите с формами
    #33457244
Фотография Владимир СА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот еще пример, там есть навигационные кнопки, но их Enabled = .F. при одной или крайних записях, я считаю, неследует. Скопируй форму и в окне Command запусти форму:
Код: plaintext
DO FORM form2.scx
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Помогите с формами
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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