Статьи Королевства Дельфи


         

Статьи Королевства Дельфи

Статьи будут рассматривать отдельную тему с практическими примерами и надеюсь на уровне доступном для начинающих. Не знаю как получится, поскольку опыт писательской работы у меня не большой, зато есть приличный опыт работы в дискуссионных группах. Кроме того вся микропроцессорная техника и ее программирование прошли совместно с моей жизнью, начинал я с 8 разрядных машин, затем вплотную от самых первых персональных компьютеров и по текущие дни. Паскаль же от 4 версии до самой последней, а после уже Дельфи, начиная с первой версии.
Это было интересное время, все начинали с нуля, знаний и опыта у всех было мало, все учились друг у друга, в то же время начал развиваться Интернет, что позволило эффективно обмениваться знаниями. Не было обширного парка компонент, только потом развились файловые архивы уровня и Delphi Super Pages. Все это позволило наработать большой опыт и пришло время отдавать долги, что и делаю в виде серии этих статей для начинающих.

Еще раз о звуке
Несколько слов по поводу "железа". Необходимо четко различать, что звуковая плата -- это НЕ ОДНО устройство в системе. Есть устройство вывода звука, записи звука, микшер, синтезатор и т.д. по вкусу. Это важно понимать, т.к. каждое устройство имеет свой набор функций: waveOut***, waveIn***, midiOut***, midiIn***, mixer*** и др.

Архитектура микшера.
Про "железо".
Про "софт".
Запросы к микшеру.
Управление микшером.
Получение информации об аудиолинии
Получение информации об аудиолинии - 2
Получение контролов аудиолинии.
Получение контролов аудиолинии. - 2
Получение значений свойств контрола аудиолинии

Hooks - аспекты реализации
Напишем программу, которая будет устанавливать ловушку типа WH_KEYBOARD и записывать в файл значения нажатых клавиш во всех приложениях (программа будет накапливать в буфере значения нажатых клавиш и как только их количество превысит 40 - все значения будут выведены в соответствующее окно формы). Попутно, в данном примере, новички могут найти ответы на многие вопросы, часто задаваемые в различных форумах.

Выравнивание текста по ширине с автопереносом
Круг рассматриваемых вопросов
Введение и библиография
Решение
Решение - 2
Резюме
Преимущества технологии
Заключение
Использование Interenet-функций Win32® API
Использование Interenet-функций Win32® API - 2

Взгляд в будущее
Возможность отключения из поля видимости тех особенностей, которые обрабатывать не нужно и которые "мешают", загромождая рабочую область Инспектора. Создание и регистрация не только своих объектов, а и своих классов. Для каждого реального обрабатываемого объекта в "DesignTime" нашей программы автоматически создавать объект-оболочку. Методы GetParticuls и SetParticul сделать свойствами процедурного типа. Это позволит не создавать специальный класс для каждого редактируемого класса.

Описание архива
Определение кратчайшего пути между точками
Определение кратчайшего пути между точками - 2
Разбиение путём построения octree-дерева
Разбиение путём построения octree-дерева - 2
Разбиение путём построения octree-дерева - 3
Разбиение путём построения octree-дерева - 4
Просто и ясно о PageMaker и Delphi
Реализация передач команд серверу
Реализация приема данных из DDE сервера

XML сериализация объекта Delphi
Язык XML предоставляет нам чрезвычайно удобный и почти универсальный подход к хранению и передаче информации. Существует множество парсеров для разбора XML документов по модели DOM. На платформе Microsoft Windows - это, в первую очередь, парсеры MSXML от Microsoft.

XML сериализация объекта Delphi
XML сериализация объекта Delphi - 2
XML сериализация объекта Delphi - 3
XML сериализация объекта Delphi - 4
Загрузка XML в объект
Загрузка XML в объект - 2
Загрузка XML в объект - 3
Создание DTD для объекта
Создание DTD для объекта - 2
Компонент для XML сериализации

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

Лицей
Лицей - 2
Лицей - 3
Лицей - 4
Лицей - 5
Лицей - 6
Лицей - 7
Лицей - 8
Лицей - 9
Лицей - 10

