Автор: Tim Gooch
Мне необходимо написать процедуру для OnPassword с
использованием TPasswordEvent. Но я никак не могу его прикрутить к
объекту!
Объявление TPasswordEvent в исходном коде VCL неверно (исправлено в Delphi
2.0). Оно должно включать в себя ключевые слова "of object", как и все остальное
объявления данного типа.
Есть два пути решения проблемы:
A) Изменить исходный код VCL
B) Создать не-стандартный обработчик события, работающий с неправильно
декларированным.
Решение A - мой выбор, но для этого необходимо, чтобы вы имели копию
исходного кода VCL. (Не пытайтесь пересобрать библиотеку VCL; просто измените
файл и добавьте путь к файлу DB.PAS file в пути вашего проекта.)
Решение B немного более прагматичное и не требует изменения исходного кода
VCL. Создайте следующую функцию:
procedure PasswordProc(Sender: TObject; var Continue: Boolean); far;
begin
Session.AddPassword('Harrison');
Continue := True;
end;
|
Затем измените обработчик события OnCreate...
procedure TForm1.FormCreate(Sender: TObject);
begin
Session.OnPassword := PasswordProc;
Table1.Active := True;
end;
|
Важно чтобы вы добавляли ключевое слово "far" в конец объявления данной
функции. Если этого не сделать, вам понадобиться добавлять объявление функций в
секцию модуля Interface, чтобы заставить Delphi скомпилировать их как
"far"-процедуры (которые вызываются из другого модуля).
Если вы решаете воспользоваться методом A, то единственное отличие будет
заключаться в том, что вам понадобиться добавить объявление процедуры к вашему
классу формы, и в секции Implementation ваша процедура должна выглядеть примерно
так:
procedure TForm1.PasswordProc(Sender: TObject; var Continue: Boolean);
begin
Session.AddPassword('Harrison');
Continue := True;
end;
|
Поскольку эта версия является функцией-членом, у нее существует преимущество
при доступе к компонентам и private- или protected-членам вашей формы
(TForm-производного класса).
|