60 K

Январь 2012

 


Переполнение стека Visual FoxPro
Переполнение в стеке идей, который включает программные компоненты, образующие экосистему Visual FoxPro.
Кен Леви (Ken Levy)


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

Обработка нескольких экранов в настольных приложениях Visual FoxPro
Рик Страл (Rick Strahl)
При создании настольных приложений я часто сохраняю последнее положение окна в некотором хранилище конфигурации. При следующем запуске приложения можно восстановить окно в его предыдущем положении.
Однако, если используются несколько мониторов, то попытка восстановить предыдущее положение окна при отключенном мониторе, может оказаться, что окно располагалось на нем и теперь не видно.


Калькулятор возраста
Рик Боруп (Rick Borup)

Калькулятор возраста - класс Visual FoxPro для расчета возраста человека в годах, месяцах и днях.

Прекерченнуый тксет легко читается
Рик Боруп (Rick Borup)

Считается, что человек способен достаточно легко прочесть перекрученный текст, если переставлены только буквы внутри слова, а крайние остались на месте.

Просто для удовольствия я написал класс, назвал его JumbleTron и он способен перекрутить любой блок текста. По умолчанию, класс работает с блоками размером 4K или меньше, но вы можете увеличить это значение.

Использовать класс просто: инициализируете объект JumbleTron и передаете ему некоторый текст в метод GetJumbledText. Например, копируем текст в буфер, затем в окне команд выполняем следующее.

ox=NEWOBJECT( "jumbleTron", "jumbleTron.prg")
?ox.GetJumbledText( _cliptext)

Или, возвращаем перекрученный текст в буфер:

_cliptext = ox.GetJumbledText( _cliptext)


Задание на печать своими силами
Лайза Слэйтер Николлз (Lisa Slater Nicholls)

VFP обрабатывает выполнение одной команды REPORT FORM или набора этих команд, объединенных в цепочку с помощью опции NOPAGEEJECT, как одно задание на печать – но иногда по ходу выполнения отчета хотелось бы послать на принтер дополнительные команды. Лайза Слэйтер Николлз (Lisa Slater Nicholls) демонстрирует, как можно использовать некоторые расширенные возможности системы подготовки отчетов версии VFP 9.0, чтобы решить эту распространенную задачу, а также другие подобные задачи, с помощью задания на печать, которое вы формируете сами.

В предыдущей статье, где речь шла о генерации PDF-файлов (статья «Мощь PDF для всех» была опубликована в нашем журнале в марте 2006 года), я сказала, что в моем пользовательском классе Reportlistener использована некоторая «особая магия» для сохранения и восстановления настроек принтера. В двух защищенных (protected) методах, LoadPrinterInfo()и UnloadPrinterInfo(), класса PDFListener я использовала дополнительные возможности обращения к функции SYS(1037,2) и SYS(1037,3), предоставленные в версии VFP 9.0, и рекомендовала быть внимательными при вызове этих методов и соблюдать правильную очередность операций «вталкивания» («push») и «выталкивания» («pop») при сохранении и восстановлении текущего окружения принтера в среде VFP.
Есть и другие сценарии, в которых лучше не переусердствовать, манипулируя окружением принтера в среде VFP. Вместо этого вам, может быть, захочется самостоятельно сформировать все задание на печать в целом и уже в него отправлять содержимое отчета. В этой статье я буду использовать все три новых варианта обращения к функции SYS(1037), которые обеспечивает версия VFP 9.0, а также несколько очень простых обращений к интерфейсу Windows API, чтобы организовать обработку стандартного требования о предоставлении возможностей для переключения лотка принтера, для изменения ориентации страниц или других параметров печати в промежутке между печатью отдельных страниц отчета.
Перед тем, как начать, позвольте заверить вас, что я не являюсь C++-программистом. Когда я говорю «очень простые обращения к интерфейсу Windows API», то и имею в виду «очень простые». Чтобы добиться означенного результата, необходимо разобраться в том, что делает ядро VFP, и что пытаетесь сделать вы в своем VFP-приложений, а не в том, как работает операционная система Windows.


Возврат на основную страницу

К архивам

© Edel Ltd. Все права защищены. 2012 г.

Hosted by uCoz