On-line: гостей 1. Всего: 1 [подробнее..]
АвторСообщение



Пост N: 4
Зарегистрирован: 30.05.11
ссылка на сообщение  Отправлено: 31.05.11 20:35. Заголовок: SET KEY TO как передать аргумент в вызывающую функцию


Есть три базы с одинаковой структурой, например справочник областей, районов и населенных пунктов. Базы создаются из программы и заполняются пользователем, поэтому выбор наименований баз за программистом. Пусть это будут базы: sprav1.dbf, sprav2.dbf, sprav3. dbf с единственным полем name character 20
Есть get поле, в которое надо ввести адрес, используя вышеупомянутые справочники
по SET KEY K_F1 TO address надо вызвать первый справочник, выбрать нужную запись и добавить к тому, что уже есть в get поле (возможно набранное какое-то значение вручную до вызова справочника, а возможно и пустое значение)
по SET KEY K_F2 TO address надо вызвать второй справочник, выбрать нужную запись и добавить к тому, что уже есть в get поле
по SET KEY K_F3 TO address надо вызвать третий справочник, выбрать нужную запись и добавить к тому, что уже есть в get поле
В get поле данные из справочников надо заносить в разных форматах, например:
область - район - населенный пункт
населенный пункт - район - область
район - населенный пункт - область
...
Поскольку справочник ведется пользователем, то после вызова справочника и ненахождения нужного значения пользователь здесь же добавляет (изменяет, удаляет, ...) нужное значения. То есть процедура ADDRESS будет объемная. И создавать три процедуры (ADDRESS1, ADDRESS2, ADDRESS3) нецелесообразно. Нужно из SET KEY в процедуру передать 1, 2 или 3 и в зависимости от этого значения в процедуре использовать базу sprav1. sprav2 или sprav3 соответственно.
Вопрос: каким способом передать?
SET KEY K_F1 TO address(,,,1) вместо 1 передается NIL
Запрос из программы какой справочник выбрать не предлагать.
Реализовал циклический перебор справочников по единственной команде SET KEY K_F1 TO address, но очень неудобно, так как справочники в разных случаях нужно использовать в разных порядках (пример с областями, районами и населенными пунктами условный)

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 7 [только новые]


Администратор




Пост N: 1959
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 01.06.11 08:32. Заголовок: SergeyKorotun пишет:..


SergeyKorotun пишет:

 цитата:
Вопрос: каким способом передать?



Не просто, а очень просто

Вместо команды

SET KEY K_F1 TO address(,,,1)

надо вызвать функцию

setkey(K_F1, {|p, l, v| Address(p, l, v, 1)})


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 10
Зарегистрирован: 30.05.11
ссылка на сообщение  Отправлено: 01.06.11 19:43. Заголовок: Спасибо, вызывается ..


Спасибо, вызывается по Ф1 первый справочник, по Ф2 - второй, по Ф3 - третий.
Для отображения справочников используется dbedit
В самих справочниках используются функциональные клавиши Ф2-добавить запись в справочник, Ф3-редактировать, Ф4 - удалить запись и некоторые другие. Ф1 не используется.
Так вот при вызове справочника по Ф1 все как и надо, а при вызове по Ф2 справочник разворачивается и одновременно срабатывает функция по добавлению новой записи, как вроде бы пользователь нажал клавишу Ф2(добавления записи). Аналогично вызывая справочник по Ф3 первая запись уже ждет редактирования, как вроде бы пользователь нажал клавишу Ф3(редактирования записи).
Куда только не вставлял что-то типа (keyboard chr(32) inkey(0)), правильной работы не добился. Или справочник открывается нормально, но несрабатывают клавиши Ф2 и Ф3 для изменения справочника или начинают срабатывать только после нажатия Ф4 и сразу ж ESC(отмена удаления)

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 193
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 01.06.11 19:47. Заголовок: SergeyKorotun пишет:..


SergeyKorotun пишет:

 цитата:
Спасибо, вызывается по Ф1 первый справочник, по Ф2 - второй, по Ф3 - третий.


Как вариант для вызова справочников назначить alt-f1, alt-f2, alt-f3

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 12
Зарегистрирован: 30.05.11
ссылка на сообщение  Отправлено: 01.06.11 20:36. Заголовок: AlexMyr пишет: Как ..


AlexMyr пишет:

 цитата:
Как вариант для вызова справочников назначить alt-f1, alt-f2, alt-f3


а если у меня будет 32 функции SETKEY()?
Если все же не удастся использовать одинаковые клавиши, то через Alt назначу клавиши редактирования базы, значительно реже будут использоваться, чем вызов справочника.
Но пару дней подожду, может у кого-то появятся какие-то решения

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 194
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 01.06.11 20:48. Заголовок: У себя в старой прог..


У себя в старой проге в бровсе сделал по enter вызов меню:
добавить, редактировать ...
Одна клавиша - много действий. (на любителя)

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 195
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 01.06.11 21:07. Заголовок: Еще как вариант fun..


Еще как вариант

func Address(p, l, v, 1)
setkey(K_F1, )
назначаем setkey для dbedit
...
очищаем setkey после dbedit
setkey(K_F1, {|p, l, v| Address(p, l, v, 1)})
return

т.е. при входе в функцию очищаем K_F1, на выходе вновь назначаем.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 12
Зарегистрирован: 20.04.07
ссылка на сообщение  Отправлено: 02.06.11 07:45. Заголовок: Сохранять и восстанавливать значения SETKEY



setkey(K_F1, {|p, l, v| Address(p, l, v, 1)})
setkey(K_F2, {|p, l, v| Address(p, l, v, 2)})
setkey(K_F3, {|p, l, v| Address(p, l, v, 3)})
setkey(K_F4, {|p, l, v| Address(p, l, v, 4)})


function Address(p, l, v, n)

local aSave[12]

aSave[02] := SETKEY(K_F2 , NIL); SET KEY K_F2 TO Add_Record()
aSave[03] := SETKEY(K_F3 , NIL); SET KEY K_F3 TO Edit_Record()
aSave[04] := SETKEY(K_F4 , NIL); SET KEY K_F4 TO Del_Record()

// Тело функции - чего-то делаем

SETKEY(K_F2 , aSave[02])
SETKEY(K_F3 , aSave[03])
SETKEY(K_F4 , aSave[04])

return nil



Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 294
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет