Juri Shutenko Personal Homepage. Visual FoxPro.

VFP 9.0 Autocomplete

Справка из Help.

Синтаксис:

Textbox.AutoComplete [ = nValue]

Возвращаемое/устанавливаемое значение - nValue - численный тип данных.
Ниже приведена таблица, иллюстрирующая возможные значения параметра nValue:

nValue Действие
0 Не отображать лист входов
1 Алфавитный - сортирует входа по алфавиту и не является регистрозависимым
2 Наиболее часто используемые (MFU) - сортирует входа на основании большего значения счетчика и затем на основании наиболее позднего ввода.
3 Самые последние использованные - сортирует входа на основе данных поля Updated в таблице источника ввода, где введенные самыми последними будут стоять первыми с списке.
4 Пользовательская Использует значение поля Weight, заполняемое с использованием вашего собственного алгоритма для указания каким образом вы желаете сортировать входы списка. Результат сортируется в убывающем порядке (от высшей к низшей величине). При равенстве весов, используется значение поля Updated (самые последние введенные покажутся первыми).

Примечание
Применимо к элементу TextBox (Visual FoxPro)
 
Установите свойство AutoComplete для обеспечения автоматического хранения с последующим предложением выбора значений, которые могут быть помещены в элемент управления textbox. При вводе символов в элемент отображается выпадающий список последних ввенных слов, которые соответствуют по маске введенным символам. Когда пользователь выбирает какое-либо слово из листа значение "value" элемента text box становится равным выбранному значению и обновляет информацию для этого ввода в таблице Autocomp.dbf или другой указаннйо вами таблице.
 
Если вы желаете управлять числом элементов, которые появляются в динамическом списке, вы должны установить опцию List Display Count в диалоге Options. For more Для более детальной информации о том, как хранятся данные, используемые для работы свойства AutoComplete смотри описание свойства AutoCompTable.
 
Если вы используете опцию специальной сортировки (AutoComplete=4), вам необходимо определить взвешенный порядок путем одновления поля Weight в таблице AutoComplete, которое резервировано для использования вами. Ннапример, вы можете указать код в событии Valid для элемента textbox, который обновит поле Weight на основе частотного анализа, в результате чего наиболее последние входы получать большее значение веса.

Пример: отсутствует.

AutoCompSource.

Определяет поле Source в таблице, в которой будет фиксироваться текст для обеспечения функциональности схемы auto-completion в элементе управления Textbox. Read/write в design и run time.

cTextbox.AutoCompSource [= cValue]

Возвращаемое/устанавливаемое значение - cValue - представляет собой имя поля в таблице auto-completion, ассоциированной с элементом textbox.

Примечание
Применяется к элементу управления TextBox (Visual FoxPro)

Определяет имя Source используемое для поиска данных в таблицеAutoComp. Это поле является регистро-независимым и хранится как uppercase в таблице AutoComp.

Когда вход записан или прочтен из таблицы AutoComp, то используется ключ, который является полем Source.(?) По-умолчанию, если это свойства не указано, тогда имя элемента textbox становится ключевым значением в этом поле таблицы AutoComp.

Вы можете написать приложения, которые используют одну и ту же таблицу AutoComp, которая поставляет значения для нескольких элементов textbox внутри одного и того же приложения.

Пример
Например, вы можете иметь много форм, которые используют поле Address. Установкой свойства AutoCompSource в “myAddress” для каждого элемента textbox, которые отображает адресное поле, вы можете многократно использовать входы в таблице AutoComp по всему приложению.

Синтаксис:

AddressForm.AddressText1.AutoCompSource = 'myAddress'

AutoCompTable

Указывает имя и местонахождение таблицы, которая будет хранить данные, используемые элементоv Textbox для предложения величин, основанном на ранее введенных значениях.

Textbox.AutoCompTable [ = cValue]

Возвращаемое/устанавливаемое значение - cValue - определяет имя и путь к таблице, обеспечивающей отображение list ранее использованных входов в элементе textbox.

Примечание
Применяется к элементу управления TextBox (Visual FoxPro)

По умолчанию путь и имя для этого свойства равны HOME(7) + “Autocomp.DBF”. Если вы введете имя для таблицы, которой еще не существует, последняя будут автоматически создана.

Пример

