- •Министерство образования российской федерации ростовский государственный экономический университет
- •Borland delphi
- •4.1 Страница Additional 23
- •4.2 Страница Dialogs 24
- •4.3 Страница System 25
- •4.4 Страница vbx 26
- •8.3 Компоненты работы с бд. 63
- •Введение
- •1 Borland Borland Delphi. Основные характеристики продукта
- •2 Среда программирования Delphi
- •2.1 Структура среды программирования
- •2.2 Главные составные части среды программирования
- •2.3 Дополнительные элементы
- •2.4 Стандартные компоненты
- •2.5 Подробнее об Инспекторе Объектов
- •2.6 Сохранение программы
- •2.7 TButton, исходный текст, заголовки и z-упорядочивание
- •3. Управление проектом
- •3.1 Проект Delphi
- •3.2 Пункт меню “File”
- •3.3 Управление проектом
- •3.4 Обзор других пунктов меню
- •3.4.1 Пункт меню “Edit”
- •3.4.2 Пункт меню “Menu”
- •3.4.3 Пункт меню “View”
- •3.4.4 Пункт меню “Compile”
- •4 Обзор Палитры Компонент
- •4.1 Страница Additional
- •4.2 Страница Dialogs
- •4.3 Страница System
- •4.4 Страница vbx
- •5 Свойства в Delphi
- •5.1 Управление свойствами визуальных компонент в режиме выполнения
- •6. Методы в Delphi
- •6.1 Создание методов с помощью визуальных средств
- •Interface
- •Implementation
- •6.2 Передача параметров
- •Interface
- •Implementation
- •7 События в Delphi
- •7.1 Понимание событий
- •7.2 Обработка сообщений Windows в Delphi
- •8 Работа с бд в Delphi.
- •8.1.2 Алиасы
- •8.1.3 Системная информация утилиты настройки bde (bdecfg)
- •8.2 УтилитаDatabaseDesktop
- •8.3 Компоненты работы с бд.
- •8.3.1 Класс TdataSet
- •8.3.1.1 Открытие и закрытие DataSet
- •8.3.2 Навигация (Перемещение по записям)
- •8.3.3 Поля
- •8.3.4 Работа с Данными
- •8.3.5 Основные понятия о TdataSource
- •8.3.5.1 Использование tDataSource для проверки состояния бд
- •8.3.5.2 Отслеживание состояния DataSet
- •8.3.6 Создание таблиц с помощью компонента tTable
- •8.3.7 Управление tdbGrid во время выполнения
- •9 Основные понятия о запросах (queries) и транзакциях
- •9.1 Основные понятия о tQuery
- •9.2 Свойство sql
- •9.3 TQuery и Параметры
- •9.4 Передача параметров через tDataSource
- •9.5 Специальные свойства Tquery
- •10 Создание таблиц с помощью sql-запросов
- •10.1 Создание таблиц с помощью sql
- •11 Управление соединением с базой данных при помощи компоненты tDataBase и объекта Tsession
- •11.1 Класс TdataBase
- •11.2 Создание постоянного соединения с базой данных
- •11.3 Определение собственного диалога при соединении с базой данных
- •11.4 Создание локального псевдонима базы данных
- •11.5 Изменение параметров при соединении
- •11.6 Управление транзакциями
- •11.7 Объект Session
- •11.7.1 Указание сетевого протокола при соединении с бд
- •12 Утилиты для Local InterBase
- •12.1 InterBase Interactive sql
- •12.1.1 Установка соединения
- •12.1.2 Создание новой базы данных
- •12.1.3 Получение информации о структуре базы данных
- •12.1.4 Выполнение sql запросов
- •12.2 InterBase Server Manager
- •12.2.1 Резервное копирование
- •Список использованных источников
7.1 Понимание событий
Windows является системой ориентированной на события;
События в Windows принимают форму сообщений;
В недрах VCL Delphi сообщения Windows обрабатываются и преобразуются в более простую для программиста форму;
Обработка событий в Delphi сводится к написанию для каждого объекта своих обработчиков;
События в программе на Delphi вызываются не только сообщениями Windows, но и внутренними процессами.
Если посмотреть на DefWindowProc в справочнике по Windows API, то можно увидеть следующее определение:
function DefWindowProc(Wnd: HWnd; Msg, wParam: Word;
lParam: LongInt);
Каждое сообщение, посылаемое в окно, состоит из четырех частей: первая часть - handle окна, получающего сообщение, Msg сообщает, что произошло, а третья и четвертая части (wParam и lParam) содержат дополнительную информацию о событии. Вместе эти четыре части являются аналогом показанной выше структуры TEvent.
Вторая часть сообщения имеет длину 16 бит и сообщает, что за событие произошло. Например, если нажата левая кнопка на мыши, то переменная Msg содержит значение WM_LBUTTONDOWN. Существуют десятки различного типа cообщений и они называются вроде WM_GETTEXT, WM_HSCROLL, WM_GETTEXTLENGTH и т.п. Список всех сообщений можно видеть в справочнике по Windows API (on-line help).
Последние две переменные, длиной 16 и 32 бита, называются wParam и lParam. Они сообщают программисту важную дополнительную информацию о каждом событии. Например, при нажатии кнопки мыши, lParam содержит координаты указателя мыши.
Одна из хитростей заключается в том, как выделить нужную информацию из этих переменных. В большинстве случаев Delphi освобождает вас от необходимости выполнять данную задачу. Например, в обработчике события OnMouseDown для формы вы просто используете координаты X и Y. Как программисту, вам не нужно прилагать усилия для получения сообщения и связанных с ним параметров. Все, что связано с событиями, представлено в простом и непосредственном виде:
procedure TForm1.FormMouseDown(Sender: TObject;
Button: TMouseButton;
Shift: TShiftState;
X, Y: Integer);
7.2 Обработка сообщений Windows в Delphi
Конечно, нельзя придумать такую библиотеку объектов, которые бы полностью соответствовали потребностям программистов. Всегда возникнет необходимость дополнения или изменения свойств и поведения объектов. В этом случае, так же, как и при создании своих собственных компонент в Delphi, часто требуется обрабатывать сообщения Windows. Поскольку Object Pascal является развитием и продолжением Borland Pascal 7.0, то это выполняется сходным с BP способом.
Общий синтаксис для декларации обработчика сообщений Windows:
procedure Handler_Name(var Msg : MessageType);
message WM_XXXXX;
Handler_Name обозначает имя метода; Msg - имя передаваемого параметра; MessageType - какой либо тип записи, подходящий для данного сообщения; директива message указывает, что данный метод является обработчиком сообщения; WM_XXXXX - константа или выражение, которое определяет номер обрабатываемого сообщения Windows.
Задание 7.
1.Привязать к правой кнопке другое событие, при нажатии правой кнопки мыши на форме в программе появляется всплывающее меню (pop-up menu, если оно было привязано к этой форме). Это можно сделать так:
type
TForm1 = class(TForm)
PopupMenu1: TPopupMenu;
MenuItem1: TMenuItem;
MenuItem2: TMenuItem;
MenuItem3: TMenuItem;
private
{ Private declarations }
procedure WMRButtonDown(var Msg : TWMMouse); message
WM_RBUTTONDOWN;
public
{ Public declarations }
end;
Подчеркнут код, добавленный в декларацию объекта TForm1 вручную. Далее, в секции implementation нужно написать обработчик:
procedure TForm1.WMRButtonDown(var Msg : TWMMouse);
begin
MessageDlg('Right mouse button click.', mtInformation,
[mbOK], 0);
end;
В данном случае при нажатии правой кнопки мыши будет появляться диалог.
2.Вызвать обработчик данного события, родительского класса. Если в новом обработчике сообщения нужно выполнить действия, которые производились в старом, то для этого применяется ключевое слово inherited. Если слегка модифицировать наш обработчик, то после диалога будет появляться pop-up меню:
procedure TForm1.WMRButtonDown(var Msg : TWMMouse);
begin
MessageDlg('Right mouse button click.', mtInformation,
[mbOK], 0);
inherited;
end;
3.Для обработки сообщений использовать другой способ - свойство OnMessage объекта Application, который автоматически создается при запуске программы. Если определен обработчик события OnMessage, то он получает управление при любом событии, сообщение о котором направлено в программу. Следующий код будет приводить к появлению диалога при двойном щелчке мыши на любом объекте в приложении.
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnMessage:=AOM;
end;
procedure TForm1.AOM(var Msg: TMsg; var Handled: Boolean);
begin
Handled:=False;
if Msg.Message = WM_LBUTTONDBLCLK then begin
MessageDlg('Double click.', mtInformation, [mbOK], 0);
Handled:=True;
end;
end;
Конечно, в обработчике нельзя выполнять операции, требующие длительного времени, поскольку это приведет к замедлению выполнения всего приложения.