четверг, 30 декабря 2010 г.
понедельник, 6 декабря 2010 г.
Как сделать package в Embarcadero Rad Studio Delphi 2010
Для создания нового package в Delphi нам необходимо выполнить следующий набор действий:
- Запустить Delphi
- В меню выбрать File->New->Package-Delphi (Рис. 1) (Или File->New->Other... откроется окно "New Items". В левой части необходимо выбрать Delphi Projects и в правой части Package и нажать кнопку "ОК", после чего будет создан новый "bpl пакет"(Рис. 2)). После чего автоматически генерируется новый проект с расширением *.bpl
Рис.1
Рис. 2
Ошибка Got a packet bigger than 'max_allowed_packet' bytes
При попытке "поднять" архив База Данных увидел сообщение об ошибке: Got a packet bigger than 'max_allowed_packet' bytes
База данных содержала таблицы в которых были blob поля. Вся проблема оказалась в параметре max_allowed_packet он был равен 1 Мб у меня на сервере, а blob поля которые были в запросе имели размер больше 1 Мб.
Для просмотра значения max_allowed_packet я выполнил следующий запрос:
PS: Статья была описана как заметка на будущее. Информация была частично с официального сайта MySQL.
База данных содержала таблицы в которых были blob поля. Вся проблема оказалась в параметре max_allowed_packet он был равен 1 Мб у меня на сервере, а blob поля которые были в запросе имели размер больше 1 Мб.
Для просмотра значения max_allowed_packet я выполнил следующий запрос:
show variables like 'max_allowed_packet';Результат мы получим в байтах (Рис.1).
Рис. 1
Для изменения я выполнил следующие действия (У меня Windows Vista и MySQL Server 5.1):- Найти файл my.ini (Для Linux нужен файл
my.cnf)(По умолчанию находится в каталоге, в который устанавливался сервер(у меня С:\Program Files\MySQL\MySQL Server 5.1\), или в папке Windows)
- Открыть его и изменить значение max_allowed_packet.Если у вас нет такой строчки - тогда найдите секцию [mysqld](у меня уже была создана и содержала значение порта port=3306) и допишите следующею строчку
- Теперь нужно перезагрузить сервер MySQL для того чтобы все изменения вступили в силу (Для перезагрузки нужно выполнить следующие действия Пуск->Панель управления->Администрирование->Службы ищем в списке MySQL и нажимаем на нем правой кнопкой мыши, после чего появится меню в котором нужно выбрать Свойства(Рис.2). После чего откроется окно "Свойства" с помощью которого можно осуществить перезагрузку службы MySQL сервера. Для перезагрузки нужно нажать кнопку "Остановить"(пункт 1 Рис.3) после остановки сервера станет доступной кнопку "Запустить", теперь нужно нажать кнопку "Запустить"(пункт 2 Рис.3) Все сервер перезагружен, теперь нажимаем "ОК"(пункт 3 Рис.3)).
max_allowed_packet = 32MУ вас может быть больше или меньше 32, мне было достаточно 32 Мб. Сохраняем файл my.ini
Рис. 2
Рис. 3
Теперь нам нужно проверить вступило ли все в силу или нет, для этог нам нужно выполнить запрос, который мы выполняли в начале:show variables like 'max_allowed_packet';Результат запроса: 33554432байта что в свою очередь равно нашим 32Мб, которые мы установили в файле настроек.
PS: Статья была описана как заметка на будущее. Информация была частично с официального сайта MySQL.
воскресенье, 7 ноября 2010 г.
Подключение к MySQL с помощью Delphi
На форумах часто задают вопрос - как подключиться к базе данных MySQL с Delphi. Все намного проще чем многие думают.
Для подключения к базе данных (БД) MySQL я буду использовать компоненты ZEOS. Недавно я описывал как установить компоненты ZEOS в Delphi 2010.....
Прошу извинения за неудобства, но сайт переехал.
Для дальнейшего чтения данной статьи перейдите пожалуйста по данной ссылке.
Для подключения к базе данных (БД) MySQL я буду использовать компоненты ZEOS. Недавно я описывал как установить компоненты ZEOS в Delphi 2010.....
Прошу извинения за неудобства, но сайт переехал.
Для дальнейшего чтения данной статьи перейдите пожалуйста по данной ссылке.
суббота, 6 ноября 2010 г.
Как создать новый Unit в Rad Studio (Delphi)?
В очередной раз просматривая статистику блога, на глаза попался запрос. по которому пользователь перешел на блог, а именно: Как создать новый Unit в Rad Studio.
Я все же решил описать что и за чем нужно делать. И так приступим.
Запускаем Rad Studio. После запуска среды программирования нужно в главном меню выбрать пункты меню: File -> New -> Unit. Как показано на Рис. 1.
Рис. 1.
После этого у нас автоматически создастся новый модуль (Unit) со следующим содержимым:
unit Unit1;Все готово к дальнейшей работе =).
interface
implementation
end.
воскресенье, 24 октября 2010 г.
Отношения заказчик-исполнитель в виде бытовых сценок
Просматривал сегодня видео на YouTube, попалось довольно интересное, суть его в том что в виде бытовых сценок отображены отношения заказчик-исполнитель.
Наслаждаемся просмотром и комментируем.
Понравился пост - нажми на кнопку, сохрани в закладках:
Наслаждаемся просмотром и комментируем.
Понравился пост - нажми на кнопку, сохрани в закладках:
среда, 22 сентября 2010 г.
Ошибка FastReport Error reading xxx.Transparent: Property Transparent does not exist
Решил обновить FastRepot до версии 4.9. Удалил из Delphi предыдущею версию FastReport. Установил новую версию FastReport(можно также ознакомиться с документацией по установке FastReport). Открыл старый проект - проект собрался без проблем. А вот при запуске выскакивает сообщение: Project имя_проекта.exe raised exception class EReadError with message 'Error reading picWheelLeft.Transparent: Property Transparent does not exist.
После детального анализа оказалось что используется старая версия FastReport. (Забыл удалить ссылку на старую версию с Tools->Environmet options...->Library->Library Path). После удаления ссылки на старую версию все начало работать.
После детального анализа оказалось что используется старая версия FastReport. (Забыл удалить ссылку на старую версию с Tools->Environmet options...->Library->Library Path). После удаления ссылки на старую версию все начало работать.
Установка FastReport
Сегодня устанавливал FastRepor. И решил выложить официальную документацию по установке у себя на блоге.
СОДЕРЖАНИЕ
I. Введение
II. Ручная установка пакетов FastReport
III. Компиляция пакетов FastReport Basic Edition и Standard Edition
IV. Компиляция пакетов FastReport Professional Edition и Enterprise Edition
------------------------------------------------------------------------
I. Введение
FastReport поставляется с откомпилированными файлами *.dcu, *.bpl, *.dcp. Программа установки копирует runtime пакеты в системную папку и устанавливает остальные пакеты в Delphi. Вам ничего не нужно устанавливать вручную. Тем не менее, если вы изменили исходники FR, поменяли языковые ресурсы,или имеете другую версию TeeChart, IBX или прочих компонент Delphi, вы должны перекомпилировать пакеты FR.
FastReport состоит из нескольких пакетов, разделенных на runtime и design-time части. Design-time пакеты имеют префикс 'dcl' в имени пакета. Каждый пакет имеет номер, соответствующий версии Delphi. Например, пакет dclfrx4.dpk - это design-time пакет для Delphi4. Ниже приведен список run-time пакетов, используемых FastReport ('*' означает версию Delphi):
II. Ручная установка пакетов FastReport
Выполните следующие действия для ручной установки пакетов FastReport, входящих в стандартную поставку.
Шаг 1. Копирование run-time пакетов в системную папку
- закройте Delphi
- скопируйте \Lib\fs*.bpl файл (* = версия Delphi) в Windows\System32
(Windows\System для Windows 95/98/ME)
- скопируйте \Lib\fsDB*.bpl файл в Windows\System32
- скопируйте \Lib\fsBDE*.bpl файл в Windows\System32
- скопируйте \Lib\fsADO*.bpl файл в Windows\System32
- скопируйте \Lib\fsIBX*.bpl файл в Windows\System32
- скопируйте \Lib\fsTee*.bpl файл в Windows\System32
- скопируйте \Lib\frx*.bpl файл в Windows\System32
- скопируйте \Lib\frxDB*.bpl файл в Windows\System32
- скопируйте \Lib\frxBDE*.bpl файл в Windows\System32
- скопируйте \Lib\frxADO*.bpl файл в Windows\System32
- скопируйте \Lib\frxIBX*.bpl файл в Windows\System32
- скопируйте \Lib\frxDBX*.bpl файл в Windows\System32
- скопируйте \Lib\frxTee*.bpl файл в Windows\System32
- скопируйте \Lib\frxe*.bpl файл в Windows\System32
Шаг 2. Установка design-time пакетов
- в Delphi IDE, выберите "Component|Install Packages..."
- нажмите кнопку "Add..." и выберите файл \Lib\dclfs*.bpl (* = версия Delphi)
- нажмите кнопку "Add..." и выберите файл \Lib\dclfsDB*.bpl
- нажмите кнопку "Add..." и выберите файл \Lib\dclfsBDE*.bpl
- нажмите кнопку "Add..." и выберите файл \Lib\dclfsADO*.bpl (D5+)
- нажмите кнопку "Add..." и выберите файл \Lib\dclfsIBX*.bpl (D5+)
- нажмите кнопку "Add..." и выберите файл \Lib\dclfsTee*.bpl
- нажмите кнопку "Add..." и выберите файл \Lib\dclfrx*.bpl
- нажмите кнопку "Add..." и выберите файл \Lib\dclfrxDB*.bpl
- нажмите кнопку "Add..." и выберите файл \Lib\dclfrxBDE*.bpl
- нажмите кнопку "Add..." и выберите файл \Lib\dclfrxADO*.bpl (D5+)
- нажмите кнопку "Add..." и выберите файл \Lib\dclfrxIBX*.bpl (D5+)
- нажмите кнопку "Add..." и выберите файл \Lib\dclfrxDBX*.bpl (D6+)
- нажмите кнопку "Add..." и выберите файл \Lib\dclfrxTee*.bpl
- нажмите кнопку "Add..." и выберите файл \Lib\dclfrxe*.bpl
Шаг 3. Добавление путей
- в Delphi IDE, выберите "Tools|Environmet options..."
- переключитесь на закладку "Library", строка ввода "Library path"
- добавьте путь к папке "FastReport 4\Lib"
------------------------------------------------------------------------
III. Компиляция пакетов FastReport Basic Edition и Standard Edition
Выполните следующие действия для компиляции пакетов FastReport (при внесении изменений в исходный код и др.)
Шаг 0 (только для FastReport Basic Edition)
- откройте файл FastReport 4\Lib\frx.inc и раскомментируйте строку:
Шаг 1. Добавление путей
1.1. в Delphi IDE, выберите "Tools|Environmet options..."
1.2. переключитесь на закладку "Library", строка ввода "Library path"
1.3. добавьте путь к папке FastReport 4\Lib
Шаг 2. Компиляция run-time пакетов
2.1. повторите шаги 2.2-2.4 для следующих пакетов:
- FastReport 4\Lib\fs*.dpk (* = версия Delphi)
- FastReport 4\Lib\fsDB*.dpk
- FastReport 4\Lib\fsBDE*.dpk
- FastReport 4\Lib\fsADO*.dpk
- FastReport 4\Lib\fsIBX*.dpk
- FastReport 4\Lib\fsTee*.dpk
- FastReport 4\Lib\frx*.dpk
- FastReport 4\Lib\frxDB*.dpk
- FastReport 4\Lib\frxADO*.dpk (FR3 Std)
- FastReport 4\Lib\frxBDE*.dpk (FR3 Std)
- FastReport 4\Lib\frxIBX*.dpk (FR3 Std)
- FastReport 4\Lib\frxDBX*.dpk (FR3 Std)
- FastReport 4\Lib\frxTee*.dpk
- FastReport 4\Lib\frxe*.dpk
2.2. откройте пакет (с помощью команды меню "File|Open project...", выберите "Delphi package (*.dpk)" в качестве типа файла)
2.3. нажмите кнопку "Compile"
2.4. закройте диалог "Package"
Шаг 3. Копирование run-time пакетов в системную папку
3.1. скопируйте следующие файлы из папки Delphi_dir\Projects\Bpl
в папку Windows\System32 (Windows\System для Win9x/Me):
- fs*.bpl (* = версия Delphi)
- fsDB*.bpl
- fsBDE*.bpl
- fsADO*.bpl
- fsIBX*.bpl
- fsTee*.bpl
- frx*.bpl
- frxDB*.bpl
- frxADO*.bpl (FR3 Std)
- frxBDE*.bpl (FR3 Std)
- frxIBX*.bpl (FR3 Std)
- frxDBX*.bpl (FR3 Std)
- frxTee*.bpl
- frxe*.bpl
3.2. замечание для пользователей Delphi4: файлы *.bpl находятся в папке
FastReport 4\Lib, а не в Delphi_dir\Projects\Bpl
Шаг 4. Компиляция и установка design-time пакетов
4.1. повторите шаги 4.2-4.5 для следующих пакетов:
- FastReport 4\Lib\dclfs*.dpk (* = версия Delphi)
- FastReport 4\Lib\dclfsDB*.dpk
- FastReport 4\Lib\dclfsBDE*.dpk
- FastReport 4\Lib\dclfsADO*.dpk
- FastReport 4\Lib\dclfsIBX*.dpk
- FastReport 4\Lib\dclfsTee*.dpk
- FastReport 4\Lib\dclfrx*.dpk
- FastReport 4\Lib\dclfrxDB*.dpk
- FastReport 4\Lib\dclfrxADO*.dpk (FR3 Std)
- FastReport 4\Lib\dclfrxBDE*.dpk (FR3 Std)
- FastReport 4\Lib\dclfrxIBX*.dpk (FR3 Std)
- FastReport 4\Lib\dclfrxDBX*.dpk (FR3 Std)
- FastReport 4\Lib\dclfrxTee*.dpk
- FastReport 4\Lib\dclfrxe*.dpk
4.2. откройте пакет (с помощью команды меню "File|Open project...", выберите
"Delphi package (*.dpk)" в качестве типа файла)
4.3. нажмите кнопку "Compile"
4.4. нажмите кнопку "Install"
4.5. закройте диалог "Package", ответьте "NO" когда Delphi попросит сохранить изменения!
------------------------------------------------------------------------
IV. Компиляция пакетов FastReport Professional Edition и Enterprise Edition
Выполните следующие действия для компиляции исходного кода FastReport (при внесении изменений в исходный код и др.)
Шаг 1. Удаление путей к старым файлам
1.1. в Delphi IDE, выберите "Tools|Environmet options..."
1.2. переключитесь на закладку "Library", строка ввода "Library path"
1.3. удалите путь к папке FastReport 4\Lib
Шаг 2. Добавление путей
2.1. в Delphi IDE, выберите "Tools|Environmet options..."
2.2. переключитесь на закладку "Library", строка ввода "Library path"
2.3. добавьте путь к папкам FastReport 4\FastScript, FastReport 4\Source,
FastReport 4\Source\BDE,ADO,IBX,DBX, FastReport 4\Source\ExportPack
Шаг 3. Компиляция run-time пакетов
3.1. повторите шаги 3.2-3.4 для следующих пакетов:
- FastReport 4\FastScript\fs*.dpk (* = версия Delphi)
- FastReport 4\FastScript\fsDB*.dpk
- FastReport 4\FastScript\fsBDE*.dpk
- FastReport 4\FastScript\fsADO*.dpk
- FastReport 4\FastScript\fsIBX*.dpk
- FastReport 4\FastScript\fsTee*.dpk
- FastReport 4\Source\frx*.dpk
- FastReport 4\Source\frxDB*.dpk
- FastReport 4\Source\ADO\frxADO*.dpk
- FastReport 4\Source\BDE\frxBDE*.dpk
- FastReport 4\Source\IBX\frxIBX*.dpk
- FastReport 4\Source\DBX\frxDBX*.dpk
- FastReport 4\Source\frxTee*.dpk
- FastReport 4\Source\ExportPack\frxe*.dpk
3.2. откройте пакет (с помощью команды меню "File|Open project...", выберите
"Delphi package (*.dpk)" в качестве типа файла)
3.3. нажмите кнопку "Compile"
3.4. закройте диалог "Package"
Шаг 4. Копирование run-time пакетов в системную папку
4.1. скопируйте следующие файлы из папки Delphi_dir\Projects\Bpl
в папку Windows\System32 (Windows\System для Win9x/Me):
- fs*.bpl (* = версия Delphi)
- fsDB*.bpl
- fsBDE*.bpl
- fsADO*.bpl
- fsIBX*.bpl
- fsTee*.bpl
- frx*.bpl
- frxDB*.bpl
- frxADO*.bpl
- frxBDE*.bpl
- frxIBX*.bpl
- frxDBX*.bpl
- frxTee*.bpl
- frxe*.bpl
4.2. замечание для пользователей Delphi4: файлы *.bpl находятся в папках с
исходниками, а не в Delphi_dir\Projects\Bpl:
FastReport 4\FastScript, FastReport 4\Source,
FastReport 4\Source\BDE,ADO,IBX,DBX, FastReport 4\Source\ExportPack
Шаг 5. Компиляция и установка design-time пакетов
5.1. повторите шаги 5.2-5.5 для следующих пакетов:
- FastReport 4\FastScript\dclfs*.dpk (* = версия Delphi)
- FastReport 4\FastScript\dclfsDB*.dpk
- FastReport 4\FastScript\dclfsBDE*.dpk
- FastReport 4\FastScript\dclfsADO*.dpk
- FastReport 4\FastScript\dclfsIBX*.dpk
- FastReport 4\FastScript\dclfsTee*.dpk
- FastReport 4\Source\dclfrx*.dpk
- FastReport 4\Source\dclfrxDB*.dpk
- FastReport 4\Source\ADO\dclfrxADO*.dpk
- FastReport 4\Source\BDE\dclfrxBDE*.dpk
- FastReport 4\Source\IBX\dclfrxIBX*.dpk
- FastReport 4\Source\DBX\dclfrxDBX*.dpk
- FastReport 4\Source\dclfrxTee*.dpk
- FastReport 4\Source\ExportPack\dclfrxe*.dpk
5.2. откройте пакет (с помощью команды меню "File|Open project...", выберите
"Delphi package (*.dpk)" в качестве типа файла)
5.3. нажмите кнопку "Compile"
5.4. нажмите кнопку "Install"
5.5. закройте диалог "Package", ответьте "NO" когда Delphi попросит сохранить изменения!
СОДЕРЖАНИЕ
I. Введение
II. Ручная установка пакетов FastReport
III. Компиляция пакетов FastReport Basic Edition и Standard Edition
IV. Компиляция пакетов FastReport Professional Edition и Enterprise Edition
------------------------------------------------------------------------
I. Введение
FastReport поставляется с откомпилированными файлами *.dcu, *.bpl, *.dcp. Программа установки копирует runtime пакеты в системную папку и устанавливает остальные пакеты в Delphi. Вам ничего не нужно устанавливать вручную. Тем не менее, если вы изменили исходники FR, поменяли языковые ресурсы,или имеете другую версию TeeChart, IBX или прочих компонент Delphi, вы должны перекомпилировать пакеты FR.
FastReport состоит из нескольких пакетов, разделенных на runtime и design-time части. Design-time пакеты имеют префикс 'dcl' в имени пакета. Каждый пакет имеет номер, соответствующий версии Delphi. Например, пакет dclfrx4.dpk - это design-time пакет для Delphi4. Ниже приведен список run-time пакетов, используемых FastReport ('*' означает версию Delphi):
fs*.dpk - FastScript, основной пакетDesign-time пакеты:
fsDB*.dpk - FastScript, DB классы и контролы
fsBDE*.dpk - FastScript, BDE компоненты
fsADO*.dpk - FastScript, ADO компоненты
fsIBX*.dpk - FastScript, IBX компоненты
fsTee*.dpk - FastScript, Tee компоненты
frx*.dpk - FastReport, основной пакет
frxDB*.dpk - FastReport, обертка над TDataSet (TfrxDBDataSet)
frxIBO*.dpk - FastReport, обертка над IB_Objects (TfrxIBODataSet)
frxBDE*.dpk - FastReport, BDE компоненты
frxADO*.dpk - FastReport, ADO компоненты
frxIBX*.dpk - FastReport, IBX компоненты
frxDBX*.dpk - FastReport, DBX компоненты
frxTee*.dpk - FastReport, Tee компоненты
frxe*.dpk - FastReport, фильтры экспорта
dclfs*.dpk------------------------------------------------------------------------
dclfsDB*.dpk
dclfsBDE*.dpk
dclfsADO*.dpk
dclfsIBX*.dpk
dclfsTee*.dpk
dclfrx*.dpk
dclfrxDB*.dpk
dclfrxIBO*.dpk
dclfrxBDE*.dpk
dclfrxADO*.dpk
dclfrxIBX*.dpk
dclfrxDBX*.dpk
dclfrxTee*.dpk
dclfrxe*.dpk
II. Ручная установка пакетов FastReport
Выполните следующие действия для ручной установки пакетов FastReport, входящих в стандартную поставку.
Шаг 1. Копирование run-time пакетов в системную папку
- закройте Delphi
- скопируйте \Lib\fs*.bpl файл (* = версия Delphi) в Windows\System32
(Windows\System для Windows 95/98/ME)
- скопируйте \Lib\fsDB*.bpl файл в Windows\System32
- скопируйте \Lib\fsBDE*.bpl файл в Windows\System32
- скопируйте \Lib\fsADO*.bpl файл в Windows\System32
- скопируйте \Lib\fsIBX*.bpl файл в Windows\System32
- скопируйте \Lib\fsTee*.bpl файл в Windows\System32
- скопируйте \Lib\frx*.bpl файл в Windows\System32
- скопируйте \Lib\frxDB*.bpl файл в Windows\System32
- скопируйте \Lib\frxBDE*.bpl файл в Windows\System32
- скопируйте \Lib\frxADO*.bpl файл в Windows\System32
- скопируйте \Lib\frxIBX*.bpl файл в Windows\System32
- скопируйте \Lib\frxDBX*.bpl файл в Windows\System32
- скопируйте \Lib\frxTee*.bpl файл в Windows\System32
- скопируйте \Lib\frxe*.bpl файл в Windows\System32
Шаг 2. Установка design-time пакетов
- в Delphi IDE, выберите "Component|Install Packages..."
- нажмите кнопку "Add..." и выберите файл \Lib\dclfs*.bpl (* = версия Delphi)
- нажмите кнопку "Add..." и выберите файл \Lib\dclfsDB*.bpl
- нажмите кнопку "Add..." и выберите файл \Lib\dclfsBDE*.bpl
- нажмите кнопку "Add..." и выберите файл \Lib\dclfsADO*.bpl (D5+)
- нажмите кнопку "Add..." и выберите файл \Lib\dclfsIBX*.bpl (D5+)
- нажмите кнопку "Add..." и выберите файл \Lib\dclfsTee*.bpl
- нажмите кнопку "Add..." и выберите файл \Lib\dclfrx*.bpl
- нажмите кнопку "Add..." и выберите файл \Lib\dclfrxDB*.bpl
- нажмите кнопку "Add..." и выберите файл \Lib\dclfrxBDE*.bpl
- нажмите кнопку "Add..." и выберите файл \Lib\dclfrxADO*.bpl (D5+)
- нажмите кнопку "Add..." и выберите файл \Lib\dclfrxIBX*.bpl (D5+)
- нажмите кнопку "Add..." и выберите файл \Lib\dclfrxDBX*.bpl (D6+)
- нажмите кнопку "Add..." и выберите файл \Lib\dclfrxTee*.bpl
- нажмите кнопку "Add..." и выберите файл \Lib\dclfrxe*.bpl
Шаг 3. Добавление путей
- в Delphi IDE, выберите "Tools|Environmet options..."
- переключитесь на закладку "Library", строка ввода "Library path"
- добавьте путь к папке "FastReport 4\Lib"
------------------------------------------------------------------------
III. Компиляция пакетов FastReport Basic Edition и Standard Edition
Выполните следующие действия для компиляции пакетов FastReport (при внесении изменений в исходный код и др.)
Шаг 0 (только для FastReport Basic Edition)
- откройте файл FastReport 4\Lib\frx.inc и раскомментируйте строку:
{$DEFINE FR_VER_BASIC}
Шаг 1. Добавление путей
1.1. в Delphi IDE, выберите "Tools|Environmet options..."
1.2. переключитесь на закладку "Library", строка ввода "Library path"
1.3. добавьте путь к папке FastReport 4\Lib
Шаг 2. Компиляция run-time пакетов
2.1. повторите шаги 2.2-2.4 для следующих пакетов:
- FastReport 4\Lib\fs*.dpk (* = версия Delphi)
- FastReport 4\Lib\fsDB*.dpk
- FastReport 4\Lib\fsBDE*.dpk
- FastReport 4\Lib\fsADO*.dpk
- FastReport 4\Lib\fsIBX*.dpk
- FastReport 4\Lib\fsTee*.dpk
- FastReport 4\Lib\frx*.dpk
- FastReport 4\Lib\frxDB*.dpk
- FastReport 4\Lib\frxADO*.dpk (FR3 Std)
- FastReport 4\Lib\frxBDE*.dpk (FR3 Std)
- FastReport 4\Lib\frxIBX*.dpk (FR3 Std)
- FastReport 4\Lib\frxDBX*.dpk (FR3 Std)
- FastReport 4\Lib\frxTee*.dpk
- FastReport 4\Lib\frxe*.dpk
2.2. откройте пакет (с помощью команды меню "File|Open project...", выберите "Delphi package (*.dpk)" в качестве типа файла)
2.3. нажмите кнопку "Compile"
2.4. закройте диалог "Package"
Шаг 3. Копирование run-time пакетов в системную папку
3.1. скопируйте следующие файлы из папки Delphi_dir\Projects\Bpl
в папку Windows\System32 (Windows\System для Win9x/Me):
- fs*.bpl (* = версия Delphi)
- fsDB*.bpl
- fsBDE*.bpl
- fsADO*.bpl
- fsIBX*.bpl
- fsTee*.bpl
- frx*.bpl
- frxDB*.bpl
- frxADO*.bpl (FR3 Std)
- frxBDE*.bpl (FR3 Std)
- frxIBX*.bpl (FR3 Std)
- frxDBX*.bpl (FR3 Std)
- frxTee*.bpl
- frxe*.bpl
3.2. замечание для пользователей Delphi4: файлы *.bpl находятся в папке
FastReport 4\Lib, а не в Delphi_dir\Projects\Bpl
Шаг 4. Компиляция и установка design-time пакетов
4.1. повторите шаги 4.2-4.5 для следующих пакетов:
- FastReport 4\Lib\dclfs*.dpk (* = версия Delphi)
- FastReport 4\Lib\dclfsDB*.dpk
- FastReport 4\Lib\dclfsBDE*.dpk
- FastReport 4\Lib\dclfsADO*.dpk
- FastReport 4\Lib\dclfsIBX*.dpk
- FastReport 4\Lib\dclfsTee*.dpk
- FastReport 4\Lib\dclfrx*.dpk
- FastReport 4\Lib\dclfrxDB*.dpk
- FastReport 4\Lib\dclfrxADO*.dpk (FR3 Std)
- FastReport 4\Lib\dclfrxBDE*.dpk (FR3 Std)
- FastReport 4\Lib\dclfrxIBX*.dpk (FR3 Std)
- FastReport 4\Lib\dclfrxDBX*.dpk (FR3 Std)
- FastReport 4\Lib\dclfrxTee*.dpk
- FastReport 4\Lib\dclfrxe*.dpk
4.2. откройте пакет (с помощью команды меню "File|Open project...", выберите
"Delphi package (*.dpk)" в качестве типа файла)
4.3. нажмите кнопку "Compile"
4.4. нажмите кнопку "Install"
4.5. закройте диалог "Package", ответьте "NO" когда Delphi попросит сохранить изменения!
------------------------------------------------------------------------
IV. Компиляция пакетов FastReport Professional Edition и Enterprise Edition
Выполните следующие действия для компиляции исходного кода FastReport (при внесении изменений в исходный код и др.)
Шаг 1. Удаление путей к старым файлам
1.1. в Delphi IDE, выберите "Tools|Environmet options..."
1.2. переключитесь на закладку "Library", строка ввода "Library path"
1.3. удалите путь к папке FastReport 4\Lib
Шаг 2. Добавление путей
2.1. в Delphi IDE, выберите "Tools|Environmet options..."
2.2. переключитесь на закладку "Library", строка ввода "Library path"
2.3. добавьте путь к папкам FastReport 4\FastScript, FastReport 4\Source,
FastReport 4\Source\BDE,ADO,IBX,DBX, FastReport 4\Source\ExportPack
Шаг 3. Компиляция run-time пакетов
3.1. повторите шаги 3.2-3.4 для следующих пакетов:
- FastReport 4\FastScript\fs*.dpk (* = версия Delphi)
- FastReport 4\FastScript\fsDB*.dpk
- FastReport 4\FastScript\fsBDE*.dpk
- FastReport 4\FastScript\fsADO*.dpk
- FastReport 4\FastScript\fsIBX*.dpk
- FastReport 4\FastScript\fsTee*.dpk
- FastReport 4\Source\frx*.dpk
- FastReport 4\Source\frxDB*.dpk
- FastReport 4\Source\ADO\frxADO*.dpk
- FastReport 4\Source\BDE\frxBDE*.dpk
- FastReport 4\Source\IBX\frxIBX*.dpk
- FastReport 4\Source\DBX\frxDBX*.dpk
- FastReport 4\Source\frxTee*.dpk
- FastReport 4\Source\ExportPack\frxe*.dpk
3.2. откройте пакет (с помощью команды меню "File|Open project...", выберите
"Delphi package (*.dpk)" в качестве типа файла)
3.3. нажмите кнопку "Compile"
3.4. закройте диалог "Package"
Шаг 4. Копирование run-time пакетов в системную папку
4.1. скопируйте следующие файлы из папки Delphi_dir\Projects\Bpl
в папку Windows\System32 (Windows\System для Win9x/Me):
- fs*.bpl (* = версия Delphi)
- fsDB*.bpl
- fsBDE*.bpl
- fsADO*.bpl
- fsIBX*.bpl
- fsTee*.bpl
- frx*.bpl
- frxDB*.bpl
- frxADO*.bpl
- frxBDE*.bpl
- frxIBX*.bpl
- frxDBX*.bpl
- frxTee*.bpl
- frxe*.bpl
4.2. замечание для пользователей Delphi4: файлы *.bpl находятся в папках с
исходниками, а не в Delphi_dir\Projects\Bpl:
FastReport 4\FastScript, FastReport 4\Source,
FastReport 4\Source\BDE,ADO,IBX,DBX, FastReport 4\Source\ExportPack
Шаг 5. Компиляция и установка design-time пакетов
5.1. повторите шаги 5.2-5.5 для следующих пакетов:
- FastReport 4\FastScript\dclfs*.dpk (* = версия Delphi)
- FastReport 4\FastScript\dclfsDB*.dpk
- FastReport 4\FastScript\dclfsBDE*.dpk
- FastReport 4\FastScript\dclfsADO*.dpk
- FastReport 4\FastScript\dclfsIBX*.dpk
- FastReport 4\FastScript\dclfsTee*.dpk
- FastReport 4\Source\dclfrx*.dpk
- FastReport 4\Source\dclfrxDB*.dpk
- FastReport 4\Source\ADO\dclfrxADO*.dpk
- FastReport 4\Source\BDE\dclfrxBDE*.dpk
- FastReport 4\Source\IBX\dclfrxIBX*.dpk
- FastReport 4\Source\DBX\dclfrxDBX*.dpk
- FastReport 4\Source\dclfrxTee*.dpk
- FastReport 4\Source\ExportPack\dclfrxe*.dpk
5.2. откройте пакет (с помощью команды меню "File|Open project...", выберите
"Delphi package (*.dpk)" в качестве типа файла)
5.3. нажмите кнопку "Compile"
5.4. нажмите кнопку "Install"
5.5. закройте диалог "Package", ответьте "NO" когда Delphi попросит сохранить изменения!
Cannot load package 'tee70'. It contains unit 'TeeAbout' which is also contained in package 'Tee67'
Сегодня нужно было открыть старый проект, в котором использовалась старая версия компонент FastReport v 2.47 (на данный момент уже есть v4.x.x) все делал по описанию, и при инсталляции пакета произошла ошибка: Cannot load package 'tee70'. It contains unit 'TeeAbout' which is also contained in package 'Tee67'. Все дело в том что у меня установлен Chart v6 а данная версия Fast Report работает с 7-й версией.
Для устранения данной проблемы я немного изменил файлы fr7.dpk и FR.inc следующим образом:
Файл fr7.dpk:
Для устранения данной проблемы я немного изменил файлы fr7.dpk и FR.inc следующим образом:
Файл fr7.dpk:
{$IFDEF TeeChartStd},TEE {$ENDIF}и в файле FR.inc:
{$IFDEF TeeChart45},TEE45 {$ENDIF}
{$IFDEF TeeChart7}, TEE7 {$ENDIF}
{$IFDEF TeeChart67},DclTee67 {$ENDIF}
// добавил строку
{$DEFINE TeeChart67}После этих изменений ошибка: Cannot load package 'tee70'. It contains unit 'TeeAbout' which is also contained in package 'Tee67'. исчезла и FastReport успешно установился.
.....
{$IFDEF TeeChart67} //FIX
{$UNDEF TeeChartStd}
{$DEFINE TeeChart}
{$ENDIF}
вторник, 14 сентября 2010 г.
Ошибка corrupt portfolio stream при открытии проекта в Delphi
Сегодня при открытии проекта в Delphi произошла ошибка corrupt portfolio stream. Она связана с некорректным сохранением файла с описанием профиля диаграмм (*.ddp). (я ранее описывал описание типов файлов в среде Delphi).
Данную проблему можно решить двумя способами:
1. Возобновить резервные копии файлов с расширением *.dpp, из резервные копии храняться в файлах с расширением *.~ddp
2. другой способ рассчитан на удаление файлов с расширением *.dpp
PS. Я использовал для решения своей проблемы 2-й вариант, поскольку в проекте не использовал диаграмм.
Данную проблему можно решить двумя способами:
1. Возобновить резервные копии файлов с расширением *.dpp, из резервные копии храняться в файлах с расширением *.~ddp
2. другой способ рассчитан на удаление файлов с расширением *.dpp
PS. Я использовал для решения своей проблемы 2-й вариант, поскольку в проекте не использовал диаграмм.
понедельник, 6 сентября 2010 г.
Семинар Embarcadero RAD Studio XE (Delphi 2010)
В честь выхода новой версии Embarcadero RAD Studio XE, объединяющая в себе Delphi XE, C++Builder XE, Delphi Prism XE, RadPHP XE будут проводиться семинары. В частности семинар пройдет и в Киев 13 сентября 2010 г. Начало регистрации в 9:30, а сам семинар будет проводиться с 10:00 до 14:00.
Участие в докладах примет Дэвид Интерсимоне (David I), и другии представители компании.
Участие в семинаре бесплатно и в нем могут принимать участие разработчики, архитекторы, администраторы баз данных, руководители ИТ-отделов.
Нужно только предварительно зарегистрироваться, это можно сделать перейдя по ссылке.
Участие в докладах примет Дэвид Интерсимоне (David I), и другии представители компании.
Участие в семинаре бесплатно и в нем могут принимать участие разработчики, архитекторы, администраторы баз данных, руководители ИТ-отделов.
Нужно только предварительно зарегистрироваться, это можно сделать перейдя по ссылке.
вторник, 31 августа 2010 г.
Новая версия Embarcadero RAD Studio XE (Delphi 2011)
Компания Embarcadero Technologies, представила три части видеообзора, посвящённого сентябрьскому выходу новой версии пакета средств быстрой разработки приложений — Embarcadero RAD Studio XE. Видео можно просмотреть тут. Видео представлено на нескольких языках, так что выбираем подходящий и смотрим.
В RAD Studio XE появились следующие возможности и доработки:
Скачать RAD Studio XE
В RAD Studio XE появились следующие возможности и доработки:
- Интеграция с системой контроля версий Subversion;
- Сравнение файлов и выбор необходимых участков кода;
- Доработаны UML диаграммы и патерны;
- Доработки в направлении распределенных веб-приложений;
- Технология DataSnap теперь интегрирована и в С++ Builder;
- Взаимодействие с сервисами Windows Azure с помощью DataSnap;
- Разработан FinalBuilder - предназначен для запуска приложений с пред настройками;
- Поддержка компиляции с использованием командной строки;
- AQTime's - анализ производительности приложения
- Инструмент журналирования. (Отправка сервису журналирования неких сообщения при возникновении событий).
- И многое другие
Скачать RAD Studio XE
среда, 21 июля 2010 г.
Ответы от HTTP сервера
Сегодня писал программу, которая отсылала на HTTP сервер данные, и принимала в ответ сообщения с цифрами. Их расшифровку пивожу ниже:
200 - OK
201 - Created
202 - Accepted
203 - Non-authoritative Information
204 - No Content
205 - Reset Content
206 - Partial Content
301 - Moved Permanently
302 - Moved Temporarily
303 - See Other
304 - Not Modified
305 - Use Proxy
400 - Bad Request
401 - Unauthorized
403 - Forbidden
404 - Not Found
405 - Method not allowed
406 - Not Acceptable
407 - Proxy Authentication Required
408 - Request Timeout
409 - Conflict
410 - Gone
411 - Length Required
412 - Precondition Failed
413 - Request Entity To Long
414 - Request-URI Too Long. 256 Chars max
415 - Unsupported Media Type
500 - Internal Server Error
501 - Not Implemented
502 - Bad Gateway
503 - Service Unavailable
504 - Gateway timeout
505 - HTTP version not supported
пятница, 9 июля 2010 г.
None of the dynamic libraries can be found: libmysqld51.dll, libmysqld50.dll, libmysqld.dll
После установки компонентов ZEOSDBO 6.6.6 Stable написал тестовую программку, которая осуществляла подключение к MySQL 5.1. При попытке подключения выскакивало сообщение:
PS: На сервере было два dll файла, libmysqld.dll (libmysql_d.dll) и libmysql.dll, так что нужны быть внимательным.
None of the dynamic libraries can be found: libmysqld51.dll, libmysqld50.dll, libmysqld.dllВ руководстве установки компонентов было указано что нужно скопировать dll в папку [Диск]:\Windows\System32. На компьютере, где был установлен MySQL взял dll файл (libmysqld.dll) и скопировал в соответствующую папку на своем компьютере, после чего все заработало.
PS: На сервере было два dll файла, libmysqld.dll (libmysql_d.dll) и libmysql.dll, так что нужны быть внимательным.
воскресенье, 20 июня 2010 г.
Ошибка при настройке форума PHPBB
Сегодня устанавливал форум PHPBB на локальную машину (перед этим установил Apache, PHP и MySQL) для тестирования и обучения. На завершающем шаге настройки получил следующее сообщение об ошибке:
[phpBB Debug] PHP Notice: in file /includes/functions_messenger.php on line 403: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'America/Chicago' for '-5.0/DST' insteadОказывается проблема в том что я при установке PHP не указал параметр date.timezone в файле конфигурации (php.ini) PHP. Для Украины я установил следующее значение:
date.timezone = "Europe/Helsinki"Перезапустил сервер, и после этого все заработало.
суббота, 12 июня 2010 г.
String or binary data would be truncated
Сегодня при тестировании написанной программы на Delphi, которая заносила данные в таблицы на MS SQL Server 2005 увидел следующее сообщение: String or binary data would be truncated.
Оказывается программа хотела вставить значение, длина которого больше, чем было предусмотрено при создании базы.
Например у БД, есть таблица, а в таблице поле - 'p1' тип которого char(2), при добавлении данных выполнялся следующий код:
PS: Проблема также может быть у тригерах, которые логируют данные.
Оказывается программа хотела вставить значение, длина которого больше, чем было предусмотрено при создании базы.
Например у БД, есть таблица, а в таблице поле - 'p1' тип которого char(2), при добавлении данных выполнялся следующий код:
insert into xxx values ('123456')Очевидно, что запрос не выполнится, поскольку длина записи которую мы хотим добавить превышает 2 символа.
PS: Проблема также может быть у тригерах, которые логируют данные.
воскресенье, 6 июня 2010 г.
Конкурс на 0day.kiev.ua - 50 000 бубликов в подарок
Спешу объявить что сегодня (5.06.2010) начался конкурс на создание логотипа для сайта 0day.kiev.ua, все кто желает поучаствовать - поспешите, и разместите работу тут. Исходник предыдущего логотипа можно скачать тут. Каждый участник получит в подарок 5 000 бубликов, супер приз 50 000 бубликов. Работы будут приниматься до вечера(6.06.2010), после чего будет проводится голосование. Я тоже принимаю участие в создании логотипа, ссылку на голосование размещу сегодня вечером. А пока наслаждаемся уже сделанными работами.
Я уже получил обещанные 5 000 бубликов =).
И так началось голосование, проголосовать за одну из работ можно тут. Моя работа под № 7. В общем конкурсантов не мало не много, а 140 человек, так что посмотреть есть на что, жаль что выбрать нужно только один вариант.
Все, конкурс окончился, и результаты можно просмотреть тут. Я занял 4-е место из 140 =)
Я уже получил обещанные 5 000 бубликов =).
И так началось голосование, проголосовать за одну из работ можно тут. Моя работа под № 7. В общем конкурсантов не мало не много, а 140 человек, так что посмотреть есть на что, жаль что выбрать нужно только один вариант.
Все, конкурс окончился, и результаты можно просмотреть тут. Я занял 4-е место из 140 =)
вторник, 1 июня 2010 г.
Установка компонента ZeosLib на Delphi 2009 - 2010 для работы с MySQL
Сегодня нужно было написать небольшую программку для работы с базой данных MySQL, поскольку пишу в большей мере на Delphi 2010 - нашел подходящие компоненты: ZeosLib. Оказалось что Delphi 2010 поддерживает только сборка ZEOSDBO-7.0.0-alpha. Конечно альфа версия очень смущала, но все же начал устанавливать.
воскресенье, 30 мая 2010 г.
Ошибка Error Nr. 1045 Access denied for user 'root'@'localhost' при установке MySQL
После первой установки и настройки MySQL на Windows Vista, не удалось подключится к базе и зайти с установленным паролем. Принял решение переустановить MySQL. После переустановки оказалось что где то еще остались не удаленные части MySQL. Вовремя применения параметров безопасности получил следующую ошибку:
Поискав в файле конфигурации my.ini (находится в папке установки MySQL) нашел следующие строки:
The security settings could not be applied to the database because the connection has failed with the following error. Error Nr. 1045 Access denied for user 'root'@'localhost' (using password: YES) If a personal firewall is running on your machine, please make sure you have opened the TCP port 3306 for connections. Otherwise no client application can connect to the server. After you have opened the port please press [Retry] to apply the security settings. If you are re-installing after you just uninstalled the MySQL server please note that the data directory was not removed automatically. Therefore the old password from your last installation is still needed to connect to the server. In this case please select skip now and re-run the Configuration Wizard from the start menu.
Поискав в файле конфигурации my.ini (находится в папке установки MySQL) нашел следующие строки:
#Path to the database rootОказалось что данная папка чистится не полностью, и данные о пользователи остаются после удаления MySQL. После удаления папки и очередной переустановки MySQL. Мастер настройки больше не предлагал сменить старый пароль, а предложил установить новый.
datadir="C:/ProgramData/MySQL/MySQL Server 5.1/Data/"
воскресенье, 9 мая 2010 г.
Ошибка: You cannot access JIRA at present. Look at the table below to identify the reasons
Сегодня устанавливал JIRA под Windows и после установки и запуска - в браузере получил следующее сообщение: You cannot access JIRA at present. Look at the table below to identify the reasons. Для решение данной проблемы необходимо выполнить следующее:
- Перейти в каталог [Диск]:\Program Files\Atlassian\Application Data\JIRA\ (каталог куда установил JIRA)
- В этом каталоге будет файл .jira-home.lock - его нужно удалить.
- Перезагружаем JIRA в службах ("Пуск - Панель управления - Администрирование - Службы", в списке служб ищем: Atlassian JIRA Server [версия] нажимаем правой кнопкой мышки на название и выбираем пункт перезапустить)
- Опять запускаем браузер - все работает.
среда, 5 мая 2010 г.
Технология распознавания лиц Face.com теперь доступна сторонним разработчикам
Технология распознавания лиц, которая использовалась на сайте Face.com, теперь стала доступной сторонним разработчикам. Программисты смогут использовать предложенный API для интеграции новых возможностей в свои приложения. Face.com умеет автоматически находить лица на фотографии и позволяет использовать теги для первоначальной идентификации людей. После этого Face.com находит указанных персон во всех доступных фотоальбомах.
Новый API позволит использовать эту функцию не только на Face.com и Facebook.com, но также и на других сайтах и в десктопных приложениях. Доступна бесплатная версия API, на которую накладываются ограничение в 200 обработанных фотографий за один час. Функция распознавания лиц присутствует также в каталогизаторе фотографий Google Picasa, и кроме этого появляется сейчас во многих фото и видео аппаратуре. Пример отметки лиц представлен на на Рис.1.
Новый API позволит использовать эту функцию не только на Face.com и Facebook.com, но также и на других сайтах и в десктопных приложениях. Доступна бесплатная версия API, на которую накладываются ограничение в 200 обработанных фотографий за один час. Функция распознавания лиц присутствует также в каталогизаторе фотографий Google Picasa, и кроме этого появляется сейчас во многих фото и видео аппаратуре. Пример отметки лиц представлен на на Рис.1.
Рис. 1.
понедельник, 12 апреля 2010 г.
Проверка почты средствами Delphi Часть 1
Доброе время суток. Я начинаю цикл статей которые направлены на работу по созданию почтового клиента с помощью компонент Indy.
Для начала определимся с инструментарием: при написании программы я использовал Delphi 2010 (Delphi 2009) компоненты Indy v10
В этой части мы выполним следующие задания:
Раз определились с планом действий - приступим к следующему этапу - созданию. Создаем новый проект, и размещаем на форме компонент idPOP3, который находиться на закладке IndyClients.
Для того чтобы проверить почту нам необходимо передать компоненту idPOP3 некоторые параметры для подключения, а именно:
Результат можно просмотреть на Рис.1.
В результате мы получим следующий вид окна (Рис.2.):
Всё очень просто мы останавливаем таймер, в том случае если он запущен, определяем время его срабатывания, записываем данное время в интервал и запускаем таймер.
Теперь перейдём непосредственно к таймеру. Два раза кликаем левой кнопкой мыши на компонент Timer, после чего вы перейдёте в редактор кода, при этом автоматически генерируется обработчик события OnTimer:
PS: Если есть пожелания - пишите, с удовольствием выслушаю и по возможности реализую.
Продолжение во 2-й части: Проверка почты средствами Delphi - часть 2
Для начала определимся с инструментарием: при написании программы я использовал Delphi 2010 (Delphi 2009) компоненты Indy v10
В этой части мы выполним следующие задания:
- Проверка почты на наличие сообщений;
- Возможность задания периода проверки почты;
- Вывод уведомлений при наличии каких либо сообщений;
Раз определились с планом действий - приступим к следующему этапу - созданию. Создаем новый проект, и размещаем на форме компонент idPOP3, который находиться на закладке IndyClients.
Для того чтобы проверить почту нам необходимо передать компоненту idPOP3 некоторые параметры для подключения, а именно:
UserName – адрес электронной почты в формате (xxx@xxx.xx)Размещаем на форме компонент GroupBox из вкладки Standard – для группирования полей. Для того чтобы программа была более "гибкой" - поместим 4 компонента Edit и Label, они находятся на закладке Standard. Установим свойства компонентов, как показано в Табл.1.
Password – пароль к данному почтовому ящику
Host – POP3 сервер (pop.mail.ru; pop3.ukr.net)
Port – порт (по умолчанию 110)
Табл.1.
Компонент | Свойство | Значение | Описание |
Form1 | Name | MainForm | |
GroupBox1 | Caption | Настройки ящика | |
Name | SettingsGroupBox | ||
Label1 | Caption | Адрес | |
Name | AdressLabel | ||
Label2 | Caption | Пароль | |
Name | PassLabel | ||
Label3 | Caption | POP3 сервер | |
Name | Pop3Label | ||
Label4 | Caption | Порт | |
Name | PortLabel | ||
Edit1 | Text | Адрес | |
Name | AdressEdit | ||
Edit2 | Text | Пароль | |
Name | PassEdit | ||
PasswordChar | * | ||
Edit3 | Text | POP3 сервер | |
Name | Pop3Edit | ||
Edit4 | Text | Порт | |
Name | PortEdit | ||
NumbersOnly | true | Можно вводить только числа | |
idPop31 | Name | idPop31 |
Результат можно просмотреть на Рис.1.
Рис. 1.
Что касается 2-го задания. Нам необходимо еще разместить на форме компонент Timer, который находиться на закладке System. Для задания интервала проверки, нам необходимо добавить на форму поле ввода Edit (панель Standard), компонент Memo для вывода системных сообщений и кнопку (Button на панели Standard) для подтверждения введеной информации. Установим для них следующие свойства (Табл. 2):
Табл. 2
Компонент
|
Свойство
|
Значение
|
Button1 | Caption | Установить |
Name | OkBtn | |
Memo1 | Lines | |
Name | ResultMemo | |
Edit5 | Text | |
Name | IntervalEdit | |
NumbersOnly | true | |
Timer1 | Enabled | false |
Name | CheckTimer |
В результате мы получим следующий вид окна (Рис.2.):
Рис. 2.
Напишем функцию присвоения значений таймера, его активацию и вывод соответствующих сообщений в ResultMemo.function TMainForm.StartTimer(T:TTimer;int:Integer):string;Обьявим данную функцию в приватной секции главной формы:
var
sec:Integer; // объявляем переменную для записи в неё количество мсек.
begin
T.Enabled:=false; //остановка таймера
sec:=int*60000; // определяем интервал проверки
T.Interval:=sec; // задаём интервал проверки
T.Enabled:=true; //запускаем таймера
Result:='Почта будет проверена через '+IntToStr(int)+' мин.'; // передача обратно оповещения
end;
privateДанная функция задает настройки таймера и возвращает строку с сообщением, через какой период будет проверена почта.
{ Private declarations }
function StartTimer(T:TTimer;int:Integer):string;
Дальше создадим код для события onClick кнопки OkButton (для того чтобы создать данное событие необходимо два раза кликнуть на кнопку, или перейти в Object Inspector, открыть закладку Events, и два раза кликнуть по пустому полю возле названия onClick): После создания события автоматически сгенерируется следующий код:
Используем ранее написанную функцию, для этого передадим необходимые параметры:procedure TMainForm.OkBtnClick(Sender: TObject);beginend;
procedure TMainForm.OkBtnClick(Sender: TObject);Рассмотрим более детально: ResultMemo.Lines.Add(); - добавляем запись в ResultMemo которую возвращает написанная нами процедура StartTimer(CheckTimer,StrToInt(IntervalEdit.Text)).
begin
ResultMemo.Lines.Add(StartTimer(CheckTimer,StrToInt(IntervalEdit.Text)));
end;
Всё очень просто мы останавливаем таймер, в том случае если он запущен, определяем время его срабатывания, записываем данное время в интервал и запускаем таймер.
Теперь перейдём непосредственно к таймеру. Два раза кликаем левой кнопкой мыши на компонент Timer, после чего вы перейдёте в редактор кода, при этом автоматически генерируется обработчик события OnTimer:
procedure TMainForm.CheckTimerTimer(Sender: TObject);Дальше реализуем процедуру для получения писем:
begin
end;
function TMainForm.CheckMail(IP:TIdPOP3;User,Pass,Host:string;Port:Integer):String;И обявим ее в приватной секции главной формы:
var
NumOfMsgs:Integer; // Количество писем
begin
try
IP.Username:=User; // адрес электронной почты в формате (xxx@xxx.xx)
IP.Password:=Pass; // пароль к данному почтовому ящику
IP.Host:=Host; // POP3 сервер (pop.mail.ru; pop3.ukr.net)
IP.Port:=Port; // порт
IP.Connect; // подключаемся
if IP.Connected then // если подключение прошло успешно
begin
// записываем в NumOfMsgs количество писем
NumOfMsgs := IP.CheckMessages;
// Возвращаем результат
Result:='Подключение прошло успешно!'+#13#10;
Result:=Result+'У вас '+IntToStr(NumOfMsgs)+' сообщений';
end
except // Если произошла ошибка- возвращаем текст ошибки
on E:Exception do Result:='Ошибка подключения! '+E.Message;
end;
IP.Disconnect; // Отключаемся
end;
privateПереходим в обработчик события OnTimer и компонента CheckTimer и пишем следующий код для того чтобы почта проверялась при активации таймера:
...
function CheckMail(IP:TIdPOP3;User,Pass,Host:string;Port:Integer):String;
procedure TMainForm.CheckTimerTimer(Sender: TObject);Теперь посмотрим что же получилось, заполняем все поля (настройки для получения почты можно взять на почтовых серверах, где у вас зарегистрирован почтовый ящик) (Рис.3):
begin
ResultMemo.Lines.add(CheckMail(IdPOP31,AdressEdit.Text,PassEdit.Text,Pop3Edit.Text,StrToInt(PortEdit.Text)));
end;
Рис.3.
Тестирование прошло успешно. Сегодня попробую протестировать на других почтовых серверах.PS: Если есть пожелания - пишите, с удовольствием выслушаю и по возможности реализую.
Продолжение во 2-й части: Проверка почты средствами Delphi - часть 2
вторник, 6 апреля 2010 г.
Google Street View в 3D
пятница, 2 апреля 2010 г.
Коды ошибок Run-Time Error
Бывают ситуации, при которых возникают ошибки Run-Time Error. Ниже привожу расшифровку кодов ошибок Run-Time Error
1 - Invalid function number
2 - File not found
3 - Path not found
4 - Too many open files
5 - File access denied
6 - Invalid file handle
12 - Invalid file access code
15 - Invalid drive number
16 - Cannot remove current directory
17 - Cannot rename across drives
100 - Disk read error
101 - Disk write error
102 - File not assigned
103 - File not open
104 - File not open for input
105 - File not open for output
106 - Invalid numeric format
200 - Division by zero
201 - Range check error
202 - Stack overflow error
203 - Heap overflow error
204 - Invalid pointer operation
205 - Floating point overflow
206 - Floating point underflow
207 - Invalid floating point operation
210 - Object not initialized
211 - Call to abstract method
212 - Stream registration error
213 - Collection index out of range
214 - Collection overflow error
215 - Arithmetic overflow error
216 - General protection fault
Расшифровка кодов ошибок при работе с сокетами: Socket error xxxxx
При работе с сокетами бывают исключительные ситуации, при которых возникают ошибки с некими кодами. Немножко поискав - нашел описание ошибок. Решил привести данное описание в своем блоге:
Socket error 10004 - Interrupted function call
Socket error 10013 - Permission denied
Socket error 10014 - Bad address
Socket error 10022 - Invalid argument
Socket error 10024 - Too many open files
Socket error 10035 - Resource temporarily unavailable
Socket error 10036 - Operation now in progress
Socket error 10037 - Operation already in progress
Socket error 10038 - Socket operation on non-socket
Socket error 10039 - Destination address required
Socket error 10040 - Message too long
Socket error 10041 - Protocol wrong type for socket
Socket error 10042 - Bad protocol option
Socket error 10043 - Protocol not supported
Socket error 10044 - Socket type not supported
Socket error 10045 - Operation not supported
Socket error 10046 - Protocol family not supported
Socket error 10047 - Address family not supported by protocol family
Socket error 10048 - Address already in use
Socket error 10049 - Cannot assign requested address
Socket error 10050 - Network is down
Socket error 10051 - Network is unreachable
Socket error 10052 - Network dropped connection on reset
Socket error 10053 - Software caused connection abort
Socket error 10054 - Connection reset by peer
Socket error 10055 - No buffer space available
Socket error 10056 - Socket is already connected
Socket error 10057 - Socket is not connected
Socket error 10058 - Cannot send after socket shutdown
Socket error 10060 - Connection timed out
Socket error 10061 - Connection refused
Socket error 10064 - Host is down
Socket error 10065 - No route to host
Socket error 10067 - Too many processes
Socket error 10091 - Network subsystem is unavailable
Socket error 10092 - WINSOCK.DLL version out of range
Socket error 10093 - Successful WSAStartup not yet performed
Socket error 10094 - Graceful shutdown in progress
Socket error 11001 - Host not found
Socket error 11002 - Non-authoritative host not found
Socket error 11003 - This is a non-recoverable error
Socket error 11004 - Valid name, no data record of requested type
вторник, 23 марта 2010 г.
Стилевое оформление исходного кода в Delphi
- Вступление
- Файлы исходного кода
- Именование файлов
- Организация исходных файлов
- Информация о правах (копирайт)
- Имя модуля
- Секция интерфейса
- Реализаця (Implementation)
- Закрывающий оператор и точку (end.) (A closing end and a period)
- Соглашение об именовании
- Именование
- Зарезервированные слова
- Использование пустых строк
- Использование пробелов
- Использование отступов
- Перенос строк
- Комментарии
- Классы
- Структура тела класса
- Уровни доступа(директивы видимости)
- Объявление конструктора
- Объявление методов
- Интерфейсы;
- Операторы
- Присвоения и выражения
- Объявление локальных переменных
- Объявление массивов
- Оператор if
- Оператор for
- Оператор while
- Оператор repeat until
- Оператор case
- Оператор try
Вступление
Я думал первую статью начать с описания проекта, но решил описать сначала стилевое оформление исходного кода в Delphi. Думаю причина ясна - сначала учимся грамотно писать =). Статья должна быть полезна как для начинающих, так и для опытных программистов. При написании статьи старался приводить примеры, поскольку написанное это хорошо, а увиденное лучше =).
Object Pascal - замечательно спроектирован язык. Одним из его многочисленных достоинств является легкая читабельность. Описанный ниже стандарт позволит еще больше повысить легкость чтения кода Object Pascal. Унифицированный стиль написания исходного кода повышает читабельность и понятность. Да можно проигнорировать статью и писать как попало, но это лишь действует до некоторого времени, когда проект разрастается и строк кода все больше и больше – приходит момент когда все в куче, и разобраться в этом невозможно. Или представьте ситуацию - вы пришли на новую работу и вам дали недоделанный проект, при написании которого человек понятия не имел что такое форматирование текста вообще, тогда придется худо и вы его будете вспоминать не раз =).
Естественно переход с собственного стиля оформления на предлагаемый может оказаться непростым, но рано или поздно это надо делать. Есть утилита которая может посодействовать более комфортабельно перейти на этот стандарт. Называется она "delforexp" (Доступна для Delphi 2/3/4/5/6/7/9/2007). В среде Delphi 2010 есть уже встроенный свой инструмент форматирования исходного кода.
Кстати в компании Borland, на Web-сайте компании Borland, на CD, DVD купленных у компании Borland, везде где есть исходный код, стандарт форматирования является законом.
Данный документ не является попыткой определить грамматику языка Object Pascal. В нем приводятся базовые примеры как можно поступить при оформлении исходного кода.
Файлы исходного кода (Наверх) Исходный код Object Pascal подразделяется на модули и файлы проекта, которые подчиняются одинаковым соглашениям. Файл проекта Delphi имеет расширение dpr. Этот файл является главным исходным файлом для всего проекта. Любые модули, используемые в проекте, всегда будут иметь расширение pas. Дополнительные файлы, используемые в проекте могут играть важную роль, но эта глава описывает форматирование только pas и dpr файлов. Более подробно о расширениях файлов можно прочитать в статье: Описание типов файлов в среде Delphi.
Именование файлов (Наверх)
Язык Object Pascal поддерживает длинные имена файлов. Если при создании имени файла Вы используете несколько слов, то необходимо использовать заглавную букву для каждого слова в имени, например: MyFirstProjectName.pas. Такой стиль оформления известен как InfixCaps или CamelCaps. Расширения файлов должны быть в нижнем регистре.
Все файлы модулей которые созданы в какой либо организации, например: ХХХ должны иметь префикс ХХХ
Организация исходных файлов (Наверх)
Все модули Object Pascal могут содержать следующие элементы в определенном порядке:
- Информация о правах (Copyright/ID);
- Имя модуля (Unit Name);
- Секцию интерфейса (Interface section);
- Подключаемые модули
- Объявление классов и интерфейсов
- Дополнительные определения (Additional defines);
- Реализаця (Implementation)
- Объявление используемых модулей и директив (Uses clause);
- Исходный код;
- Закрывающий оператор и точку (end.) (A closing end and a period).
При создании нового проекта – среда разработки генерирует исходный код, пример которго приведен ниже:
unit Unit1;Нужно заметить что ключевые слова пушиться в нижнем регистре.
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
private
{ Private declarations }public
procedure TForm1.Inp(a:integer);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}procedure TForm1.Inp(a:integer);
begin
...
end;
end.
Рассмотрим каждые элемент в отдельности:
Информация о правах (копирайт) (Наверх)
Должен содержать следующие пункты:
- Назначение модуля;
- Копирайт;
- Разработчик;
- Дата последней модификации для исполняемой версии
{*******************************}Имя модуля (Наверх)
{ }
{ Модуль ХХХUnit }
{ Copyright (c) 2010 ХХХ }
{ отдел/сектор }
{ }
{ Разработчик: x.xxxxxxxx }
{ Редактирован: дата }
{ }
{*******************************}
Оно начинается с ключевого слова unit. Имя модуля может содержать символы как в верхнем, так и в нижнем регистре. Например: unit XXXModule1; В результате этот модуль будет назван XXXModule1.pas при сохранении.
Секция интерфейса (Наверх)
Она состоит из определения подключаемых модулей, описания типов, констант, массивов, переменных:
Подключаемые модули(Наверх)
Внутри модуля объявление используемых модулей должно начинаться со слова uses (в нижнем регистре). Затем следуют наименования модулей с сохранением регистра символов.
Каждый используемый модуль должен отделяться от следующего с помощью запятой. Объявление используемых модулей должно заканчиваться точкой с запятой. Список используемых модулей необходимо располагать на следующей строке после слова uses. Если используются модули из разных проектов или производителей, то необходимо сгруппировать модули по проектам или производителям и каждую новую группу начинать с новой строки и прокомментировать каждую группу:
usesЕсли список используемых модулей не умещается по ширине в 80 символов (в редакторе кода есть вертикальная полоса, которая показівает границу в 80 символов), то его необходимо перенести на следующую строку.
Windows, SysUtils, Classes, Graphics, Controls, Forms, TypInfo, // модули Delphi
XХХMyUnit1, ХХXMyUnit2; // модули ХХХ
Объявление классов, типов и интерфейсов (Наверх)
Для разделения слов нельзя использовать символ подчеркивания. Имя класса должно быть именем существительным или фразой с именем существительным. Имена интерфейсов или классов должны отражать главную цель их создания:
Правильно:
AddressFormНеправильно:
ArrayIndexOutOfBoundsException
ManageLayout //глаголОбъявление класса и типов начинается с двух пробелов, затем идет идентификатор класса(его имя) с префиксом Т.
delphi_is_new_to_me //подчерк
Следом за идентификатором класса идет пробел, знак равенства, пробел и слово class в нижнем регистре:
TMyClass = classЕсли необходимо определить родителя класса, то следует добавить открывающую скобку, имя класса - родителя и закрывающую скобку:
TMyClass = class(TObject)Объявления областей видимости начинаются с двух пробелов и, следовательно, области видимости распологаются на одном уровне с идентификатором класса:
TMyClass = class(TObject)Данные всегда должны располагаться только в приватной секции и названия переменных должны всегда начинаться с префикса F. Все объявления внутри класса должны начинаться с четырех пробелов:
private
protected
public
published
end;
TMyClass = class(TObject)Оформление объявлений интерфейсов подчиняется тем же правилам, что и оформление классов. Отличие будет в использовании ключевых слов специфичных для интерфейсов
private
FMyData: Integer;
function GetData: Integer;
procedure SetData(Value: Integer);
public
published
property MyData: Integer read GetData write SetData;
end;
Ключевое слово type размещается без отступов, перечисление типов начинается с новой строки:
usesРеализаця (Implementation) (Наверх)
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
private
{ Private declarations }
public
procedure TForm1.Inp(a:integer);
end;
var
Form1: TForm1;
Может содержать объявление подключенных модулей, дополнительные наборы директив компилятора, исходный код в виде процедур и функция. Например:
implementationЗакрывающий оператор и точку (end.) (A closing end and a period) (Наверх)
uses MyUnit.pas
{$R *.dfm}
procedure Inp(a:integer);
begin
...
end;
И конечно же в конце всего этого долен стоять оператор end. – что сведетельствует о окончании модуля.
Соглашение об именовании (Наверх)
Исключая зарезервированные слова и директивы, которые всегда пишутся в нижнем регистре, все идентификаторы Object Pascal должны использовать InfixCaps (Каждое слово начинается с большой буквы):
MyIdentif, MyFTPClass, NewModuleName;Самое главное исключение для всех правил состоит в использовании оттранслированных заголовочных файлов С/С++. В этом случае всегда используются соглашения, принятые в файле источнике. Например будет использоваться WM_LBUTTONDOWN, а не wm_LButtonDown.
Именование (Наверх)
При именовании полей всегда необходимо использовать InfixCaps. Объявлять переменные только в приватных частях и использовать свойства для доступа к переменным. Для переменных использовать префикс F.
Имена всех локальных переменных должны подчиняться тем же правилам, которые установлены для именования полей, исключая префикс F.
В имени метода всегда должна содержаться команда к действию или глагольная фраза:
Правильно:
ShowStatusНеправильно:
DrawCircle
AddLayoutComponent
MouseButton; //Существительное, не описывает функциюОбратите внимание на последний пример (ServerRunning) - непонятно, что делает этот метод, он может быть использован как для запуска сервера (лучше использовать StartServer) так и для проверки работы сервера (лучше использовать IsServerRunning).
drawCircle; //Начинается с маленькой буквы
add_layout_component; //Используются символы подчерка
ServerRunning; //Глагольная фраза, но без команды
Имена процедур или методов для установки/получения значений свойств должны составляться по правилу: для получения - Get+имя свойства; для установки - Set+имя свойства.
Например:
GetHeight, SetHeigh;Методы для теста/проверки булевских свойств класса должны именоваться с префиксом Is+имя свойства.
Например:
IsResizable, IsVisible, IsServerRunning;Примечание:
- Не используйте все заглавные буквы для констант, за исключением оттранслированных заголовочных файлов.
- Не используйте Венгерскую нотацию, за исключением оттранслированных заголовочных файлов.
FMyString: string;Неправильно
lpstrMyString: string;Исключение для Венгерской нотации делается в случае объявления перечислимого типа:
TBtnKind = (bkCustom, bkOK, bkCancel, bkHelp,bkYes, bkNo, bkClose, bkAbort, bkRetry,bkIgnore, bkAll);bk обозначает ButtonKind;
Когда Вы подбираете имя переменной, то имейте в виду, что нужно избегать однобуквенных имен, кроме как для временных переменных и переменных цикла.
Переменные цикла именуются I и J. Другие случаи использования однобуквенных переменных это S (строка) и R (результат). Однобуквенные имена должны всегда использовать символ в верхнем регистре, но лучше использовать боле значимые имена. Также не рекомендуется использовать переменную l (эль), потому что она похожа на 1 (единица).
Зарезервированные слова (Наверх)
Зарезервированные слова и директивы должны быть все в нижнем регистре. Производные типы должны начинаться с большой буквы (Integer), однако string - это зарезервированное слово и оно должно быть в нижнем регистре.
Использование пустых строк (Наверх)
Пустые строки могут повысить читабельность путем группирования секций кода, которые логически связаны между собой. Пустые строки должны использоваться в следующих местах:
- После блока копирайта;
- После декларации пакета;
- После секции импорта;
- Между объявлениями классов;
- Между реализациями методов;
Язык Object Pascal является очень легким для понимания языком, поэтому нет особой необходимости в использовании большого количества пробелов. Следующие пункты дадут Вам понимание - в каком случае необходимо использовать пробелы.
Пробелы, запрещенные к использованию в следующих случаях:
- До или после оператора .(точка);
- Между именем метода и открывающей скобкой;
- Между унарным оператором и его операндом;
- Между выражением приведения (cast) и приводимым выражением;
- После открывающей скобки или перед закрывающей;
- После открывающей квадратной скобки [ или перед закрывающей ];
- Перед точкой с запятой;
function TMyClass.MyFunc(var Value: Integer);Примеры неправильного использования:
MyPointer := @MyRecord;
MyClass := TMyClass(MyPointer);
MyInteger := MyIntegerArray[5];
function TMyClass.MyFunc( var Value: Integer ) ;Использование отступов (Наверх)
MyPointer := @ MyRecord;
MyClass := TMyClass ( MyPointer ) ;
MyInteger := MyIntegerArray [ 5 ] ;
Всегда необходимо использовать два пробела для всех уровней отступа. Другими словами, первый уровень отступает на два пробела, второй на четыре и так далее. Можно настроить табуляцию на ширину в 2 пробела и пользоваться табуляцией.
Существует несколько исключений из этого правила. Зарезервированные слова unit, uses, type, interface, implementation, initialization и finalization, они всегда должны примыкать к левой границе.
Также должны быть отформатированы финальные end-ы , завершающий исходный модуль и отдельные блоки. В файле проекта выравнивание по левой границе применяется к также к словам program, главным begin и end. Код внутри блока begin-end должен иметь отступ два символа.
Перенос строк (Наверх)
Все строки должны быть ограничены 80 столбцами. Строки, длиннее чем 80 столбцов должны быть разделены и перенесены. Все перенесенные строки должны быть выровнены по первой строке и иметь отступ в два символа. Выражение begin всегда должно находиться на своей отдельной строке.
Никогда не разрывайте строку между параметром и его типом, кроме параметров, перечисляемых через запятую. Двоеточие для всех объявлений переменных не должно содержать перед собой пробелов и иметь один пробел после перед именем типа.
Правильно
procedure Foo(Param1: Integer; Param2: Integer);Неправильно
procedure Foo( Param :Integer; Param2:Integer );Нельзя переносить строки в тех местах, где не допускаются пробелы, например между именем метода и открывающей скобкой или между именем массива и открывающей квадратной скобкой. Никогда нельзя помещать выражение begin на строку, содержащую другой код.
Правильно
while (LongExpression1 or LongExpression2) doНеправильно
begin
// DoSomething
// DoSomethingElse;end;
if (LongExpression1)
or (LongExpression2)
or (LongExpression3) then
while (LongExpression1 or LongExpression2) do beginВ случае с логическими операторами предпочтительнее будет следующий вариант:
// DoSomething
// DoSomethingElse;end;
if (LongExpression1)Комментарии (Наверх)
or (LongExpression2)
or (LongExpression3) then
Язык Object Pascal поддерживает два типа комментариев: блочные и однострочные. Общие правила по использованию комментариев могут быть следующими:
- Помещайте комментарий недалеко от начала модуля для пояснения его назначения;
- Помещайте комментарий перед объявлением класса;
- Помещайте комментарий перед объявлением метода;
- Избегайте очевидных комментариев: (i := i + 1 // добавить к i единицу);
- Помните, что вводящий в заблуждение комментарий хуже чем его отсутствие;
- Избегайте помещать в комментарий информацию, которая со временем может быть не верна;
- Избегайте разукрашивать комментарии звездочками или другими символами;
- Для временных (отсутствующие в релизе) комментариев используйте "TODO".
Object Pascal поддерживает два типа блочных комментариев. Наиболее часто используемый блочный комментарий - это пара фигурных скобок: { }. Команда разработчиков Delphi предпочитает использовать этот комментарий как можно проще и как запасной. Используйте в таких комментариях пробелы для форматирования текста и не используйте символы зведочка "*". При переносе строк необходимо сохранять отступы и выравнивание
Пример из DsgnIntf.pas:
{ TPropertyEditor
Edits a property of a component, or list of components,selected into the Object Inspector. The propertyeditor is created based on the type of theproperty being edited as determined by the typesregistered by...
etc...
GetXxxValueGets the value of the first property in theProperties property. Calls the appropriateTProperty GetXxxValue method to retrieve thevalue.
SetXxxValue Sets the value of all the propertiesin the Properties property. Calls the appropriate
TProperty SetXxxxValue methods to set the value. }В блочный комментарий в большинстве случаев заключается информация о модуле: копирайт, дата модификации и так далее. Блочный комментарий, описывающий метод должен идти перед объявлением метода.
Правильно
Неправильно{ TMyObject.MyMethodThis routine allows you to execute code. }
procedure TMyObject.MyMethod;
begin
end;
procedure TMyObject.MyMethod;Второй тип блочного комментария содержит два символа: скобку и звездочку: (* *). Этот тип комментария используется при разработке исходного кода. Его преимуществом является то, что он поддерживает вложенные комментарии, правда комментарии должны быть разного типа. Вы можете использовать это свойство для комментирования больших кусков кода, в котором встречаются другие комментарии:
{******************************************************TMyObject.MyMethodThis routine allows you to execute code.*******************************************************}begin
end;
Однострочные комментарии (Наверх)(* procedure TForm1.Button1Click(Sender: TObject);beginDoThis; // Start the processDoThat; // Continue iteration{ We need a way to report errors here, perhaps usinga try finally block ??? }CallMoreCode; // Finalize the processend; *)
Однострочный комментарий состоит из символов // после которого идет пробел и текст комментария. Однострочные комментарии должны иметь отступы такие же, как и код, в котором они встречаются. Однострочные комментарии можно сгруппировать, чтобы сформировать большой комментарий.
Однострочный комментарий может начинаться с новой строки и может продолжать код, который он комментирует. В этом случае между кодом и комментарием должен быть хотя бы один пробел. Если больше одного комментария следует за кодом, то они должны быть выровнены по одному столбцу.
Пример однострочного строкового комментария:
Пример комментария в коде:// Open the tableTable1.Open;
if (not IsVisible) thenНеобходимо избегать использовать комментарии в коде для каждой строки модуля.
Exit; // nothing to do
Inc(StrLength); // reserve space for null terminator
Классы
Структура тела класса (Наверх)
Тело класса при его декларации подчинено следующей структуре:
- Объявление полей;
- Объявление методов;
- Объявление свойств.
Уровни доступа (директивы видимости) (Наверх)
В Object Pascal существует четыре уровня доступа (директивы видимости) для членов класса: published, public, protected и private - в порядке уменьшения видимости. По умолчанию, уровень доступа - published. В общем, члены класса должны давать наименьший уровень доступа, который подходит для этого члена.
Например, член, к которому имеют доступ классы из одного модуля должен иметь уровень доступа private. Кроме того, объявляя члены класса с наименьшим уровнем доступа, Вы позволяете компилятору воспользоваться дополнительными возможностями для оптимизации. С другой стороны, если Вы планируете в дальнейшем порождать дочерние классы от Вашего класса, то нужно использовать уровень доступа protected.
Никогда не указывайте уровень доступа public для данных. Данные всегда должны быть объявлены в приватной секции и доступ к ним должен осуществляться с помощью методов или свойств.
Исключая код, вставленный IDE, директивы видимости должны быть объявлены в следующем порядке:
- Приватные (скрытые) члены класса (private);
- Защищенные члены класса (protected);
- Общедоступные члены класса (public);
- Публикуемые члены класса (published)
Все методы класса должны быть упорядочены по алфавиту. Однако Вы можете поместить объявления конструктора и деструктора перед всеми остальными методами. Если у класса существует более чем один конструктор и если они имеют одинаковые имена, то они должны располагаться в порядке увеличения числа параметров
Объявление методов (Наверх)
По возможности, объявление метода должно располагаться на одной строке:
Например:
procedure ImageLoad(ImageCount: Integer, y: Integer, w: Integer, h: Integer);Интерфейсы (Наверх)
Все основные правила форматирования для классов применяются и для форматирования интерфейсов. Интерфейсы декларируются в той же манере, что и классы.
InterfaceName = interface([Inherited Interface])Отступ для интерфейса должен быть равен двум пробелам. Тело интерфейса имеет отступ четыре пробела. Закрывающий end должен иметь отступ в два пробела. Объявление класса заканчивается точкой с запятой. У интерфейса не существует полей, однако могут присутствовать свойства.
InterfaceBody
end;
Все методы интерфейса являются абстрактными и общедоступными, поэтому не требуется включать слова public и abstract в объявление метода.
Структура тела интерфейса (Наверх)
Тело интерфейса при его декларации подчинено следующей структуре:
- Объявление методов интерфейса;
- Объявление свойств интерфейса.
Операторы (Наверх)
Операторы - это одна или более строк кода, разделенных точкой с запятой. Простые операторы имеют одну точку с запятой, а составные (структурированные) состоят из множества простых операторов и могут иметь более чем одну точку с запятой.
Например, простой оператор:
A := B;Это составной или структурированный оператор:
beginПростые операторы(Наверх)
B := C;
A := B;
end;
Простые операторы содержат одну точку с запятой. Если Вам необходимо разделить операторы, то перенесите продолжение оператора на следующую строку с отступом в два пробела:
MyValue :=Составные операторы(Наверх)
MyValue + (SomeStatement / OtherStatement);
Составные операторы всегда заканчиваются точкой с запятой и имеют несколько простых операторов.
beginПрисвоения и выражения(Наверх)
MyStatement;
MyNextStatement;
MyLastStatement;
end;
Каждое присвоение и каждое выражение должно располагаться на разных строках.
Правильно
a := b + c;Неправильно
Inc(Count);
a := b + c; Inc(Count);Объявление локальных переменных(Наверх)
Как уже было описано выше - локальные переменные должны иметь стиль Camel Caps. Для локальных переменных префикс F не требуется.
var
MyData: Integer;
MyString: string;
Все переменные с их типами, особенно поля класса, должны быть объявлены на различных строках.
Объявление массивов(Наверх)
При объявлении массива перед и после квадратных скобок должны стоять пробелы.
typeОператор if(Наверх)
TMyArray = array [0..100] of Char;
Оператор if всегда должен располагаться по крайней мере на двух строках, на первой - условие, на второй - оператор
Правильно
if A > B thenНеправильно
DoSomething;
if A > B then DoSomething;В случае составного оператора необходимо поместить каждый оператор на новую строку.
Правильно
if A > B thenНеправильно
begin
DoSomething;
DoSomethingElse;
end
else
begin
DoThis;
DoThat;
end;
if A > B then beginВсе остальные варианты расположения операторов не рекомендуются и не одобряются, хотя и являются синтаксически правильными.
DoSomething; DoSomethingElse ;
end else begin DoThis; DoThat; end;
Избегайте использования круглых скобок в простых проверках. Например:
Правильно
if I >= 0 thenНеправильно
DoSomething;
if (I >= 0) thenОператор for(Наверх)
DoSomething;
Оператор for всегда должен располагаться по крайней мере на двух строках, на первой - условие, на второй - оператор.
Правильно
for I := 0 to 10 doНеправильно
begin
DoSomething;
DoSomethingElse;
end;
for I := 0 to 10 do
DoSomething;
for I := 0 to 10 do beginОператор while(Наверх)
DoSomething;
DoSomethingElse;
end;
Оператор while также как и предыдущие операторы должен располагаться на нескольких строках
Правильно
while X > J doНеправильно
begin
DoSomething;
DoSomethingElse;
end;
while X < J do
Something;
while X > J do begin DoSomething; DoSomethingElse; end;Оператор repeat until (Наверх)
Также как и все операторы - должен быть записан с новой строки каждый элемент.
Правильно
repeatОператор case(Наверх)
X := J;
J := UpdateValue;
until J >= 25;
Несмотря на то, что существует множество синтаксически правильных конструкций, одобренной и рекомендованной считается следующая:
Правильно
case ScrollCode ofОператор try(Наверх)
SB_LINEUP, SB_LINEDOWN:
begin
Incr := FIncrement div FLineDiv;
FinalIncr := FIncrement mod FLineDiv;
Count := FLineDiv;
end;
SB_PAGEUP, SB_PAGEDOWN:
begin
Incr := FPageIncrement;
FinalIncr := Incr mod FPageDiv;
Incr := Incr div FPageDiv;
Count := FPageDiv;
end;
else
Count := 0;
Incr := 0;
FinalIncr := 0;
end;
Несмотря на то, что существует множество синтаксически правильных конструкций, одобренной и рекомендованной считается следующая (древовидная структура):
Правильно
tryPS: Теперь можно приступить к написанию статей.
try
EnumThreadWindows(CurrentThreadID, @Disable, 0);
Result := TaskWindowList;
except
EnableTaskWindows(TaskWindowList);
raise;
end;
finally
TaskWindowList := SaveWindowList;
TaskActiveWindow := SaveActiveWindow;
end;
Подписаться на:
Сообщения (Atom)