Ответы на часто задаваемые вопросы по Visual Foxpro

Чем заменить наш привычный SAY для экрана?
>Какие свойства определяют цвет?
Что определяет размер и выравнивание текста в Grid?
Как избежать выделения всей ячейки (функция “К”)?
Как уменьшить число страниц в форме?
Как создать просматриватель MEMO-полей?
В каком случае нужен набор форм?
Где разместить условие отбора данных для Grid?
Где определять переменные, упоминаемые в свойствах таблицы?
Как остановить форму на экране, если нет меню?
Как заставить обновляться экран, если прокручиваем элемент управления "Grid" ?
Чем отличается внедренный объект от связанного?
Как бороться с главным окном?

 

 Ответы на вопросы

 

Чем заменить наш привычный SAY для экрана?

1. Меткой. Её заголовок Caption может отражать любую информацию, представленную в строковом виде. Недостаток - трудно сделать разделение порядков для чисел.

2. Объект TextBox, для которого свойство ReadOnly=.T..

В LostFocus того объекта, по которому движемся, записываем ThisForm.Text1.Refresh - для освежения результата. И что замечательно! - работают коды форматирования (например - разделение порядков в числах). Шаблон (999,999,999,999.99) прописывается в InputMask.

 К списку вопросов.

Какие свойства определяют цвет?

TextBox

BackColor - цвет фона
ForeColor - цвет букв

Grid

Спокойная ячейка - ячейка, на которой не сосредоточено ничье внимание
Текст - Column.ForeColor
Фон - Column.BackColor
Рамка - не нашёл
Ячейка после Click - ячейка, на которой кликнули мышью или начали ввод с клавиатуры
Текст - Text.ForeColor
Фон - Text.BackColor
Рамка - не нашёл
Ячейка в фокусе - ячейка, на которую встали Таb или курсором (SetFocus)
Текст - Text.SelectedForeColor
Фон - Text.SelectedBackColor
Рамка - не нашёл

 К списку вопросов.

Что определяет размер и выравнивание текстав Grid?

Размер и выравнивание текста в Спокойной ячейке определяется Column.Size|Alig... , в ячейках Focus & Grid - Text.Size|Alig...


К списку вопросов.

Как избежать выделения всей ячейки (функция “К”)?

Версия 3.0. Выделения всей ячейки аналогично функции "К" можно избежать, если Grid.Highlight=.F.В этом случае нельзя задавать перемещение курсора в начало поля командой Keyboard [{Home}], т.к. он и так встает в начало поля.

Версия 5.0 По умолчанию ячейка не выделяется. Поэтому, чтобы, наоборот, её выделить, в свойство Format ставим букву К.


К списку вопросов.

Как уменьшить число страниц в форме?

Версия 3.0. “...Внезапно понадобилось уменьшить число страниц. Изменил в родительском классе, но форма перестала загружаться - дает ошибку загрузки с посылом на поле возникновения ошибки. Пришлось открыть форму как базу и вручную искать и удалять все упоминания об удаленной странице. Причем, при удалении упоминания Page4 из поля Parent и последующем открытии формы, все записи относящиеся к измененному диапазону исчезли автоматически.”

Версия 5.0. Изменить значение свойства PageCount в PageFrame. Но надо помнить, что исчезнет последняя страница, причем, вместе с содержимым.


К списку вопросов.

Как создать просматриватель MEMO-полей?

В форме. Создать EditBox и кнопку его вызова, в свойство Click которой поместить код: thisform.Поле.Refresh - иначе содержимое поля не будет обновляться и Thisform.Поле.visible=.T. - при нажатии на кнопку поле становится видимым. Источником данных для поля EditBox должно быть МЕМО-поле соответствующей таблицы.

Отключать поле можно поместив в метод DblClick кнопки следующий код: thisform.Поле_примечаний.visible=.F.


К списку вопросов.

В каком случае нужен набор форм?

