FoxPro Club Главная

Конференция Решения Фотоальбом Сайт М.Дроздова Статьи Файловый архив Книга Visual FoxPro 9.0 Русский Help для Visual FoxPro
Пользователей: 9212
Вход
Класс для автоинкрементного поиска в гриде

Класс для автоинкрементного поиска в гриде с использованием Label в качестве элемента псевдоввода


 
Прислал: Crispy   Категория: Интерфейс


Номера полей, по которым осуществляется поиск, передаются в экземпляр класса, помещаемый на форму, через его свойство Tag - либо непосредственно при макетировании формы, либо в дальнейшем - программным путем, что дает дополнительную возможность подменять поля для поиска в процессе работы. Первым при занесении указывается номер числового поля, далее через запятую - номер символьного. При отсутствии необходимости в числовом, нужно обязательно указывать 0. Т.е. например так: 0,2 - поиск будет осуществляться только по второму символьному полю.
Тип поля для числового идентификатора (C или N) автораспознается.
Т.е., при использовании поля для хранения каких-либо индивидуальных числовых идентификаторов, его обычно всегда делают типа "C", т.к. это упрощает работу со всеми идентификаторами, начинающимися на "0". Соответственно для поиска в таком поле идентификаторов, начинающихся на "0" - вначале всегда необходимо вводить нужное количество нулей, стоящих слева перед цифрами.
Для полей же, хранящих какие-либо номера с типом "N" - для поиска необходимо сразу же вводить первые цифры искомого номера (без пробелов перед ними).
Т.е. здесь соблюден давно принятый и вполне стандартный подход, и само пояснение разницы ввода предназначено собственно лишь для начинающих. :) В прилагаемом к классу примере эту разницу можно вполне наглядно увидеть для полей 1 и 3.
В качестве дополнительного удобства при использовании добавлен автоматический "перевод" всех нажатий на клавиатуру сразу в русские символы без необходимости переключений раскладки. Т.е. независимо от раскладки ввод поискового предложения будет осуществлен на кириллице. При отсутствии подобной необходимости это можно легко убрать, либо изменить - в методе KeyPress данного класса, открыв его на модификацию.
Нажатие клавиши пробела - очищает строку ввода, и переводит указатель записи в начало таблицы.
Также в качестве дополнительного удобства использования класса - в поле Comment экземпляра класса, либо сразу при макетировании, либо программно, можно вставлять (как символьную строку) имя любого своего метода, который должен будет выполняться при нажатии клавиши Enter или же двойном клике на выбранной строке грида. Разумеется имя должно быть правильным в отношении пути вложенности (если оно указано относительно грида через Parent), либо же, что зачастую проще - абсолютным адресом - т.е. указанным относительно непосредственно самой формы, скажем какой-нибудь метод thisform.object1.MyMethod(), который производит действия с участием данной строки.
Вместо метода также может быть вставлена и любая исполняемая строка. Например во вложенном примере это может быть включение свойства Enabled текстбоксов, что справа от грида, в .T. - для возможности редактирования выбранной строки.
Дополнительно реализовано перекрашивание грида при потере им фокуса. Т.е. когда фокус находится на другом объекте - и грид, и его полоса выделения имеют более темный цвет. При этом поиск естественно производиться не может, что и демонстрирует пользователю потемневший грид. При возвращении же фокуса - через клик по гриду, либо клавиатурой через табуляцию, либо как-то программно - грид становится вновь более яркого цвета, визуально показывая пользователю, что поиск теперь снова возможен.
При этом, поскольку показ поискового предложения реализован через label, нет необходимости кликать именно по поисковой строке.
Вообще говоря, сделанная конкретно таким образом перекраска грида не совсем красива, я приделал сюда ее скорее лишь для демонстрации большей, на мой взгляд, наглядности такого способа - т.е. когда пользователю визуально намного более очевидно, что объект без фокуса в данный момент "не работает", пока по нему не кликнешь. В реальных же проектах я обычно помещаю все объекты, требующие показа неактивности объектов в данный момент - в контейнеры на базе специально сделанного класса. Поскольку через контейнер показ потери активности объектов можно осуществлять и более универсально, к тому же более красивым и простым путем. Но пристегивать к данному классу какой-то другой с различными наворотами, не относящимися к демонстрируемому, мне показалось излишним. Отсюда и простейшим образом организованная данная перекраска грида.
Ну и еще одна совсем небольшая фича, на мой взгляд также достаточно удобная - в метод MiddleClick грида вставлен вызов звукового сигнала встроенного динамика компьютера. Что бывает удобно для случаев, когда у пользователей например нет звуковых колонок. Звук с помощью данного метода можно вызывать и из любого другого объекта путем передачи в качестве параметра частоты звука, т.е. например так: thisform.GridFinder1.MiddleClick(5000). В частности, по стандартно сложившемуся подходу, например при вызове этого метода 2-3 раза с разными частотами можно более эффективно привлекать внимание пользователя к выводу какой-либо важной информации на экран.
 
Сделайте оценку этого решения Плохо Удовлетворительно Так себе Хорошо Отлично Текущая оценка: (2.429) Вложение [13.73]kb
Дополнения пользователей
Класс для автоинкрементного поиска в гриде
[+][?]



© 2000-2017 Fox Club 
При размещении любых материалов с сайта на других ресурсах- прямая ссылка на www.foxclub.ru обязательна
Яндекс.Метрика