FoxPro Club Главная

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

Когда нужно занести значение в поле основной таблицы из справочника (небольшого) вызов этой (простой) процедуры поможет Вам.


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


Справочник в меню Shortcut

* Создает меню из поля базы данных и возвращает текст выбранной опции меню
* Вызов функции:
* MYMENU(cFieldName [,cAliasName] [,lMous])
* Параметры:
* cFieldName - наименование поля базыданных
* cAliasName - псевдоним базы данных
* lMouse - Использовать координаты мыши
* База данных должна быть открыта
PARAMETERS _mFieldName, _mAliasName, _mMouse
_mVib=""
IF _mMouse
DEFINE POPUP _mMenu SHORTCUT RELATIVE FROM ROW(),COL()
ELSE
DEFINE POPUP _mMenu SHORTCUT RELATIVE FROM MROW(),MCOL()
ENDIF
DO CASE
CASE PARAMETERS()=3
SELECT (_mAliasName)
COPY TO ARRAY _aArray FIELD (_mFieldName)
FOR _i=1 TO ALEN(_aArray,1)
DEFINE BAR _i OF _mMenu PROMPT ALLTRIM(_aArray(_i,1))
ON SELECTION BAR _i OF _mMenu _mVib=PRMBAR("_mMenu",BAR())
ENDFOR
CASE PARAMETERS()<3
COPY TO ARRAY _aArray FIELD (_mFieldName)
FOR _i=1 TO ALEN(_aArray,1)
DEFINE BAR _i OF _mMenu PROMPT ALLTRIM(_aArray(_i,1))
ON SELECTION BAR _i OF _mMenu _mVib=PRMBAR("_mMenu",BAR())
ENDFOR
ENDCASE
ACTIVATE POPUP _mMenu
RETURN _mVib
 
Сделайте оценку этого решения Плохо Удовлетворительно Так себе Хорошо Отлично Текущая оценка: (4.959)
Дополнения пользователей
Справочник в меню Shortcut
[+][?]
Перминов Игорь
16.01.03 06:37:34

Здорово!!!
Oleg Mamonov
28.03.03 15:57:00

Слишком усложнено (по моему). приведу более простой код (без изменений из моей программы)

DEFINE POPUP shortcut shortcut RELATIVE FROM MROW(),MCOL()
DEFINE BAR 1 OF shortcut PROMPT "ЧЧЧЧЧЧЧ"
DEFINE BAR 2 OF shortcut PROMPT "\-"
DEFINE BAR 3 OF shortcut PROMPT "ЩЩЩЩЩЩЩЩ"
DEFINE BAR 4 OF shortcut PROMPT "\-"
SELECT r_stat
FOR i=1 TO RECCOUNT()
  GO i
  IF id_region=REGION.ID
    cStr="define bar "+STR(i+4)+" of shortcut prompt ["+DTOC(r_stat.pass_data)+"]"
    &cStr
    cStr="on selection bar "+STR(i+4)+" of shortcut do progs\activate_set with PROMPT()"
    &cStr
  ENDIF
ENDFOR

ON SELECTION BAR 1 OF shortcut DO form forms\ref_region
ON SELECTION BAR 3 OF shortcut DO progs\new_passport

ACTIVATE POPUP shortcut

Можно оформить в функцию. И самое главное,что не забивает память массивом
Doctor_y
29.03.03 12:22:15

Я поделился идеей. Ваше право как этот кусок кода модифицировать. А насчет занятой массивом
памяти, это не проблема, с памятью, как известно, обмен гораздо быстрее. Я не видел никогда ошибки
недостатка памяти, даже когда начинал писать на Fox2.0, еще на ЕС1841, все изменения записей делал
в массивах, а потом переносил в dbf, база данных (таблица) открывалась на момент внесения
изменений. Этот метод с лихвой окупался целостностью dbf-файлов на случай сбоя питания. Если Вы
работали с FoxDOS, то помните, что из нескольких тысяч записей при сбое питания могут остаться
единицы.  У каждого свой метод программирования. Насчет функции, Vfp одинаково обработает вызов DO
myproc WITH listParameters и =myproc(listParameters), только функцию он буден искать по очереди в
текущем файле, в процедурном файле, а затем в файле с название функции.
Эта функция позволяит практически моментально накатать простое журнальное приложение с
использованием справочников.
Oleg Mamonov
08.04.03 12:03:32

Захламление памяти в фоксе явление, к сожалению не редкое. Я достаточно долгое время работаю в
сотрудничестве с заграничными разработчика программ и вот у них такие проблемы возникали и не раз.
Это, кончено, не касается массивов, но все же. Есть некоторые функции, которые фокс не совсем
корректно выполняет. Я ни в коей мере не осуждаю ваше видение в решении этого вопроса и не
собираюсь вас критиковать, просто я предложил другой вариант. А еще один вариант, который работает
намного быстрее - это использование SELECT. Удачи. Пишите. 21266@mail.ru ICQ# 94393979
[Дополнить]



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