Оглавление Благодарности 1
Предисловие 2
Кому адресована эта книга 3
ЧАСТЬ I. БАЗОВОЕ ПРОГРАММИРОВАНИЕ В VISUAL FOXPRO 5
Глава 1. Введение в Visual FoxPro 7
Элементы языка 8
Команды 8
Литералы и константы 9
Переменные и массивы 10
Массивы 15
Процедуры и функции 16
Математические, числовые, статистические и битовые функции 19
Символьные функции 19
Выражения и операторы 21
Управляющие конструкции 24
Таблицы, курсоры и базы данных 28
Типы табличных данных 29
Ключевые поля и индексация таблиц 30
Индексация по сложным выражениям и использование хранимых процедур 32
Отношения (связи) между таблицами 34
Целостность данных при модификации связанных таблиц 35
Триггеры и хранимые процедуры 36
Классы и объекты 36
Объектно-ориентированное программирование 36
Типы объектов 37
Свойства объектов 37
События и методы 38
Введение в классы Visual FoxPro 40
Базовые классы 41
Характеристики ООП 44
Инкапсуляция 44
Наследование и подклассы 44
Полиморфизм 45
Стандартные диалоги Visual FoxPro 45
Глава 2. Интерактивная среда разработки приложений (IDE) 47
Главное окно Visual FoxPro 47
Главное окно и его заголовок 49
Главное меню 49
Панель инструментов Standard 51
Окна Command, Properties и Document View 53
Менеджер проекта 56
Мастера, конструкторы и построители 58
Мастера: назначение и области применения 58
Конструкторы как основной инструмент разработчика 60
Построители 61
IntelliSense Manager 61
Применение IntelliSense Manager 61
Настройка параметров 63
Task Pane 64
Toolbox 66
Debugger 67
Вкладка Debug 68
Настройка среды 69
Настройка среды разработки 69
Настройка среды выполнения. Файл Config.fpw 78
Использование справочной документации 80
Глава 3. Проектирование приложений 81
Менеджер проекта и определение структуры приложения 81
Вкладка Projects — проекты 82
Компоненты приложения (типы файлов), их размещение 85
Узлы Менеджера проектов 87
Узел Data 87
Узел Documents 88
Узел Class Libraries 89
Узел Code 89
Создание компонентов проекта в Менеджере проектов 90
Главный (стартовый) файл приложения 90
Главная процедура приложения и процедурные файлы 91
Ресурсы 94
Узел Other 94
Исполняемые файлы 95
Создание простого исполняемого модуля 97
Глава 4. Формы 100
Форма как основной компонент приложения 100
Модальные и немодальные формы. Форма верхнего уровня 102
Модальность 102
Типы интерфейса. SDI или MDI? 102
Диалоги 103
Свойства, события и методы экранных форм 104
Создание экранной формы. Конструктор форм 107
Панели инструментов Конструктора форм 114
Панель инструментов Form Designer 115
Панель инструментов Form Controls 116
Панель инструментов Layout 119
Пункты меню Form и Format 120
Размещение на форме элементов управления 122
Использование окна свойств для работы с элементами управления 124
Добавление в форму пользовательских свойств и методов 124
Добавление и редактирование методов 126
Сохранение формы 127
Управление формами 127
Глава 5. Элементы управления 130
Порядок размещения элементов управления на форме 130
Создание элементов управления с помощью Form Controls Toolbar 131
Создание элементов управления через библиотеки классов 132
Создание элементов управления через DataEnvironment 132
Венгерская нотация 133
Список элементов управления 134
CheckBox (Флажок) 135
ComboBox (Комбинированный список) 136
Command Button (Кнопка) 144
Command Group (Группа кнопок) 145
Container (Контейнер) 146
Control 146
Custom 146
EditBox (Редактируемое поле) 146
Form 147
Form Set 147
Grid 148
HyperLink (Ссылка) 149
Image (Графический объект) 149
Label (Этикетка) 150
Line (Линия) 151
List Box (Список) 152
OLEBound Control 153
OLE Control 153
Option Group (Группа переключателей) 153
PageFrame (Набор страниц) 154
Shape (Контур) 154
Spinner (Счетчик) 155
TextBox (Текстовое поле) 155
Timer (Таймер) 159
Toolbar 160
Глава 6. Проектирование баз данных 162
Свободные таблицы 162
Контейнер базы данных 163
Кодовые страницы 164
Нормализация данных 167
Отношение "один-к-одному" 167
Отношение "один-ко-многим" 167
Отношение "много-к-одному" 168
Отношение "много-ко-многим" 168
Ключевое поле 168
Проектирование нормализованных баз данных 170
Первая нормальная форма 172
Вторая нормальная форма 174
Третья нормальная форма 175
Создание и модификация свободных таблиц 177
Создание таблиц с помощью Конструктора таблиц 181
Индексация 184
Регулярные и уникальные индексы 186
Индексация по сложным выражениям и использование хранимых процедур 187
Поиск в индексированной таблице 188
Выбор активного индекса в процессе выполнения 189
Отношения (связи) между таблицами 189
Создание таблицы программным способом 191
Создание и модификация баз данных 193
Создание базы данных с помощью конструктора 193
Диаграмма отношений между таблицами 196
Определение свойств полей 197
Определение свойств таблицы 198
Триггеры 199
Хранимые процедуры 199
Дополнительные возможности контроля данных и их целостности 200
Курсоры 201
Локальные и удаленные представления (назначение) 203
Глава 7. Работа с данными 204
Управление данными 204
Открытие баз данных и таблиц 204
Навигационные команды 217
Добавление данных в поля типа Blob, Memo и General 220
Фильтры 223
Реляционные команды 224
Использование транзакций 235
События базы данных 237
Локальное представление данных 240
Создание представления (View) с помощью конструктора представлений 240
Что такое Rushmore? 244
Глава 8. Работа с удаленными данными 245
Введение в технологию "клиент-сервер" 245
Установка соединения с удаленными данными 246
Установка источника данных ODBC 247
Именованное соединение 250
Удаленные представления (Remote Views) 253
Сквозной запрос (SQL pass-through) 255
MS SQL Server 258
Способы соединения с сервером 266
Использование команд T-SQL 267
Краткий справочник по Transact-SQL 268
Организация взаимодействия с удаленным источником данных 270
Вызов хранимых процедур 271
ActiveX Data Objects (ADO) 272
Применение CursorAdapter 282
Работа с полем, имеющим свойство IDENTITY 292
Особенности работы с полями типа Blob 300
Поддержка XML 301
Парсеры (Анализаторы) 320
Глава 9. Отображение табличных данных на форме 324
DataEnvironment (Среда данных) 324
Конструктор Data Environment 325
Свойства, события и методы объекта DataEnvironment 327
Сессии данных 331
Табличное представление данных 332
Grid (Сетка) 332
Объектная модель Grid 334
Визуальные эффекты Grid 344
OLE-объекты в таблицах 350
Отображение данных в Grid 354
Навигация данных 355
Глава 10. Использование внешних компонентов 358
Общие сведения об ActiveX управляющих элементах 358
Описание и настройка отдельных компонентов ActiveX 361
Календарь 361
TreeView 363
Управляющий элемент ActiveX Bound Control 373
Глава 11. Создание пользовательских классов 378
Конструктор классов 378
Классы и библиотеки классов 378
Создание классов в Конструкторе классов 386
Обозреватель классов 398
Программное создание классов 403
Определение класса 403
Класс Custom 410
Управление временем жизни объектов 413
Класс Collection 414
Создание 415
Свойства 415
Методы 416
Применение 418
Класс Empty 419
Функции для работы с классами и объектами 419
Функции ADDPROPERTY() и REMOVEPROPERTY() 419
Функция ACLASS() 420
Функция AMEMBERS() 421
Функция GETPEM() 422
Функция PEMSTATUS() 423
Заключение 424
Глава 12. Создание меню 425
Создание меню в Конструкторе меню 427
Меню, заменяющее главное окно Visual FoxPro 428
Меню формы верхнего уровня 434
Раскрывающееся (контекстное) меню 435
Команды создания меню 435
Меню в SDI- и MDI-формах 438
Вызов меню 439
Вызов из меню методов формы 439
Свойства меню 441
Восстановление главного меню Visual FoxPro 444
Глава 13. Отчеты 445
Введение в систему отчетов 445
Непосредственный вывод на принтер 449
Стандартный отчет (Quick Report) 449
Мастер отчетов 451
Конструктор отчетов 457
Среда окружения отчета 459
Панель инструментов Конструктора отчетов 459
Выполнение надписей в отчете 460
Размещение табличных полей в отчете 460
Группировка данных отчета 462
Переменные в отчете 462
Разметка страницы 463
OLE-объекты в отчете 464
Просмотр и печать отчета 465
Многоколоночный отчет 465
Создание этикеток 467
Особенности многополосных отчетов 468
Управление отчетами — объект ReportListener 470
Свойства, методы и события объекта ReportListener 473
Глава 14. Обработка ошибок 479
Синтаксические ошибки 479
Ошибки в логике программы 479
Ошибки времени выполнения (Run-Time Error) 480
Инструменты для определения ошибок 480
Обработка ошибочных ситуаций 481
Стандартный обработчик ошибок 481
Команда ON ERROR 481
Конструкция TRY... CATCH... FINALLY 483
Coverage Profile 491
ЧАСТЬ II. РАСШИРЕННОЕ ПРОГРАММИРОВАНИЕ В VISUAL FOXPRO 497
Глава 15. Операции над файлами 499
Импорт данных 499
Диалог Import 499
Мастер импорта данных 500
Команда Import From 503
Команда Append From 503
Экспорт данных 503
Диалоговое окно Export 503
Команда Export To 505
Команда Copy To 505
Копирование и удаление файлов 506
Использование функции ALINES() 507
Низкоуровневый доступ к файлам 509
Открытие и закрытие файлов 510
Работа с файлами последовательного доступа 510
Работа с двоичными файлами 511
Обработка ошибок 514
Изменение размера файла 514
Проверка наличия файла и даты изменения 514
Структура таблиц формата DBF 515
Заголовок таблицы 515
Блоки записей таблицы 517
Изменение кодовой страницы 518
Редактор файлов HexEdit 519
Специальные таблицы Visual FoxPro 520
Заключение 520
Глава 16. Технология COM 521
Введение в технологию COM 522
Процессы и потоки 522
Идентификаторы 524
Информация о COM-объектах в реестре Windows 525
Интерфейсы 527
Раннее и позднее связывание в COM 529
Среда Visual FoxPro и поддержка COM 532
Программное создание COM-сервера 533
Информация о классе в Object Browser 536
Тестирование COM-сервера vfpserver 539
Особенности объявления COM-класса в Visual FoxPro 542
Выбор базового класса для создания COM-класса 546
Работа с массивами 546
Обработка ошибок 548
Региональные настройки 550
Создание COM-класса в Конструкторе классов 550
Тестирование: клиент на Visual FoxPro 553
Тестирование: клиент — Microsoft Excel 555
Окончательная доработка приложения VfpTextEdit 556
Сокрытие "лишних" методов и свойств 558
Распределенные приложения 559
Распределенные COM (DCOM) 559
Приложения COM+ 562
Регистрация COM-серверов 567
Заключение 567
Глава 17. Автоматизация MS Office 568
Введение в Microsoft Office 568
Объекты 569
Использование раннего связывания 570
Объекты-коллекции 572
Макросы 573
Определение значений констант 578
Константы Microsoft Office 580
Автоматизация Microsoft Excel 580
Объектная модель Microsoft Excel 581
Оформление отчетов 598
Формирование отчетов 603
Уменьшение времени формирования отчета 611
Печать 613
Уничтожение объекта Microsoft Excel 616
Автоматизация Microsoft Word 616
Объектная модель Microsoft Word 617
Заключение 626
Глава 18. Компоненты ActiveX 627
Общие сведения об использовании компонентов 628
Выбор и размещение компонента на форме 628
Лицензирование 629
Интерактивная установка свойств компонента 629
Компонент ProgressBar 630
Компонент Slider 631
Свойства 632
Методы 632
Компонент RichText 633
Свойства 633
Свойства типа SelXXX 634
Методы 634
Контекстное меню RichText 636
Работа с буфером обмена 636
Форматирование RTF-документа 637
Компонент Web Browser 637
Метод Navigate2 638
Окно справки, использующее Web Browser 638
Интерактивные отчеты в Web Browser 640
Другие методы компонента Web Browser 647
Функция SYS(2333) 648
Заключение 648
Глава 19. Windows API 650
Введение в Windows API 650
Объявление функций Windows API в Visual FoxPro 650
Базовые типы данных в С++ 652
Типы данных Windows 654
Указатели 655
Структуры 656
Прототипы функций 658
MSDN как источник информации о прототипах функций 659
Формирование структур в Visual FoxPro 662
Передача массивов в функцию Windows API 664
Форматы символьных данных ANSI и Unicode 665
Многократное объявление функций Windows API 665
Удаление зарегистрированных функций 666
Распределение памяти для структур с указателями 666
Распределение памяти Windows 667
Распределение памяти внутри процесса 670
Работа с указателями в Visual FoxPro 671
Освобождение распределенной памяти 673
Применение функций Windows API 673
Изменение раскладки клавиатуры 673
Информация о локальной дате и времени 674
Время, прошедшее с момента запуска системы 676
Приостановка выполнения приложения 676
Информация об использовании памяти 677
Получение информации о файловом томе 678
Соединение с сетевым ресурсом 681
Функции для работы с GUID 686
Функция ShellExecute 688
Функция SHFileOperation 691
Заключение 697
Глава 20. Работа с реестром Windows 698
Структура реестра 698
Использование функций Windows API 701
Открытие ключа реестра 701
Чтение значений ключа 702
Закрытие ключа и сохранение реестра 703
Пример чтения информации из реестра 704
Создание ключа 706
Запись и удаление значений ключа 708
Другие API-функции для работы с реестром Windows 711
Использование Windows Scripting Host 712
Создание разделов и запись значений ключей реестра 712
Чтение информации из реестра 713
Удаление информации из реестра 714
Изменение значения ключа 714
Дополнительные возможности объекта WshShell 715
Запуск приложения 715
Имитация нажатия клавиш клавиатуры 715
Просмотр значений переменных окружения Windows 717
Заключение 718
Глава 21. Применение GDIPlus 719
Введение в GDIPlus 720
Векторная и растровая графика 720
Форматы графических файлов 721
Инициализация и завершение GDIPlus 722
Объектная модель GDIPlus 722
Поддержка формата Unicode 723
Обработка ошибок 724
Класс VFPGdiplus 725
Загрузка, сохранение и удаление изображений 727
Загрузка изображения из файла. Метод LoadFromFile 727
Сохранение изображения в файле 729
Метод Destroy 736
Метод GetStatus 736
Тестирование 737
Загрузка изображения из поля таблицы или переменной 738
Сохранение изображения в переменной (в поле таблицы) 740
Использование буфера обмена Windows 742
Информация об изображении 744
Определение размеров растра 744
Определение разрешения растра 745
Определение графического формата изображения 746
Тестирование 748
Операции над изображениями 750
Поворот и отражение изображения 750
Отсекание прямоугольного фрагмента изображения 752
Создание растра 756
Форматы пикселов 756
Объект Graphics, связанный с растром 757
Изменение размеров изображения 759
Обзор функций для копирования изображений 765
Функция GdipDrawImage 765
Функция GdipDrawImageRect 766
Функция GdipDrawImageRectRect 766
Заключение 767
Глава 22. Рисование в GDIPlus 768
Цвета, единицы измерения и координаты 768
Концепция цвета и прозрачности. Метод ARGB 768
Использование различных единиц измерения 770
Система координат 771
Инструментарий 773
Перья 774
Кисти 779
Графические примитивы 789
Метод SelGraphics 789
Антиалиасинг 790
Прямые и ломаные линии 792
Сплайны 796
Прямоугольники 802
Многоугольники 809
Окружности и эллипсы 813
Сектора и дуги 816
Рисование текстовых строк 823
Объекты FontFamily и Font 823
Управление качеством отображения символов 830
Определение длины текстовой строки 830
Форматирование текста 832
Рисование изображений 838
Метод DrawImage 838
Метод DrawImageFromFile 840
Заключение 841
Глава 23. GDIPlus. Графический вывод 843
Печать на принтере 843
Создание графического контекста принтера 843
Создание связанного с принтером объекта Graphics 844
Определение размера листа принтера 845
Документ принтера 845
Класс для печати на принтере 847
Тестирование 852
Рисование в окне формы 856
Определение "правильного" HWnd 856
Перехват оконных сообщений 857
Создание связанного с окном объекта Graphics 859
Форма для рисования 860
Класс для рисования в окне формы 862
Динамическое отображение диаграмм 864
Применение GDIPlus в отчетах 868
События, методы и свойства объекта ReportListener 869
Создание отчета 870
Процедура запуска отчета 871
Класс GdipDemoReport 872
Координатные преобразования 876
Манипуляции с цветом 881
Объект ImageAttributes 881
Пример корректировки цветовой гаммы изображения 884
Еще несколько функций GDIPlus... 885
Перо, рисующее кистью 885
Изменение вида начала или конца линии 885
Изменение и установка цвета пикселов 886
Обзор классов 886
Класс GdipImages 887
Класс GdipPrinter 893
Класс GdipWindow 894
Заключение 894
Глава 24. Мультимедиа 896
Запись и воспроизведение WAV-файлов 896
Запись звукового файла 896
Воспроизведение звукового файла 897
Воспроизведение стандартных звуков Windows 899
Интерфейс управления мультимедиа (MCI) 899
Команды MCI 900
Особенности вывода видео на форме 905
Класс для управления MCI 906
Проигрыватель звуковых файлов 913
Проигрыватель видеофайлов 916
Microsoft Agent 917
Объектная модель Microsoft Agent 918
Коллекция персонажей Characters 919
Объект Character (персонаж) 920
Управление анимацией. Объект Request 925
Управление воспроизведением речи 926
Объект Balloon 927
Объект AudioOutput 929
ActiveX-компонент Microsoft Agent 929
Использование Ассистентов Microsoft Office 2003 931
Обработка ошибок Microsoft Agent 932
Заключение 932
ЧАСТЬ III. СОЗДАНИЕ И РАСПРОСТРАНЕНИЕ ПРИЛОЖЕНИЙ 933
Глава 25. Описание проекта 935
Постановка задачи 935
Определение языка программирования, создание структур для хранения данных 938
Определение состава проекта 943
Разработка главного модуля приложения 944
Разработка меню 948
Разработка форм 950
Глава 26. Разработка справочной документации 964
Строка состояния 964
Справка в формате "What\'s This?" ("Что это?") 964
Диалоговые окна 965
Описание работы с HTML Help Workshop 966
Создание тем справочной системы 969
Содержание 970
Предметный указатель 972
Определение ссылок на фрагменты справки в свойствах HelpID объектов 973
Определение псевдонимов тем 974
Определение параметров проекта справочной системы 974
Компиляция и тестирование справочной системы 975
Команды Visual FoxPro для управления справочной системой 975
Формирование файла проекта справочной системы 977
Глава 27. Распространение приложений 981
Введение в InstallShield Express 981
Установка InstallShield Express 982
Запуск InstallShield Express 982
Создание дистрибутива приложения 983
Общие установки 983
Спецификация данных приложения 985
Вставка пункта в меню Пуск и иконки приложения 988
Определения набора диалогов Мастера установки 989
Определение требований к среде выполнения 991
Сборка дистрибутива 992
Редактирование дистрибутива приложения 993
Заключение 993
Глава 28. Полезные советы 994
1. Как изменить кодовую страницу таблицы 994
2. Как прочитать список файлов, расположенных в одном каталоге 995
3. Вы хотите закрыть свой проект от взлома, хотя бы от не очень компетентных людей 996
4. Вы хотите ввести пароль и зашифровать его 997
5. Вы хотите, чтобы ваше приложение запускалось только один раз на каждом компьютере 999
6. Как вычислить определенные даты 1000
7. Как сделать всплывающую подсказку 1000
8. Как работать с INI-файлами 1000
9. Как сделать ссылку 1004
10. Как "прикрепить" созданную вами иконку к проекту 1004
11. Как организовать ProgressBar ("градусник") 1005
12. Обновление версий 1006
13. Преобразовать "Пупкин Василий Иванович" в "Пупкин" "Василий" "Иванович" 1007
14. Анимированная иконка 1007
15. Как создать задание на SQL-сервере 1008
16. Как запустить архиватор arj из VFP, чтобы он при запуске не мелькал на экране 1009
17. Как определить серийный номер жесткого диска 1009
18. Отображение текста на форме в виде бегущей строки 1010
19. Создание каталога для отчетов и создание ссылки на него на рабочем столе пользователя 1010
20. Определение информации о дисках компьютера 1011
21. Создание "на лету" группы кнопок или переключателей (из таблицы) 1011
22. При нажатии клавиши первая колонка Grid скрывается за границу Grid 1014
23. Контекстный поиск в Grid 1014
24. Информирование пользователя о выполнении какого-либо процесса 1014
25. Как вернуть название месяца по его номеру 1015
26. Как выгрузить неактивную программу у пользователей 1015
27. Как разместить на форме часы 1023
28. Как заставить цифровую клавиатуру отображать точку при любой раскладке (Ru/En) 1024
29. Как заменить сообщение "Invalid Date" при вводе некорректной даты 1024
30. Как получить программный код создания структуры базы данных? 1025
31. Как перенести данные из текстового файла в таблицу 1026
32. Получение данных об установленных программных продуктах 1026
33. Из какого каталога запущена программа (EXE-файл)? 1029
34. VFP+Internet Explorer 1029
35. Visual FoxPro + Lotus Notes 1029
ПРИЛОЖЕНИЯ 1033
Приложение 1. Установка и настройка Visual FoxPro 1035
Настройка Visual FoxPro 1038
Приложение 2. Команды Visual FoxPro 1042
Перечень SET-команд 1066
Приложение 3. Справочник встроенных функций Visual FoxPro 1075
Приложение 4. Свойства и методы VFP 1107
Приложение 5. Содержание компакт-диска 1185
Предметный указатель 1191