Команда EDIT

Отображает поля для редактирования.

Синтаксис:

EDIT
	[FIELDS FieldList]
	[Scope] [FOR lExpression1] [WHILE lExpression2]
	[FONT cFontName [, nFontSize]]
	[STYLE cFontStyle]
	[FREEZE FieldName]
	[KEY eExpression1 [, eExpression2]]
	[LAST | NOINIT]
	[LPARTITION]
	[NAME ObjectName]
	[NOAPPEND]
	[NOCLEAR]
	[NODELETE]
	[NOEDIT | NOMODIFY]
	[NOLINK]
	[NOMENU]
	[NOOPTIMIZE]
	[NORMAL]
	[NOWAIT]
	[PARTITION nColumnNumber [LEDIT] [REDIT]]
	[PREFERENCE PreferenceName]
	[REST]
	[SAVE]
	[TIMEOUT nSeconds]
	[TITLE cTitleText]
	[VALID [:F] lExpression3 [ERROR cMessageText]]
	[WHEN lExpression4]
	[WIDTH nFieldWidth]
	[[WINDOW WindowName1] 
	[IN [WINDOW] WindowNam2 | IN SCREEN | IN MACDESKTOP]]
	[COLOR SCHEME nSchemeNumber
	| COLOR ColorPairList]

Параметры:
FIELDS FieldList
Задает поля, которые появляются в окне редактирования. Поля отображаются в порядке, определенном в списке FieldList. В этот список можно включать поля из других связанных таблиц, в таких случаях перед именем поля нужно ставить псевдоним соответствующей таблицы и точку.
Если предложение FIELDS опущено, отображаются все поля таблицы в том порядке, в каком они фигурируют в структуре таблицы.
Список полей также может содержать любую комбинацию полей или вычисляемых полей, в том числе полей из таблиц, открытых в других рабочих областях. Список полей имеет следующий синтаксис:

FieldName1 
	[:R] 
	[:nColumnWidth]
	[:V = lExpression1 [:F] [:E = cMessageText]]
	[:P = cFormatCodes] 
	[:B = eLowerBound, eUpperBound [:F]]
	[:H = cHeadingText]
	[:W = lExpression2]
	[, FieldName2 [:R]...]

Вычисляемые поля:
В списке полей можно задавать операторы для создания вычисляемых полей. Вычисляемое поле содержит данные, созданные с помощью выражения и доступные только для чтения. Это выражение может иметь любой вид, но оно должно быть допустимым выражением Visual FoxPro.

Оператор, используемый для создания вычисляемого поля, имеет следующий синтаксис:

CalculatedFieldName = eExpression

В следующем примере создается вычисляемое поле location:

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE customer  && Open customer table
EDIT FIELD location = ALLTRIM(city) + ', ' + country

В состав списка полей предложения FIELDS может входить восемь опций, которые обеспечивают специальные виды обработки для полей, отображаемых в окне редактирования.
:nColumnWidth
Задает размер изображения для поля в столбцах. Значение :nColumnWidth не влияет на размер поля в таблице, а лишь изменяет способ изображения поля в окне редактирования.
:R
В следующем примере открывается окно редактирования с полями cust_id и company. Поле cust_id доступно только для чтения и не может быть изменено.

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE customer  && Open customer table
EDIT FIELD cust_id:R, company