Когда нужно работать с несколькими формами создание набора является оптимальным решением. Формы при этом (пока) видны все, но можно ненужные в данный момент сворачивать в иконку. На выходе обязательно указать ThisFormSet.Release, чтобы закрылось действительно всё.


К списку вопросов.

Где разместить условие отбора данных для Grid?

Версия 3.0.

1. Если просто условие поместить в выражение индекса базы данных, то Grid ведет себя крайне странно - оставляет пробелы в строках, которые не попадают в диапазон.

2. Правильное решение - в свойствах таблицы в курсоре в Filter пишется нужное условие. НО! Потом такой фильтр нельзя отменить, его можно только переопределить, задав в тексте новое значение одной или обоих границ.


К списку вопросов.

Где определять переменные, упоминаемые в свойствах таблицы?

См. Часть 3 - последовательность выполнения свойств и методов.

Условие в свойствах окружения идентично предложению SET FILTER, и чтобы его изменить в тексте процедуры (PRG) соответственно задавать Set Filter To “Условие”.


К списку вопросов.

Как остановить форму на экране, если нет меню?

Из основной программы форма (набор форм) запускается Do form ... noread. Следующей строкой следует READ EVENTS. На кнопке выхода из формы в числе прочего в самом конце присутствует команда CLEAR EVENTS.

Как вызывать вспомогательные окна?

Если нужно вызывать вспомогательные окна, то можно сделать их в виде других форм с именами Form2, Form3 и т.д. и вызывать по функциональной клавише или кнопкой. Тип окна надо задать модальный. При его закрытии выполнятся все операции следующие за вызовом формы.

Версия 3.0. Если мы хотим задать некие переменные, например, для поиска, то нельзя задавать имя m.имя_поля, потому что это то имя, которое FoxPro использует сам, работая с полями базы как переменными памяти. Однако, для 5.0 это утверждение несправедливо - там нормально различаются переменные и поля.

Практика также показала, что тип окна может быть Modeless. В этом случае хорошо работает такая конструкция:

- В родительской программе:

select той области, в которой будет работать вспомогательное окно

do form “имя формы вспомогательного окна”

read event - это заставляет вспомогательное окно остаться на экране

select той области, в которой работает родительская программа


К списку вопросов.

Как заставить обновляться экран, если прокручиваем элемент управления "Grid" ?

В свойство AfterRowColChange записываем обновление экрана ThisForm.Refresh и
в свойство ScrollEvent - код:

if nDirection=0
keyboard [{UPARROW}]
endif
if nDirection=1
keyboard [{DNARROW}]
endif

Это подменяет нажатие элемента прокрутки перемещением с помощью курсора, на которое реагирует свойство AfterRowColChange.

 К списку вопросов.

Чем отличается внедренный объект от связанного?

На примере таблицы Excel. Внедренная таблица прописывается в приложение, позволяет себя редактировать, но не более того. По сути, это некий инструмент, внедренный в приложение.

Связанный объект - сам по себе. Приложение к нему обращается как к внешнему источнику. В случае, если данные экспортируются в Excel, а потом таблица вызывается из приложения, то объект должен быть именно связанным (отмечен флажок LINK).

Из документации по Excel: “Связь и внедрение это два метода обмена данными между документами Microsoft Excel и документами, созданными в других приложениях. Связь более предпочтительна, если требуется динамическое обновление данных, то есть в тот момент, когда данные изменяются в исходном документе, а внедрение если надо изменять данные или их формат внутри другого приложения.”

Между прочим, имеете место конфликт FoxPro 3.0 с EXCEL 7.0 .

 К списку вопросов.

Как бороться с главным окном?

В файле конфигурации CONFIG.vfp добавьте строку SCREEN=OFF - она сделает главное окно невидимым. Но оно понадобиться, если вы, например, захотите вывести отчет на предварительный просмотр. Тогда в любом месте главное окно можно показать командой _SCREEN.SHOW и после снова скрыть _SCREEN.HIDE.

К списку вопросов.


Copyright 2000 by Visual Foxpro Club