Как заставить работать ActionList в формах, импортируемых из DLL
При использовании форм, импортируемых из DLL, вы столкнетесь с проблемой что ActionList работать не будет до тех пор, пока вы не активизируете его обновление самостоятельно. А следовательно, обновление всех компонентов управления работать не будет.

Ошибка в процедуре _AddRefArray в Delphi 5
Ошибка в процедуре _AddRefArray в Delphi 5 - 2
Компонент TADOUpdateSQL
Компоненты для работы с типовыми операциями
.Bat-файл в Группе проектов
Автоматизация создание BackUp-ов проектов
Использование буфера записей BDE
Список ошибок BDE
Bdetry
Определение занятости приложения

Создание системы голосовых сообщений из подручных средств
Смотря, очередной фантастический боевик, в котором “умная” система управления приятным женским или мужским голосом сообщает герою, что если он не выполнит какие-то важные действия то дальше ему (ей) придется передвигаться без удобств на своих двоих или вообще дожидаться завершения фильма в виде горстки атомов. Вы не раз задумывались, вот бы сделать себе подобную сообщалку о всяческих опасных ситуациях возникающих в вереной Вам компьютерной системе или сети.

Создание голосовых сообщений
Создание голосовых сообщений - 2
Параметры экрана из командной строки
Как выставить приоритет любому процессу
Функции для работы со строками
TRySharedSream — работа с файлом подкачки
TRySharedStream (версия 2)
Лицензионное соглашение.
Класс TRySharedSream.
Работа с файлом подкачки

Delphi 3 и создание приложений баз данных

Без баз данных сегодня невозможно представить работу большинства финансовых, промышленных, торговых и прочих организации. Потоки информации, циркулирующие в мире, который нас окружает, огромны. Во времени они имеют тенденцию к увеличению. Не будь баз данных, мы давно захлебнулись бы в информационной лавине. Базы данных позволяют информацию структурировать, хранить и извлекать оптимальным для пользователя образом.
Поскольку использование баз данных является одним из краеугольных камней, на которых построено существование различных организаций, пристальное внимание разработчиков приложений баз данных вызывают инструменты, при помощи которых такие приложения можно было бы создавать. Выдвигаемые к ним требования в общем виде можно сформулировать как: "быстрота, простота, эффективность, надежность".
В основе такой общепризнанной популярности Delphi лежит тот факт, что Delphi, как никакая другая система программирования, удовлетворяет изложенным выше требованиям. Действительно, приложения с помощью Delphi разрабатываются быстро, причем взаимодействие разработчика с интерактивной средой Delphi не вызывает внутреннего отторжения, а наоборот, оставляет ощущение комфорта. Delphi-приложения эффективны, если разработчик соблюдает определенные правила (и часто - если не соблюдает). Эти приложения надежны и при эксплуатации обладают предсказуемым поведением.

Понятие баз данных. Степень детализации информации в базе данных
К сожалению, в существующей литературе о Delphi некоторые вопросы построения приложений баз данных изложены достаточно эклектично. Поэтому при изучении различных тонкостей приходится одновременно копаться в различных источниках. Осознавая насколько это неудобно, автор попытался собрать воедино информацию о возможностях, которые предоставляет Delphi для построения приложений баз данных.

Реляционные базы данных
Понятие первичного ключа
Реляционные отношения между таблицами
Отношение "один-ко-многим"
Отношение "один-к-одному"
Отношение "многие-ко-многим"
Связь между записями одной таблицы
Ссылочная целостность и воздействия
Понятие внешнего ключа
Индексы и методы доступа

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

Понятие столбцов TDBGrid
TDBGrid и динамические свойства столбцов
Постоянные и динамические столбцы
Работа с редактором столбцов
Изменение свойств постоянных столбцов
Другие свойства TDBGridColumns
"Пустые" постоянные столбцы
Формирование списка возможных значений
Управление видом и поведением TDBGrid
Редактирование наборов данных из TDBGrid

Предложение WHERE : задание сложных условий поиска
Ранее были рассмотрены простые варианты задания условия поиска в предложении WHERE (сравнение столбца с константой и внутреннее соединение). Однако условия поиска могут быть достаточно сложными, чему способствует и сам синтаксис оператора SELECT. Рассмотрим основные конструкции для построения сложных условий поиска.

Использование логических выражений
Сравнение столбца с результатом вычисления
Использование BETWEEN
Tovar
Использование IN (список значений)
Использование STARTING
Использование CONTAINING
Использование функции UPPER
Использование LIKE
Использование функции CAST

Принудительная запись на диск
Записи таблиц при добавлении или изменении их в БД могут помещаться в буфер или немедленно физически записываться на диск В первом случае записи из буфера физически записываются на диск после заполнения буфера

Восстановление транзакций
Регистрация новых пользователей
Установка привилегий доступа
Привилегии доступа по умолчанию
Виды привилегий
Предоставление привилегий доступа к таблице БД
Предоставление нескольких привилегий
Привилегии нескольким пользователям
Назначение привилегий всем пользователям
Установка привилегий к столбцам таблицы

Программирование на Delphi 7

Несколько лет назад сайт по Delphi 2 или 3 надо было начинать с азов объектно-ориентированного программирования (ООП). Многие только переходили к Delphi из DOS, многие использовали Borland Pascal for Windows и работали с Windows API напрямую. Объекты еще были в диковинку, и полное разъяснение новых принципов было просто обязательно.
Но и сейчас писать об этом вполне актуально. Конечно, выросло поколение программистов, которые "с молоком матери" впитали новые понятия. Но от понимания объектов до их грамотного использования — дистанция огромного размера. Для создания более или менее сложных приложений нужны навыки объектно-ориентированного дизайна, а для приложений в свою очередь — четкое знание возможностей вашей среды программирования. Поэтому мы постараемся акцентировать внимание читателя на применение ООП в среде Delphi 7.
По сравнению с традиционными способами программирования ООП обладает рядом преимуществ. Главное из них заключается в том, что эта концепция в наибольшей степени соответствует внутренней логике функционирования операционной системы (ОС) Windows. Программа, состоящая из отдельных объектов, отлично приспособлена к реагированию на события, происходящие в ОС. К другим преимуществам ООП можно отнести большую надежность кода и возможность повторного использования отработанных объектов.

Объектно-ориентированное программирование
В модели объектов языка Object Pascal существует механизм доступа к составным частям объекта, определяющий области, где ими можно пользоваться (области видимости). Поля и методы могут относиться к четырем группам (секциям), отличающимся областями видимости. Методы и свойства могут быть общими (секция public), личными (секция private), защищенными (секция protected) и опубликованными (секция published).

Области видимости
Объект изнутри
имеет следующий формат
Внутренняя структура объектов Objl и Obj2
Резюме
Объект и класс
Поля свойства и методы
События
Инкапсуляция
Наследование

Библиотека визуальных компонентов VCL и ее базовые классы
Все классы библиотеки визуальных компонентов произошли от группы базовых классов, которые лежат в основе иерархии VCL. Самый общий предок компонентов — это класс TObject, инкапсулирующий простейший объект. Как известно, каждый объект наследует свойства и методы родительского класса. К объекту можно добавить новые свойства и методы, но нельзя удалить унаследованные.

Класс TWinControl
Класс TCustomControl
Класс TGraphicControl
Резюме
Иерархия базовых классов
Иерархия базовых классов VCL
Класс TObject
Класс TPersistent
Класс TComponent
Свойства и методы

Обработка исключительных ситуаций
При помощи специальной директивы компилятора {$ASSERTIONS ON/OFF} (или, что то же самое, {$с+}/{$с-}) возникновение этих ИС можно централизованно запретить. То есть в отлаживаемом коде в режиме {$с+} можно расставить вызов Assert во всех сомнительных и проверяемых местах. Когда же придет время генерации конечного варианта кода, переключением директивы на {$c-} весь отладочный вывод запрещается.

Исключительная ситуация как класс
Дерево исключительных ситуаций Delphi 7
Исключительные ситуации
Исключительные ситуации - 2
Исключительные ситуации - 3
Защитные конструкции языка Object Pascal
Блок try except
Типовое окно сообщения об ошибке
Блок try finally
Использование исключительных ситуаций

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

Кроссплатформенное программирование для Linux
Проект CLX
Концепция кросс программирования
Библиотека компонентов CLX
Уникальные визуальные компоненты CLX
Сходства и различия компонентов CLX и VCL
Особенности программирования для Linux
Приложения баз данных для Linux
Internetприложения для Linux
Резюме

Элементы управления Win32
Этот вид элементов управления применяется уже достаточно давно. Его роль заключается в отображении различного рода справочной информации. Панель состояния инкапсулирована в компоненте TStatusBar. Обычно панель состояния размещается в нижней части окна. Поэтому при переносе на форму свойство Align всегда имеет значение alBottom. Панель состояния можно разделить на произвольное число самостоятельных частей. Каждая часть описывается объектом TStatusPanel.

Панель состояния TStatusBar
Комбинированный список TComboBoxEx
Создание нового компонента
Мастер создания новых компонентов Delphi 7
Тестовое приложение содержащее IPредактор
Сообщения обрабатываемые
Резюме
Что такое библиотека ComCtl32
Многостраничный блокнот — компоненты
Основные свойства

Элементы управления Windows XP
При первом знакомств с Windows XP сразу же оораг -ешь внимание на существенные изменения в оформлении пользовательскою интерфейса этой операционной системы. Все нововведения основаны на использовании нового способа отрисовки элементов управления, который реализован в системной динамической библиотеке ComCtl32.dll версии 6. Эта библиотека входит в состав операционной системы Windows XP.

Пользовательский интерфейс Windows XP
Манифест Windows XP
Компонент TXPManifest
Включение манифеста Win XP в ресурсы
Визуальные стили и темы оформления
Визуальные стили в Delphi
Theme API
Компоненты настройки цветовой палитры

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

Класс TCollectionltem
Свойства и методы класса TCollectionltem
Резюме
Список строк
Класс TStrings
Класс TStringList
Список указателей
Класс TList
Алгоритм увеличения памяти списка
Свойства и методы класса TList

Действия (Actions) и связанные с ними компоненты
Эти действия скорее всего будут наиболее востребованы разработчиками. И они же являются довольно простыми в использовании. TFiieOpen, TFileSaveAs, TFilePrintSetup — это оболочки над соответствующими диалогами. О том, как работать с такими действиями, описано выше. Действие TFlieExit вообще не требует комментариев — оно просто завершает приложение, закрывая его главную форму.

Категория File
Категория Dialog
Категория Window
Категория Tab
Действия Компонент TActionList
Редактор действий компонента TActionList
Опубликованные свойства объекта TAction
Изменение и настройка внешнего вида панелей
Условия скрытия элементов панелей действий
Ручное редактирование панелей и действий

Файлы и устройства ввода/вывода
Большинство приложений создаются для того, чтобы обрабатывать данные — это прописная истина. С развитием программных технологий мы имеем возможность получать и посылать все более крупные и сложные массивы данных; однако до сих пор 90% из них хранятся в файлах. Для использования файлов в приложении разработчику приходится решать множество задач. Главные из них — поиск необходимого файла и выполнение с ним операций ввода/вывода

Класс TFileStream
Класс TMemoryStream
Класс TStringStream
Оповещение об изменениях в файловой системе
Использование отображаемых файлов
Резюме
Использование переменных Типы файлов
Операции ввода/вывода
Процедуры и функции для работы с файлом
Ввод/вывод с использованием Windows API

Использование графики
"Одно изображение стоит тысячи слов", — говорил древнекитайский император Сун; его слова верны и в наши времена. 80% информации мозг человека получает по зрительному каналу, и не удивительно, что программисты стараются придать внешнему виду своих программ максимум привлекательности. Поэтому в Delphi с самого начала появились развитые средства для работы с графическими возможностями Windows.

Класс Tlcon
Класс TBitmap
Графический формат JPEG Класс TJPEGImage
Компонент TImage
Использование диалогов для загрузки
Внешний вид компонента TSavePictureDiaiog
Класс TClipboard
Класс TScreen
Вывод графики отображаемых файлов
Снимок с метеорологического спутника

Архитектура приложений баз данных
Приложение баз данных, как следует уже из его названия, предназначено для взаимодействия с некоторым источником данных — базой данных (БД). Взаимодействие подразумевает получение данных, их представление в определенном формате для просмотра пользователем, редактирование в соответствии с реализованными в программе бизнес- алгоритмами и возврат обработанных данных обратно в базу данных.

Как работает приложение баз данных
Механизм доступа к данным приложения БД
Модуль данных
Модуль данных - 2
Подключение набора данных
Настройка компонента TDataSource
Отображение данных
Главная форма приложения DemoDBApp

Набор данных
Любое приложение баз данных должно уметь выполнять как минимум две операции. Во-первых, иметь информацию о местонахождении базы данных, подключаться к ней и считывать имеющуюся в таблицах БД информацию. Эта функция в значительной степени зависит от реализации конкретной технологии доступа к данным.

Иерархия классов обеспечивающих
Описание индекса
Использование описаний индексов
Параметры запросов и хранимых процедур
Редактор параметров запроса
Главная форма проекта DemoQueryParams
Класс TParams
Класс TParam
Состояния набора данных
Автоматические состояния набора данных

Поля и типы данных
Каждая БД и, следовательно, каждый набор данных приложения имеет собственную структуру, которая определяется совокупностью полей. Каждое поле набора данных представляет собой объект, содержащий описание типа данных, которому должно соответствовать значение, находящееся в записи на определенном месте. Иначе, полем можно назвать совокупность ячеек с данными конкретного типа, расположенных в одном и том же месте каждой записи набора данных, или попросту — это столбец в таблице.

Объектные поля
Типы данных
Типы данных
Ограничения
Управляющие символы шаблона
Резюме
Объекты полей
Иерархия классов полей
Статические и динамические поля
Редактор полей с списком агрегатных полей

Механизмы управления данными
Наряду с описываемыми в предыдущих главах свойствами и методами, стандартный набор данных Delphi инкапсулирует ряд дополнительных механизмов, облегчающих управление записями и полями. К ним относятся такие полезные функции, как быстрое перемещение по записям, поиск нужной записи по значениям полей, дополнительная фильтрация записей набора данных без использования возможностей СУБД и т. д. Большинство этих механизмов применяют в своей работе индексы таблиц БД.

Быстрый переход к помеченным записям
Главная форма проекта DemoBookmark
Диапазоны
Резюме
Связанные таблицы
Отношение "один ко многим"
Редактор связей полей
Customers представлена
Форма покупателей является главной
Главная форма проекта DemoJoins

Компоненты отображения данных
До этого момента мы рассмотрели аспекты создания приложений баз данных, касающиеся организации доступа к данным и создания в приложениях наборов данных. Теперь более подробно остановимся на вопросах отображения данных в приложениях (интерфейс приложений).

Компонент TDBRadioGroup
Компонент TDBListBox
Компонент TDBComboBox
Компонент TDBMemo
Компонент TDBImage
Компонент TDBRichEdit
Синхронный просмотр данных
Механизм синхронного просмотра
Основные свойства
Главная форма проекта DemoLookup

Процессор баз данных Borland Database Engine
Любое приложение баз данных имеет в своем составе или использует сторонний механизм доступа к данным, который берет на себя подавляющее большинство стандартных низкоуровневых операций работы с базами данных. Например, любое такое приложение при открытии таблицы БД должно выполнить примерно одинаковый набор операций.

Компонент TQuery
Свойства и методы компонента TQuery
Компонент TStoredProc
Свойства и методы компонента TstoredProc
Резюме
Архитектура и функции BDE
Структура процессора баз данных ВОЕ
Ядро процессора баз данных ВОЕ 5
Псевдонимы баз данных и настройка ВDЕ
Окно утилиты BDE Administrator

Технология dbExpress
Одной из проблем различных технологий доступа к данным, используемым в приложениях Delphi, является трудность распространения готовых приложений. Для BDE требуется отдельная установка, которая занимает порядка 15 Мбайт дискового пространства, а также специальная настройка псевдонимов. ADO предустановлена в операционной системе, но нуждается в настраиваемых провайдерах данных

Компонент TSQLQuery
Компонент TSQLStoredProc
Компонент TSimpleDataSet
Способы редактирования данных
Окно приложения Demo dbExpress
Интерфейсы dbExpress
Интерфейс ISQLDriver
Интерфейс ISQLConnection
Интерфейс ISQLCommand
Интерфейс ISQLCursor

Сервер баз данных InterBase и компоненты InterBase Express
На странице InterBase Палитры компонентов содержатся компоненты доступа к данным, адаптированные для работы с сервером InterBase и объединенные названием InterBase Express. Компоненты из набора InterBase Express предназначены для работы с сервером InterBase версии не ниже 5.5.

Компонент TIBStoredProc
Компонент TIBDataSet
Свойства и методы компонента TIBDataSet
Редактор запроса компонента TIBDataSet
Компонент TIBSQL
Свойства и методы компонента TIBSQL
Обработка событий
Свойства и методы компонента TiBEvents
Информация о состоянии базы данных
Компонент TiBDatabaseinfo

Использование ADO средствами Delphi
Наряду с традиционными инструментами доступа к данным Borland Database Engine и ODBC в приложениях Delphi можно применять технологию Microsoft ActiveX Data Objects (ADO), которая основана на возможностях СОМ, а именно интерфейсов OLE DB.

Реализация ADO в Delphi
Компоненты ADO
Механизм соединения с хранилищем данных ADO
Компонент TADOConnection
Настройка соединения
Редактор настройки соединения ADO
Диалоговое окно настройки параметров
Диалоговое окно настройки параметров - 2
Диалоговое окно настройки параметров - 3
Диалоговое окно настройки параметров - 4

Технология DataSnap. Механизмы удаленного доступа
В этой главе мы рассмотрим модель распределенного приложения БД, которая называется многозвенной (multitiered), и, в частности, ее наиболее простой вариант — трехзвенное распределенное приложение. Тремя частями такого приложения являются: собственно сервер базы данных; сервер приложений (серверная часть приложения); клиентская часть приложения.

Провайдеры данных
Методы бработчики
Компоненты - брокеры соединений
Компонент TSimpleObjectBroker
Редактор списка серверов TSimpleObjectBroker
Свойства класса TServeritem
Компонент TLocalConnection
Компонент TSharedConnection
Компонент TConnectionBroker
Резюме

Сервер приложения
Многозвенные распределенные приложения обеспечивают эффективный доступ удаленных клиентов к базе данных, так как в них для управления доступом к данным применяется специализированное ПО промежуточного слоя. В наиболее распространенной схеме — трехзвенном приложении — это сервер приложения, который выполняет следующие функции: обеспечивает авторизацию пользователей; принимает и передает запросы пользователей и пакеты данных; регулирует доступ клиентских запросов к серверу БД, балансируя нагрузку сервера БД; может содержать часть бизнес-логики распределенного приложения, обеспечивая существование "тонких" клиентов

Сервер приложения
Главный удаленный модуль данных
Дочерний удаленный модуль данных
Библиотека типов сервера SimpleAppSrvr
Регистрация сервера приложения
Резюме
Структура сервера приложения
Интерфейс IAppServer
Методы интерфейса IAppServar
Интерфейс IProviderSupport

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

Работа с данными типа BLOB
Представление данных в формате XML
Агрегаты
Объекты агрегаты
Редактор агрегатов компонента TClientDataSet
Агрегатные поля
Группировка и использование индексов
Вложенные наборы данных
Свойства полей клиентского набора данных
Обработка ошибок


Экономика. Учебные пособия - перейти
Введение в экономическую теорию. Учебник - перейти
Курс экономической теории - перейти
Хрестоматия по экономической теории - перейти
Экономика. Курс лекций - перейти
Экономика. Учебник - перейти
Зарождение и развитие экономической теории - перейти
Экономический образ мышления - перейти
Справочное руководство по MySQL 4.0.11 - перейти
Советы по Delphi - перейти
Самоучитель по Delphi 7 для профессионалов - перейти
Объектно-ориентированное программирование - перейти
Библиотека компонентов VCL и ее классы - перейти
Обработка исключительных ситуаций - перейти
Кросс программирование для Linux - перейти