Задает опцию проверки, в соответствии с которой в окне редактирования выполняется проверка достоверности данных на уровне поля. Если выражение lExpression1 имеет значение "истина" (.T.) в момент выведения курсора из данного поля, то данные, записанные в это поле, считаются правильными и курсор переходит в следующее поле.
Если выражение lExpression1 имеет значение "ложь" (.F.), введенные данные считаются некорректными, курсор остается в поле и выдается сообщение об ошибке. Если значение lExpression1 равно 0, введенные данные также считаются некорректными и курсор остается в поле, но сообщение об ошибке не выдается.
По умолчанию выражение lExpression1 вычисляется только при попытке модифицировать поле. Чтобы выполнять принудительную проверку, задайте опцию :F.
Опция :E позволяет вам выдавать собственное сообщение об ошибке.
Опция проверки не действует для memo-полей.
:F
Задает опцию форсированной проверки достоверности, которая определяет, когда должно вычисляться выражение опции проверки (lExpression1): при выведении курсора из поля или при активизации другого окна. Если опция :F не задана, lExpression1 будет вычисляться только при внесении изменений в поле. Если опция :F задана, lExpression1 вычисляется даже тогда, когда поле не изменяется.
:E = cMessageText
Отображает сообщение об ошибке cMessageText вместо системного сообщения, выдаваемого по умолчанию.
Если выражение проверки достоверности :V = lExpression1 имеет значение "истина" (.T.), курсор выходит из поля без проблем. Если это выражение имеет значение "ложь" (.F.), курсор остается в поле и выдается сообщение об ошибке.
Если значение выражения проверки достоверности :V = lExpression1 равно 0, сообщение не выдается и курсор остается в данном поле. Это дает вам возможность выдавать собственные сообщения об ошибках в программах проверки достоверности.
Сообщение об ошибке выдается только в том случае, если установка SET NOTIFY имеет значение ON. Если действует установка SET BELL ON, раздается звуковой сигнал.
В следующем примере открывается таблица products и отображаются поля product_id и prod_name. Чтобы выполнить проверку достоверности поля product_id, введите в него значение, превышающее 100.
Опция :V представляет критерий достоверности. Опция :F форсирует проверку достоверности, чтобы она производилась независимо от того, изменялись ли данные. Опция :E заменяет системное сообщение об ошибке Visual FoxPro пользовательским сообщением.
В Visual FoxPro, FoxPro для Windows и FoxPro для Macintosh сообщение об ошибке выдается в строке состояния внизу основного окна Visual FoxPro.
Чтобы закрыть окно редактирования, нажмите клавишу Esc.

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE products  && Open products table
IF _WINDOWS OR _MAC
	SET STATUS BAR ON
ENDIF
USE products
EDIT FIELDS in_stock :V = in_stock < 100 ;
	:F ;
	:E = 'The stock amount must be less than 100'

:P = cFormatCodes
Задает опцию шаблона, которая позволяет создать шаблон редактирования в виде кодов cFormatCodes, управляющих отображением и вводом данных для каждого поля в окне редактирования.
Подробнее о применении шаблонов с кодами редактирования см. описание команд @ ... GET и @ ... SAY. В предложениях PICTURE и FUNCTION можно использовать все функциональные коды и коды шаблонов, допустимые для команд @ ... GET и @ ... SAY, за исключением кода M.
В следующем примере опция шаблона использована для того, чтобы разрешить ввод в поле unit_price только числовых данных определенного формата:

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE products  && Open products table
EDIT FIELDS unit_price :P = '99,999.99'

:B = eLowerBound, eUpperBound [:F]
Задает набор граничных значений для данных. Выражения границ eLowerBound и eUpperBound должны иметь тот же тип, что и поле; в качестве этих выражений нельзя задавать пользовательские функции. Если введенные данные не попадают в диапазон между eLowerBound и eUpperBound, выдается системное сообщение, содержащее диапазон, который следует соблюдать.
По умолчанию введенные данные проверяются на нарушение граничных значений только при внесении изменений в содержимое поля. Чтобы форсировать проверку соблюдения граничных значений, задайте опцию принудительной проверки достоверности (:F).
В следующем примере определяется допустимый диапазон значений в поле in_stock : от 1 до 100. Введите в это поле значение, меньшее 1, чтобы выполнить проверку граничных значений. Чтобы закрыть окно редактирования, нажмите клавишу Esc.

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE products  && Open products table
EDIT FIELDS in_stock :B = 1, 100 :F

:H = cHeadingText
Задает опцию заголовка (:H), которая позволяет вам заменять имена поля, используемые по умолчанию, собственными заголовками с текстом cHeadingText. По умолчанию имена полей в окне редактирования ставятся левее самих полей.
В следующем примере для отображаемых полей задаются заголовки, определяемые пользователем.

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE products
EDIT FIELDS prod_name :H = 'Product Name:',  ;
	unit_price :H = 'Price per Unit:'

:W = lExpression2
Задает опцию WHEN, с помощью которой можно запретить вводить курсор в поле, в зависимости от значения логического выражения lExpression2. Опция (:W) вычисляет значение lExpression2. Если lExpression2 имеет значение "ложь" (.F.), вы не сможете вводить курсор в поле. Если lExpression2 имеет значение "истина" (.T.), курсор можно вводить в поле. Выражение lExpression2 поддерживает пользовательские функции.
Если текущее поле помечено как доступное только для чтения, запрещается вводить курсор в любое поле. Это имеет место только в том случае, когда каждое поле содержит предложение WHEN с выражением, имеющим значение "ложь".
Scope
Задает диапазон записей, отображаемых в окне редактирования. Диапазон определяется следующими предложениями: ALL, NEXT nRecords, RECORD nRecordNumber и REST. Подробнее о предложениях диапазона см. тему Предложения диапазона или главу 2 "Overview of the Language" Руководства разработчика. Команды, использующие предложение Scope, воздействуют только на таблицу в активной рабочей области.
По умолчанию областью действия команды EDIT являются все записи (предложение ALL).
FOR lExpression1
Задает отображение в окне редактирования только записей, удовлетворяющих логическому условию lExpression1. Это позволяет отфильтровывать ненужные записи.
Технология Rushmore оптимизирует запрос EDIT FOR, если lExpression1 является оптимизируемым выражением. В целях достижения наилучшей производительности используйте в предложении FOR оптимизируемое выражение. О выражениях, допускающих оптимизацию по технологии Rushmore, см. темы SET OPTIMIZE и Основы технологии Rushmore и главу 17 "Оптимизация приложений" Руководства разработчика.
WHILE lExpression2
Задает условие, в соответствии с которым записи отображаются в окне редактирования, пока логическое выражение lExpression2 остается истинным (.T.).
FONT cFontName [, nFontSize]
Задает шрифт окна редактирования и размер шрифта. Символьное выражение cFontName содержит имя шрифта, а числовое выражение nFontSize задает размер шрифта. Например, следующее предложение задает 16-пунктовый шрифт Courier для полей, отображенных в окне редактирования:

FONT 'Courier',16 

Если вы задали предложение FONT, опустив размер шрифта nFontSize, в окне редактирования используется размер 10 пунктов.
Если в Visual FoxPro и FoxPro для Windows предложение FONT опущено, используется 8-пунктовый шрифт MS Sans Serif. Если заданный шрифт отсутствует, его заменяет шрифт с похожими характеристиками.
В FoxPro для Macintosh используется 10-пунктовый шрифт Geneva. Если заданный шрифт отсутствует, используется шрифт Chicago.
В FoxPro для MS-DOS предложение FONT игнорируется.
STYLE cFontStyle
Задает стиль шрифта для окна редактирования в Visual FoxPro, FoxPro для Windows и FoxPro для Macintosh. Если предложение STYLE опущено, используется стиль Normal (нормальный).
Если в Visual FoxPro и FoxPro для Windows заданный стиль шрифта отсутствует, его заменяет стиль с похожими характеристиками.
Если в FoxPro для Macintosh заданный стиль отсутствует, используется стиль Normal (нормальный).
В FoxPro для MS-DOS предложение STYLE игнорируется.

Символ	Стиль шрифта
B	Bold (Полужирный)
C	Condense (Уплотненный; только в FoxPro для Macintosh)
E	Extend (Расширенный; только в FoxPro для Macintosh)
I	Italic (Курсив)
N	Normal (Нормальный)
O	Outline (Контурный)
Q	Opaque (Непрозрачный)
S	Shadow (Затененный)
-	Strikeout (Перечеркнутый; только в Visual FoxPro)
T	Transparent (Прозрачный)
U	Underline (Подчеркнутый)

Можно указать сразу несколько символов, задав комбинацию стилей. В следующем примере открывается окно редактирования, в котором используется шрифт с подчеркиванием:

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE customer  && Opens customer table
IF _WINDOWS
	EDIT FIELDS contact FONT 'System', 15  STYLE 'NU'
ENDIF
IF _MAC
	EDIT FIELDS contact FONT 'Geneva', 14  STYLE 'NU'
ENDIF

FREEZE FieldName
Разрешает вносить изменения только в одно поле в окне редактирования в поле FieldName. Остальные поля только отображаются, их нельзя редактировать.
KEY eExpression1 [, eExpression2]
Ограничивает диапазон записей, отображаемых в окне редактирования. В предложении KEY можно задать значение ключа индекса (eExpression1) или диапазон значений ключа (eExpression1, eExpression2) для записей, отображаемых в окне редактирования. Таблица должна быть индексирована, и значение (или значения) ключа индекса, указанное в предложении KEY, должно быть того же типа, что и выражение индекса в главном файле индекса или в главном теге.
В следующем примере задано отображение в окне редактирования только тех записей, для которых почтовые коды попадают в диапазон от 10,000 до 30,000 :

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE customer  && Open customer table
SET ORDER TO postalcode
EDIT KEY '10000', '30000'

