Компонент для хакера gh05t Хакер, номер #075, стр. 075-106-3 Теперь в разделе public допиши следующее: Раздел public public { Public declarations } constructor Create (AOwner: TComponent); override; destructor Destroy; override; procedure GetShutdownPrivileges; procedure GetLoadDriverPrivileges; procedure GetSetPrivileges; Здесь у нашего класса появляются методы, отвечающие за его функциональность. Сразу бросается в глаза наличие, помимо обычных процедур, специфических единиц: constructor и destructor. К тому же, судя по ключевому слову override, они перекрывают одноименные методы родителя. Это не что иное, как конструктор и деструктор объекта нашего класса. В них инициализируются и уничтожаются переменные, устанавливаются некоторые дефолтные значения. Давай создадим обработчики для них. Нажимай Ctrl+Shift+C, и Delphi создаст заголовок для каждой процедуры. Обрати внимание: стандартный обработчик конструктора/деструктора несколько отличается. В нем появилось еще одно ключевое слово «inherited». После этого слова ты можешь вызывать методы родителя компонента. Например в конструкторе, как правило, пишут так: inherited Create(AOwner); в деструкторе: inherited Destroy; Этими строками мы вызываем методы класса-родителя, чтобы он инициализировал свои переменные в конструкторе и уничтожил их в деструкторе. Важно заметить, что вызов этих методов класса-родителя должен производиться в строго определенных местах: в начале конструктора и в конце деструктора твоего компонента. Преждевременный или запоздалый вызов этих методов может вызвать обращение к несуществующей переменной и, как следствие, ошибку доступа к памяти. Так что всегда следи за вызовами методов родителя. Вот полный код конструктора нашего компонента: Переопределенный конструктор inherited Create(AOwner); if Win32Platform = VER_PLATFORM_WIN32_NT then isNT:=true; В первой строке, как уже говорилось, вызов конструктора родителя. Во второй проверяем, работаем ли мы под NT-системой. Наш компонент действует только в NT. Так как в конструкторе мы ничего не создаем, то и в деструкторе нам разрушать особо нечего, поэтому там, кроме строки «inherited Destroy», ничего нет. Листинг двух следующих функции целиком я приводить не буду - он очень объемен и не сильно связан с нашей темой. Обращу внимание лишь на одну строку: Генерирование события if Assigned(FOnGetLoadDriverPrivileges) then FOnGetLoadDriverPrivileges(Self); Это выдержка из листинга функции GetLoadDriverPrivileges. В GetShutdownPrivileges строка выглядит практически так же, за исключением FOnGetLoadDriverPrivileges, измененного на FOnGetShutdownPrivileges. Как я уже говорил, это переменные-события, а этой строкой мы генерируем события, предварительно проверяя, существует ли для них обработчик (Assigned(FOnGetLoadDriverPrivileges)). |