Подходит для начинающих в Delphi, люди с объектно-ориентированными знаниями и опытом в программировании Java или VC.
Мы часто видим подобный код в классе Delphi:
Имена атрибутов здесь могут быть разными. Все в этом формате: Название свойства Свойства Имя Читать строка 1 Строка записи 2
Я взял свойство в оставшемся: Integer Read Fleft write setleft; Слева является целочисленным свойством. READ объявляет переменную или метод для доступа к переменной, и записи объявляет переменную или метод для доступа при изменении переменной. Примечание: это может быть переменная или метод. Здесь это переменная, называемая Fleft. В целях инкапсуляции мы обычно ставим такие переменные в середине частного.
FLEFT: целочисленный код (для привычек на наименованиях мы называем такую переменную, как капитал F перед именем атрибута). Таким образом, когда вы читаете собственность, вы фактически получаете доступ к значению FLEFT. Таким образом, вы можете написать некоторые методы, чтобы изменить гибкость и косвенно изменять значение левого. Затем давайте снова посмотрим на Setleft заявление:
процедура setleft (значение: целое число);
и следующая реализация кода:
Процедура tcontrol.setleft (значение: целое число);
Начинать
Setbounds (значение, ftop, гидромагнитная, fheight);
Включить (fscalingflags, sfleft);
конец;
Если вы напишите следующий код для изменения влево: Control1.left: = 23, то программа вызывает функцию Setleft (23), SetBounds - это функция, которая меняет регион. Слева, это изменит размер области в соответствии с новой левой, и эта функция также изменяет размер FLEFT.
Процедура tcontrol.setBounds (aleft, atop, awidth, aheight: целое число);
Начинать
Если CheckNewsize (awidth, aheight) и
((Aleft <> fleft) или (на вершине <> ftop) или
(Awidth <> fwidth) или (aheight <> fheight)) тогда
Начинать
InvalidateControl (видимый, ложь);
FLEFT: = ALEFT;
Ftop: = atop;
Шида: = awidth;
Fheight: = aheight;
UpdateAnChorrules;
Недействителен;
Выполнить (wm_windowposchanged, 0, 0);
RequestAlign;
Если нет (CSLoading in ComponentState), затем измените размер;
конец;
конец;
Таким образом, внешняя внешняя часть выглядит так, будто значение атрибута изменяется только через операции назначения. Чтение и запись может быть переменными или функциями, в зависимости от вашего дизайна. Конечно, вы можете написать это: Свойство свойства свойства Переменная 1 и переменная 2 может быть одинаковой. Вы также можете сделать это свойство свойства свойства. Любая комбинация для вас. Но есть две вещи, чтобы отметить:
1. Правила именования лучше всего основаны на привычках и легко читаются.
2. Если это переменная, тип должен быть таким же, как тип атрибута.
Мы часто используем атрибуты события компонентов, такие как Click Events, но нам трудно увидеть с поверхности, как оно называется и как это запускается. Я отвечу вам ниже.
В Инспекторе объектов Manager Property мы видим, что имя метода соответствует праву на странице события OnClick. На самом деле, мы можем дать событие компонента, соответствующее предыдущему методу. Возьмите форму в качестве примера Form1. Обратите внимание, что параметры записи метода имеют особое значение, здесь есть (отправитель: tobject)
Давайте используем Tcontrol в качестве примера, и мы находим этот код:
Property OnmouseDown: Tmouseevent Читайте Fonmousedown написать Fonmousedown;
Tmouseevent = процедура (отправитель: tobject; кнопка: tmousebutton; shift: tshiftstate; x, y: целое число) объекта;
Как видите, это на самом деле функция, но синяя часть ограничивает параметры записи. Затем мы назначаем Form1. Затем мы просто пишем функцию, которая перехватывает мышиные сообщения и прямо или косвенно вызывает Fonmousedown, а затем мы будем соответствовать сообщению и функции обработки. Здесь есть много слоев, которые косвенно называют, что требует много времени и включает в себя тип сообщения.
Ниже приводится непрямый процесс вызова.
Процедура wmrbuttondblclk (var Сообщение: twmrbuttondblclk);
Процедура tcontrol.wmrbuttondblclk (var Сообщение: twmrbuttondblclk);
Начинать
унаследован;
Domousedown (сообщение, Mbright, [ssdouble]);
конец;
Процедура Domousedown (var Сообщение: Twmmouse; кнопка: tmousebutton;
Сдвиг: TshiftState);
Процедура tcontrol.domousedown (var Сообщение: Twmmouse; кнопка: tmousebutton;
Сдвиг: TshiftState);
Начинать
Если нет (csnostdevents в ControlStyle), то тогда
с сообщением
if (ширина> 32768) или (высота> 32768), тогда
с Calccurspors
Mousedown (Button, KeyStoshiftState (Keys) + Shift, x, y)
еще
Mousedown (Button, KeyStoShiftState (Keys) + Shift, Message.xpos, Message.ypos);
конец;
Процедура Mousedown (кнопка: tmousebutton; shift: tshiftstate;
X, y: целое число);
Процедура tcontrol.mousedown (кнопка: tmousebutton;
Сдвиг: TshiftState;
Начинать
Если назначено (fonmousedown), то Fonmousedown (Self, Button, Shift, X, Y);
конец;
Если вы напишите больше своих собственных классов, вы обнаружите, насколько удобно это делать, не написав Getleft, Setleft, как Java, а затем поместить текст в частном порядке. из них просто вызывает Control1.text для доступа, Control1.text: = 'определенная строка', чтобы изменить его значение.
С точки зрения обработки сообщений, базовый класс объявляет о свойствах, таких как Onclick и Onmousedown как защищенный. не может раскрыть это.
Мое исследование не глубокое, пожалуйста, поправьте меня, если у вас есть что -то неуместное :). Добро пожаловать на [email protected]