:: Visual Foxpro, Foxpro for DOS
Старые приемы
boba

Сообщений: 6269
Откуда: Медвежьи озера-
Дата регистрации: 26.03.2001
Была проведена серьезная реорганизация базы данных,
менялись размерности полей и прочее.
Пришлось влезать в чужие проекты , написанные ушедшими коллегами
с использованием copy to, total, relation
Текстов немеряно, меню самописное, документации ноль.
Постоянные установки set step on , необходимость
проверять, что лежит в открываемых грязных таблицах после
этих самых copy to, total. Всех тах мест десятки , если не сотни.
Форм море ( и модальных), хотя они отличаются мизером,
те никакого ООП, зато полно параметризации за счет &
Замучился отлаживаться и править, и вспомнил то, чему учился на заре работы с фоксом
А именно, возможности делать brow на открытые алиасы. При работе модальной формы особо
в командное окно не пойдешь, да и алиасов открытых несколько, нужно выбрать нужный, посмотреть и вернуться назад.
Узнать имя файла формы на экране, поставить где попало set step on на лету,
меню то задачи, а не фоксовое, узнать источник алиаса итд
Тривильщина, но в описываемом случае весьма полезная, когда толком не знаешь,
что ищешь в чужой программе.
В головной программе написал.
Разборка авгиевых конюшен ускорилась в разы.
ON KEY LABEL ALT+F12 do showformname
ON KEY LABEL ALT+F11 do makebrow
ON KEY LABEL ALT+F10 do showdbf
ON KEY LABEL ALT+F9 DEBUG
_____________________
function makebrow
lcoldalias = Alias()

jklj = Aused(_www)
_capt = ''
For jjjj = 1 To jklj
_capt = _capt + _www[jjjj,1] + ' '
Endfor
_capt = Alltrim(_capt)
lctabl = Inputbox('Выбери алиас',_capt, IIF(not EMPTY(lcoldalias),lcoldalias,''))
If Not Empty(lctabl) And Used(lctabl)
Else
lctabl = Alias()
Endif
If Not Empty(lctabl)
Select (lctabl)
Browse
Endif
If Not Empty(lcoldalias)
Select (lcoldalias)
Endif
************************************
function showdbf
IF NOT EMPTY(ALIAS())
MESSAGEBOX(ALIAS()+'-'+dbf(alias()),'')
endif
*********************************************************
function showformname
IF TYPE('_screen.activeform') = 'O'
= MESSAGEBOX('Ôîðìà '+SYS(1271, _screen.activeform))
endif
Ratings: 0 negative/0 positive
Re: Старые приемы
akvvohinc

Сообщений: 4224
Откуда: Москва
Дата регистрации: 11.11.2008
Если внутри функций не отменять (а в конце восстанавливать) ту комбинацию (а лучше все), которая вызвала эту функцию, то всегда есть шанс получить ошибку:
Allowed DO nesting or expression evaluation level exceeded.

Конечно, при отладке это не слишком важно, но всё же...

PS
Я как-то "внедрялся" в работу чужого EXE таким же способом - автор забыл в начале проги гасить ON KEY LABELы, и я задавал их снаружи.
Ratings: 0 negative/0 positive
Re: Старые приемы
boba

Сообщений: 6269
Откуда: Медвежьи озера-
Дата регистрации: 26.03.2001
Я собственно в начале спросил все
on key что там были и выбрал отсутсnвующие
в brow до него запомнил алиас, и если он был,
возвращался к нему.
Ratings: 0 negative/0 positive
Re: Старые приемы
akvvohinc

Сообщений: 4224
Откуда: Москва
Дата регистрации: 11.11.2008
boba
в brow до него запомнил алиас, и если он был,
возвращался к нему.
Я писал о сбросе клавишной комбинации, вызвавшей функцию, в начале этой функции и ее восстановлении в конце, то есть командах:
PUSH KEY CLEAR
POP KEY
Их отсутствие может привести к рекурсивному вызову этих функций и, как следствие, ошибке.
Ratings: 0 negative/0 positive
Re: Старые приемы
Каратаев
Автор

Сообщений: 3977
Откуда: Алматы
Дата регистрации: 04.12.2001
Кстати, полезная штука иногда даже в своих программах покопаться. Так сказать, вычислить "косяки".
Только вот у меня по ON KEY LABEL не прокатит, поскольку в некоторых формах эти комбинации клавиш используются. Поэтому весь код вынес в тулбар, который активируется только под моим логином и паролем, т.е. только для меня.
И натолкнулся ещё на то, что список открытых алиасов в некоторых случаях не вмещается в надпись на Inputbox...
Немного переделал и вывожу их (алиасы) в меню (это код кнопки тулбара):
PROCEDURE cmd2.click
lcoldalias = Alias()
lctabl = ""
define popup menu_brow FROM 4,50 MARGIN SHORTCUT
jklj = Aused(_www)
For jjjj = 1 To jklj
DEFINE BAR jjjj OF menu_brow PROMPT _www[jjjj,1] MARK CHR(3)
ON SELECTION BAR jjjj OF menu_brow store PROMPT() to lctabl
ENDFOR
ACTIVATE POPUP menu_brow
If Not Empty(lctabl) And Used(lctabl)
Else
lctabl = Alias()
Endif
IF LASTKEY()=27
lctabl = ""
ENDIF
If Not Empty(lctabl)
Select (lctabl)
Browse
Endif
If Not Empty(lcoldalias)
Select (lcoldalias)
Endif
ENDPROC


------------------
Никогда не бывает настолько плохо, чтобы не могло быть еще хуже.




Исправлено 1 раз(а). Последнее : Каратаев, 29.12.21 10:10
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 26 PuMa  (Гостей: 25)

© 2000-2024 Fox Club 
Яндекс.Метрика