AddressForm.Text1.AutoCompTable = 'c:\myApp\AutoComp.DBF'
Автодополнение в реальной жизни.

Тренируемся, ничтоже заботясь пока о том, где эта таблица находится. Вводим в форму для элемента Textbox и даем им имена "postindex" и"city". Прописываем свойства для введенных Textbox в окне PEM.

Теперь запускам форму и вводим несколько значений в оба блока, чтобы получить какие-то входа в списках. Имеем:

Ищем таблицу. По-умолчанию она располагается в скрытом каталоге, путь к которому получаем, благодаря ссылке в справке, по Home(7) - у меня на этой машине ее путь равен: C:\Documents and settings\Administrator\Application data\Microsoft\Visual FoxPro 9\Autocomp.dbf. Поскольку я не указывал ее в свойствах элементов, то она была создана автоматически и содержит следующие данные:

Естествено интересует, как отнесется VFP к вставке данных в таблицу Autocomp.dbf при использовании выборки из другой таблицы, в случае, если мы не будет заполнять все поля - вес, счетчик, дату создания и модификации. Сделаем выборку:

SELECT distinct postindex AS DATA, ;
   "POSTINDEX" AS SOURCE ;
   FROM partners ;
   INTO CURSOR pindexes ;
   WHERE postindex NOT in ;
   (SELECT postindex FROM autocomp)
APPEND FROM DBF('pindexes')

Все тип-топ. Счетчик и веса сброшены в ноль, а поля создания и модификации пустые. Наверно более грамотно использовать в таком случае функцию Datetime() для этих полей. Но работает и так - смотри результат запуска формы:

Число отображаемых входов в списке устанавливается в Options и имеет ограничение по минимуму - равное 5:

В этом случае список выглядит так:

Вернемся к таблице AUTOCOMP.DBF.
Ниже представлена ее структура:

Structure for table: C:\...\VISUAL FOXPRO 9\AUTOCOMP.DBF Number of data records: 12 Date of last update: 06/07/04 Memo file block size: 64 Code Page: 1251
Field Field Name Type Width Dec Index Collate Nulls Next Step
1 SOURCE Character 20       No    
2 DATA Character 254       No    
3 COUNT Integer 4       No    
4 WEIGHT Integer 4       No    
5 CREATED DateTime 8       No    
6 UPDATED DateTime 8       No    
7 USER Memo 4       No    
** Total ** 303

Таблица имеет индекс:

           тип: regular
           тэг: Data
упорядочивание: по возрастающей
     выражение: source+UPPER(LEFT(data,30))+PADL(count,8)
       collate: machine
        filter: NOT DELETED()
триггеры и правила отсутсвуют

Если учитывать структуру таблицы, то тогда предварительное заполнение для известных полей может осуществляться последовательно выборкой в курсор и занесением в таблицу автодопления данных выборки. Тогда корректный синтаксис для такой операции может выглядеть так:

LOCAL ldDateTimeStamp
ldDateTimeStamp=DATETIME()

SELECT distinct ;
   postindex AS DATA, ;
   "POSTINDEX" AS SOURCE, ;
   0 AS COUNT, ;
   0 AS WEIGHT, ;
   ldDateTimeStamp AS created, ;
   ldDateTimeStamp AS updated ;
   FROM partners ;
   INTO CURSOR pindexes ;
   WHERE postindex NOT in ;
   (SELECT DISTINCT postindex FROM autocomp)

В данном примере значения почтовых индексов, хранящиеся в поле postindex существующей рабочей таблицы PARTNERS выбираются как поле DATA таблицы AUTOCOMP, имя используемого элемента Textbox - как строка для поля SOURCE таблицы AUTOCOMP, значения для полей COUNT и WEIGHT таблицы AUTOCOMP выбираются как нули, а значения для полей CREATED UPDATED таблицы AUTOCOMP определяет локальная переменная ldDateTimeStamp, со значением, возвращаемым функций DATETIME()

В случае, если мы хотим предоставить пользователю уже готовую таблицу автодополнения, мы должны определить для нее имя и указать его в свойствах AutoCompTable тех элементов Textbox, для которых мы желаем обеспечить функциональность автодополнения. Естественно, что такая таблица должна быть включена в проект

Будет продолжено...

Cелектор для быстрого перехода на сайты, связанные с Visual FoxPro.