LAST | NOINIT
Сохраняет все изменения, внесенные в конфигурацию окна редактирования. Сюда относятся изменения в списке полей, в размерах каждого поля, в позиции и размерах окна редактирования; все эти изменения записываются в файл FOXUSER. Подробнее об этом файле см. команду SET RESOURCE.
Если команда EDIT выдана с предложением LAST, окно редактирования открывается в той конфигурации, которая была сохранена последней в файле FOXUSER. Тем самым восстанавливается предыдущая конфигурация окна редактирования, созданная последней командой EDIT. Если последний раз вы выдавали команду EDIT из окна команд с длинным списком предложений, то, чтобы не набирать все это еще раз, выдайте EDIT LAST.
Если вы выходите из сеанса редактирования, нажав клавиши CTRL+Q, то все изменения, внесенные в конфигурацию окна редактирования в ходе текущего сеанса, будут потеряны.
LPARTITION
Помещает курсор в первое поле левого раздела окна редактирования. Окно редактирования можно с помощью предложения PARTITION разбить на два раздела левый и правый. По умолчанию курсор при открытии окна редактирования помещается в первое поле правого раздела.
Если указать опцию LPARTITION, не задав предложение PARTITION, курсор будет помещен в первое поле правого раздела окна редактирования.
NAME ObjectName
Допустимо только в Visual FoxPro.
Создает ссылку на окно редактирования как на объект, что позволяет манипулировать этим окном, используя объектно-ориентированные свойства элемента управления Grid. Подробнее об объектно-ориентированном программировании в Visual FoxPro см. главу 3 "Объектно-ориентированное программирование" Руководства разработчика. Подробнее о свойствах элемента управления Grid, которые можно задать для окна редактирования, созданного с помощью предложения NAME, см. тему Элемент управления Grid.
NOAPPEND
Запрещает пользователю добавлять записи в таблицу, нажимая клавиши CTRL+Y или выбирая команды Append Mode из меню View.
Важное замечание. Предложение NOAPPEND не помешает добавлять запись из программы (созданной с помощью предложений VALID, WHEN или команды ON KEY LABEL), когда вы находитесь в окне редактирования.
NOCLEAR
Допустимо только в FoxPro для MS-DOS.
Указывает, что изображение окна редактирования остается на экране даже после его закрытия. Это изображение не является активным окном редактирования. Чтобы удалить изображение окна редактирования, выдайте команду CLEAR.
В Visual FoxPro, FoxPro для Windows и FoxPro для Macintosh предложение NOCLEAR игнорируется.
NODELETE
Не разрешает помечать записи на удаление в окне редактирования. По умолчанию запись можно пометить на удаление, нажав клавиши CTRL+T, выбрав в меню Table команду Toggle Deletion Mark или щелкнув самый левый столбец этой записи.
Важное замечание. Предложение NODELETE не помешает пометить запись на удаление в программе (созданной с помощью предложений VALID, WHEN или команды ON KEY LABEL), когда вы находитесь в окне редактирования.
NOEDIT | NOMODIFY
Не разрешает пользователю модифицировать таблицу. Предложения NOEDIT и NOMODIFY идентичны. Если вы задали какое-либо из них, вы можете просматривать таблицу и вести в ней поиск, но не редактировать. Впрочем, вы также можете добавлять и удалять записи.
NOLINK
Отсоединяет друг от друга разделы окна редактирования. По умолчанию левый и правый разделы окна редактирования связаны: когда вы прокручиваете один из них, другой раздел также прокручивается.
NOMENU
Удаляет заголовок меню Table в Visual FoxPro и заголовок меню Browse в предыдущих версиях FoxPro из системной строки меню, блокируя доступ к меню Edit.
NOOPTIMIZE
Блокирует оптимизацию команды EDIT по технологии Rushmore. Подробнее см. тему SET OPTIMIZE или главу 17 "Объектно-ориентированное программирование" Руководства разработчика.
NORMAL
Открывает окно редактирования с обычными установками, принимаемыми по умолчанию, такими как цвета, размеры, позиция, заголовок и управляющие опции (GROW, FLOAT, ZOOM и т.д.). Если предложение NORMAL опущено и текущим окном вывода оказывается пользовательское окно с собственными установками, в окне редактирования тоже принимаются эти пользовательские установки.
NOWAIT
Продолжает выполнение программы сразу после открытия окна редактирования. Программа не ждет закрытия окна редактирования, а продолжает выполняться со строки, непосредственно следующей за строкой с командой EDIT NOWAIT. Если предложение NOWAIT опущено, то когда команда EDIT выдается в программе, окно редактирования открывается и выполнение программы приостанавливается до тех пор, пока окно редактирования не закроется.
Опция NOWAIT доступна только в рамках программы. Если задать NOWAIT при выдаче команды EDIT из окна команд, это никак не повлияет на ход работы.
PARTITION nColumnNumber
Разбивает окно редактирования на левый и правый разделы; nColumnNumber задает номер столбца, по которому проходит линия разбиения. Например, если значение nColumnNumber равно 20, линия разбиения находится в столбце 20 окна редактирования.
LEDIT
Указывает, что левый раздел окна редактирования будет находиться в режиме Browse (режиме просмотра).
REDIT
Указывает, что правый раздел окна редактирования будет находиться в режиме Browse. В следующем примере открывается окно редактирования с линией разбиения в столбце 20, причем правый раздел открывается в режиме Browse.
Чтобы оба раздела были открыты в режиме Browse, задайте оба ключевых слова.

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE customer  && Opens customer table

