3 Мб

Сентябрь 2011

 


Супер простые кнопки с использованием GDI+X + Icons
Бернар Бут (Bernard Bout)

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

Создание отчетов в PDF формате - FoxyPreviewer последние новости
Сезар Шалом (Cesar Shalom)


Недавно вышла версия 2.38, описание которой и код можно найти по ссылке http://foxypreviewer.codeplex.com/releases или на диске, сопровождающем журнал.

Коллекции вместо массивов
Класс Collection обеспечивает очень легкий способ работы с группами объектов.
Тамар Е. Гранор, д-р философии (Tamar E. Granor, Ph.D.)

Каждый процедурный язык программирования, который я использовала до появления СУБД FoxBase+, предлагал массивы как способ хранения упорядоченной коллекции данных. Поэтому, когда я начала изучать FoxBase+, наличие массивов в языке программирования этой СУБД было для меня логичным. Фактически, самой первой из всех когда-либо опубликованных мной в Fox- журналах статей была статья о массивах.
Массивы в среде Fox, отличались от тех, которые я использовала раньше, в двух отношениях. Во-первых, в большинстве языков, с которыми мне довелось работать, предлагались массивы неограниченной размерности. В среде FoxBase+ обрабатывались только одно- и двумерные массивы, что по-прежнему справедливо для среды VFP. Хотя это ограничение является весьма чувствительным, я научилась его обходить.
Во-вторых, языки, которыми я пользовалась ранее, были языками со строгой типизацией, поэтому во всех элементах массива должны были храниться данные одного типа. Язык Fox – это язык со слабой типизацией, и он не выдвигает такого требования. Поэтому в массивах очень удобно хранить копии записей, а также другие данные, организованные по типу записей (например, данные о файлах, возвращаемые функцией ADIR()).
Со временем функциональность, обеспечивающая работу с массивами, была существенно доработана. Давным-давно была добавлена группа функций, которые облегчают обработку массивов; в их число входят функции ASCAN() и ASORT() для поиска и сортировки, функция ACOPY() для копирования всего массива или его части, а также функции AINS() и ADEL() для добавления и удаления данных в середине массива.
Кроме того язык VFP обзавелся несколькими функциями, которые позволяют извлечь какие-то данные и запомнить их в массиве. Например, функция AFIELDS() позволяет поместить в массив список полей таблицы, функция APRINTERS() обеспечивает заполнение массива списком доступных принтеров, а функция AMEMBERS() используется для извлечения списка свойств, событий и методов объекта и запоминания этих данных в массиве. Есть также команды, которые используются для перемещения табличных данных прямо в массивы и из них. (Подробную информацию о работе с массивами и предназначенными для этого функциями ищите по адресу http://www.tomorrowssolutionsllc.com/Materials/arrays.html.)
При наличии всех этих возможностей массивы являются ценным представителем арсенала средств VFP. Однако, добавление базового класса коллекций в версии VFP 8 предлагает альтернативный способ для обработки некоторых групп данных. В частности, коллекции – это гораздо более естественный способ для организации группы связанных между собой объектов, нежели массивы.

Введение в GDIPlusX, часть I
Дуг Хенниг (Doug Hennig)


GDIPlusX – это проект, разрабатываемый в рамках инициативы VFPX; он открывает для VFP-приложений доступ к графическому интерфейсу GDI+, который представляется в виде набора библиотек VFP-классов. Проект GDIPlusX облегчает встраивание в ваши приложения новых возможностей для работы с графикой, позволяя тем самым создавать более современный пользовательский интерфейс с более мощной функциональностью. Эта статья начинает серию публикаций и служит введением в проект GDIPlusX, в ней рассматриваются основы интерфейса GDI+, классы, реализованные в библиотеке GDIPlusX, а также приводятся различные примеры того, как эту библиотеку можно использовать в приложениях VFP.
Интерфейс GDI+ – это та часть операционной системы Windows, которая отвечает за отображение информации на устройствах, таких как экраны и принтеры. Как подсказывает название, этот интерфейс является преемником графического интерфейса прикладного программирования API (Graphics Device Interface, GDI), входившего в ранние версии ОС Windows.
Интерфейс GDI+ позволяет разработчикам выводить данные на устройство отображения, не беспокоясь о конкретных деталях работы с этим устройством. Разработчик обращается к методам классов интерфейса GDI+, а они в свою очередь выполняют соответствующие обращения к конкретным драйверам устройств. Интерфейс GDI+ изолирует приложение от графической аппаратуры, и эта изоляция позволяет разработчикам создавать аппаратно-независимые приложения.
Хотя прикладной интерфейс GDI+ хорошо документирован, обращение к нему из VFP-приложений может оказаться довольно сложным делом, поскольку приходится заботиться о таких вещах, как дескрипторы (handles) для каждого используемого объекта. К тому же, прикладной интерфейс API состоит из обращений к функциям, тогда как большинство VFP-разработчиков предпочитают работать с объектами. К счастью, три опытных VFP-разработчика, – Крег Бойд (Craig Boyd), Бо Дурбан (Bo Durban) и Цезарь Шалом (Cesar Chalom), – не пожалели времени и сил на то, чтобы создать набор классов-оболочек для классов интерфейса GDI+. Этот набор классов-оболочек называется GDIPlusX.

Представление класса SSButton
Жун Тангунан (Jun Tangunan)


Как ни странно, после создания класса SSDTPicker, я сразу же перешел к работе с классом SSTBNextGen. Исходный класс с 7 темами был готов через несколько часов, и полагаю, теперь вы знаете, как быстро я работаю, когда настроюсь что-то сделать и, конечно, когда меня не отвлекают. А еще, я в тот же день начал возиться с интерфейсом GUI для класса SSButton, который также собирался доделать и собрать очень нужный стандартный выполняемый exe-модуль VFP. Интерфейс GUI и этот класс были готовы на следующий день.

Обычно, на этом я бы и остановился, чтобы немедленно сделать запись в дневнике и поделиться замыслами, не заботясь об их дальнейшем развитии. Почему? Это просто примеры, которые могут быть дополнены заинтересованными пользователями. Фактически, большая часть того, что я предлагаю, – это только идеи и принципы, за исключением некоторых инструментальных средств, вроде Live Backup.

Но поскольку я получил весьма одобрительные отклики на 3 моих последних класса, то решил и обещал предоставить вам кое-что получше, а не одни только идеи или руководящие указания. И поэтому я пока придержал оба класса, SSTBNextGen и SSButton, у себя, чтобы продолжить их тестирование и развитие. Доработку этих двух классов я завершил 14 декабря, а класс SSTBNextGen и эту запись в блоге создал на самом деле 15-ого.

Тем не менее, я отложил публикацию этих двух записей в блоге, поскольку решил преподнести заинтересованным пользователям класс SSTBNextGen в качестве моего предрождественского, а рассматриваемый класс в качестве предновогоднего подарка. Плюс, я должен опубликовать обещанный «filler», которым является OptionSwitch.

Как видно по моему классу SSTBNextGen, сейчас он стал лучше. Впрочем, вы еще удивитесь тому, что может делать этот класс одной кнопки, поскольку я потратил массу усилий на то, чтобы сделать его очень универсальным. Не в смысле программирования, впрочем, поскольку я могу найти способы использовать только пару предыдущих классов и, однако же добиться желаемого; но в «придумывании» того, что еще можно сделать.

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


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

К архивам

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

Hosted by uCoz