EDIT PARTITION 30 REDIT

PREFERENCE PreferenceName
Сохраняет атрибуты и опции окна редактирования для использования в будущем. В отличие от предложения LAST, которое восстанавливает окно редактирования в том виде, в каком оно выглядело в предыдущем сеансе, предложение PREFERENCE сохраняет атрибуты окна редактирования в файле ресурсов FOXUSER на неопределенный срок. Эти установки могут быть извлечены в любой момент. Подробнее о файле ресурсов FOXUSER см. SET RESOURCE.
Если выдать команду EDIT, задав при этом имя набора установок PreferenceName, то в первый раз в файле FOXUSER будет создан элемент, хранящий конфигурацию окна редактирования. Если впоследствии снова выдать EDIT с тем же именем набора установок, окно редактирования будет восстановлено в этом виде. При закрытии окна редактирования конфигурация установок обновляется.
Имя установки может состоять не более чем из 10 символов, должно начинаться с буквы или символа подчеркивания и может содержать любую комбинацию букв, цифр и символов подчеркивания.
Настроив вид окна наиболее подходящим для вас способом, вы можете предотвратить возможность изменения этих установок. Закройте окно редактирования, выдайте команду SET RESOURCE OFF, откройте файл FOXUSER в виде таблицы и сделайте поле с установками доступным только для чтения, задав в логическом поле READONLY значение "истина" (.T.).
Подробнее о файле ресурсов FOXUSER см. тему SET RESOURCE.
REST
Запрещает перемещать указатель записи из текущей позиции в начало таблицы. По умолчанию команда EDIT устанавливает указатель записи в начало таблицы.
SAVE
Сохраняет окно редактирования и все его области редактирования memo-полей активными и видимыми (открытыми). Пройдя в цикле по всем остальным открытым окнам с помощью клавиатуры или мыши, вы сможете вернуться в окно редактирования.
Опция SAVE доступна только в рамках программы. Если указать SAVE в команде EDIT, выданной в окне команд, это никак не повлияет на ход работы, поскольку установка EDIT SAVE всегда принимается по умолчанию в интерактивном режиме.
TIMEOUT nSeconds
Задает интервал времени, в течение которого окно редактирования может ждать ввода. Числовое выражение nSeconds определяет, сколько секунд может пройти, прежде чем окно редактирования автоматически закроется, не дождавшись введенных данных.
Опция TIMEOUT доступна только в рамках программы; если ее задать в окне команд, это никак не отразится на ходе работы. В следующем примере окно редактирования закрывается, если в течение 10 секунд в него не были введены данные.

DEFINE WINDOW wEdit FROM 1,1 TO 24,40 ;
	CLOSE ;
	GROW ;
	COLOR SCHEME 10
CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE customer  && Open customer table
EDIT WINDOW wEdit ;
	FIELDS phone :H = 'Phone Number:' , ;
	company :H = 'Company:' ;
	TIMEOUT 10
RELEASE WINDOW wEdit 

TITLE cTitleText
Заменяет имя или псевдоним таблицы, отображаемый по умолчанию в строке заголовка окна редактирования, на заголовок с текстом cTitleText. В противном случае в строке заголовка появится имя или псевдоним просматриваемой таблицы.
Если вы выдали команду EDIT WINDOW, чтобы поместить окно редактирования в пользовательское окно, заголовок пользовательского окна заменяется заголовком окна редактирования.

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE customer  && Open customer table
EDIT;
	TITLE 'My Edit Window' ;
	FIELDS phone :H = 'Phone Number' , ;
	company :H = 'Company:'

VALID lExpression3
Выполняет в окне редактирования проверку достоверности на уровне записи. Предложение VALID выполняется только в том случае, если в запись вносится изменение и вы перемещаете курсор к другой записи. Предложение VALID не выполняется, если изменение вносится только в memo-поле.
Если VALID возвращает значение "истина" (.T.), вы можете перемещать курсор к другой записи. Если VALID возвращает "ложь" (.F.), курсор остается в текущем поле и Visual FoxPro выдает сообщение об ошибке. Используя предложение ERROR, вы можете выдавать собственное сообщение об ошибке в случае, когда VALID возвращает "ложь". Символьное выражение cMessageText определяет текст этого сообщения. Если VALID возвращает 0, курсор остается в текущем поле, но сообщение об ошибке не выдается.
Предложение VALID не следует смешивать с опцией проверки (:V), которая обеспечивает проверку достоверности на уровне поля.
:F
Форсирует выполнение предложения VALID перед тем, как пользователь переводит курсор к следующей записи. В этом случае VALID выполняется даже тогда, когда запись не изменилась.
ERROR cMessageText
Задает сообщение об ошибке с текстом cMessageText: оно заменяет системное сообщение, используемое по умолчанию. Visual FoxPro выдает это сообщение, когда VALID возвращает "ложь" (.F.).
WHEN lExpression4
Проверяет условие, когда пользователь переводит курсор к другой записи. Если lExpression4 имеет значение "истина" (.T.), пользователь может модифицировать запись, к которой он перешел. Если lExpression4 имеет значение "ложь" (.F.) или 0, запись, к которой перешел пользователь, становится доступной только для чтения и не может быть модифицирована.
Предложение WHEN не выполняется, когда активизируется другое окно.
WIDTH nFieldWidth
Ограничивает значением nFieldWidth количество символов, отображаемых для каждого поля тему окна редактирования. Задавая предложение WIDTH, вы не изменяете размер полей в таблице; изменяется лишь способ их отображения в окне редактирования. Если для какого-либо поля с помощью предложения FIELDS была задана своя ширина, она заменяет значение, заданное для этого поля предложением WIDTH.
WINDOW WindowName1
Задает пользовательское окно, характеристики которого перенимает окно редактирования. Например, если пользовательское окно создано с помощью предложения FLOAT, окно редактирования можно будет перемещать. Заданное окно не обязательно должно быть активным или видимым, но оно должно быть определено. Если в FoxPro для MS-DOS окно определено с нижним колонтитулом, он не появится на экране его место занимает линейка прокрутки окна редактирования.
IN [WINDOW] WindowName2
Задает родительское окно WindowName2, внутри которого открывается окно редактирования. Окно редактирования не перенимает характеристики родительского окна. Окно редактирования, активизируемое внутри родительского окна, нельзя выдвинуть за его пределы. Если перемещать родительское окно, окно редактирования будет передвигаться вместе с ним.
Чтобы получить доступ к окну редактирования, нужно предварительно сделать его активным и видимым и определить его родительское окно с помощью команды DEFINE WINDOW.
IN SCREEN
Принудительно помещает окно редактирования в основное окно Visual FoxPro, когда активно пользовательское окно.
IN MACDESKTOP
Допустимо только в FoxPro для Macintosh.
Помещает окно редактирования в основное окно Macintosh. Окно редактирования находится на одном уровне с основным окном FoxPro; его можно сдвинуть за пределы основного окна FoxPro и скрыть за ним, выведя основное окно FoxPro на передний план. Когда задано предложение MACDESKTOP, окно редактирования ведет себя аналогично окнам редактирования в FoxBASE+ для Macintosh.
При использовании предложения MACDESKTOP отменяется текущая установка SET MACDESKTOP. Эта установка определяет, где размещаются окна редактирования в случае отсутствия предложений SCREEN и MACDESKTOP в основном окне FoxPro или в основном окне Macintosh. Подробнее о размещении окон редактирования в основном окне FoxPro и в основном окне Macintosh см. тему SET MACDESKTOP.
COLOR SCHEME nSchemeNumber
Задает номер цветовой схемы, используемой для определения цветов окна редактирования. В FoxPro для MS-DOS в окне редактирования по умолчанию принимаются цвета, заданные цветовой схемой COLOR SCHEME 10 (Browse).
В Visual FoxPro, FoxPro для Windows и FoxPro для Macintosh окно редактирования принимает цветовую схему, установленную в диалоговом окне Color на Панели управления.
COLOR ColorPairList
Задает набор цветовых пар, используемых для определения цветов окна редактирования. В следующей таблице показано, какие элементы контролируются той или иной цветовой парой в FoxPro для MS-DOS.

Номер цветовой пары	Элемент окна просмотра
1			Другие записи
2			Текущее поле
3			Обрамление
4			Цвет заголовка активного окна редактирования
5			Цвет заголовка, когда активно другое окно
6			Выделенный текст
7			Текущая запись
8			Затенение

В FoxPro для MS-DOS второй цвет в цветовой паре 1 обозначает цвет фона сетки. Второй цвет цветовой пары 3 используется в качестве основного цвета сетки.

Комментарии:
Команда EDIT позволяет редактировать в окне выбранную таблицу. EDIT работает точно так же, как CHANGE.
Если вы для выхода из окна редактирования нажали клавишу Esc, то изменения, внесенные в последнее модифицированное поле, аннулируются. Однако если вы, модифицировав поля перешли в другую запись, изменения будут сохранены.
В программе с помощью команды DEACTIVATE WINDOW можно сохранить внесенные изменения и закрыть окно редактирования. При этом в команде DEACTIVATE WINDOW нужно задать имя окна редактирования. Подробнее об именах окон редактирования см. тему WTITLE( ).
Поддержка команды SET SKIP
Команда SET SKIP позволяет устанавливать многозначное ("один-ко-многим") отношение между двумя таблицами (см. пример). Каждой записи родительской таблицы может соответствовать несколько связанных записей в дочерней таблице. Если вы создали многозначное отношение, вы можете с помощью команды EDIT просматривать записи как из родительской таблицы, так и из дочерней.
Родительская запись фигурирует только один раз, вместе с первой соответствующей ей записью из дочерней таблицы. Все остальные связанные записи отображаются в строках, следующих за родительской записью и первой дочерней записью. В FoxPro для MS-DOS во всех столбцах с информацией из родительской таблицы, идущих после первой дочерней записи, отображаются затененные блоки. В Visual FoxPro, FoxPro для Windows и FoxPro для Macintosh символ заполнения, используемый для повторяющейся родительской информации, зависит от текущего шрифта окна просмотра.
Подробнее о создании многозначных отношений см. тему SET SKIP.
Поддержка функций COL( ) и ROW( )
Функции COL( ) и ROW( ) используются для получения текущей позиции курсора по строкам и столбцам в окне редактирования. Если окно редактирования открыто в основном окне Visual FoxPro, возвращаемая позиция курсора выражается относительно основного окна Visual FoxPro, а не самого окна редактирования. Если окно редактирования открыто в пользовательском окне, функции COL( ) и ROW( ) возвращают позицию курсора относительно пользовательского окна.

Пример:

* В следующем примере с помощью команды SET SKIP строится отношение
* один-ко-многим между двумя таблицами. В родительской таблице
* (customer) для каждой составленной накладной существует только одна
* запись. Дочерняя таблица (orders) содержит несколько записей для
* каждой записи из родительской таблицы.
* После того, как отношение создано, открывается окно редактирования, в
* котором отображаются записи как из родительской, так и из дочерней
* таблицы.

CLEAR
CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE customer ORDER cust_id IN 0	&& Parent table
USE orders ORDER cust_id IN 0  && Child table
SELECT customer	  && Back to parent work area
SET RELATION TO cust_id INTO orders	  && Establish relationship
SET SKIP TO orders  && One-to-many relationship
WAIT WINDOW 'Scroll to see shipping dates for each customer' NOWAIT
EDIT FIELDS customer.cust_id :H='Customer Number', ;
	customer.city :H='Customer City', orders.shipped_on

Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 12.01.2003