Adequado para iniciantes em Delphi, pessoas com conhecimento e experiência orientadas a objetos na programação Java ou VC.
Frequentemente vemos código como este na classe Delphi: Propriedade Propriedade Propriedade Tipo de Nome Leia String 1 Write String 2
Os nomes dos atributos aqui podem ser diferentes. Todos estão neste formato: Nome da propriedade da propriedade Leia a string 1 Write String 2
Levei a propriedade: Inteiro Read Frokft Write Setleft; A esquerda é uma propriedade inteira. A leitura declara a variável ou método para acessar a variável e a gravação declara a variável ou método para acessar ao modificar a variável. Nota: pode ser uma variável ou um método. Aqui está uma variável chamada Freff. Para fins de encapsulamento, geralmente colocamos essas variáveis no meio do privado.
Frota: código inteiro (para hábitos de nomeação, nomeamos uma variável como um capital f antes do nome do atributo). Dessa forma, quando você lê a propriedade, está realmente acessando o valor do Freft. Assim, você pode escrever alguns métodos para modificar o Flex e modificar indiretamente o valor da esquerda. Então, vejamos o Setleft novamente declaração:
Procedimento Setleft (Valor: Inteiro);
e a seguinte implementação de código:
procedimento tControl.setLeft (valor: número inteiro);
Começar
Setbounds (valor, ftop, fwidth, fHeight);
Incluir (fscalingflags, sfleft);
fim;
Se você gravar o seguinte código para alterar a esquerda: Control1.Left: = 23, o programa chama a função Setleft (23), Setbounds é uma função que altera a região. Esquerda, ele alterará o tamanho da área de acordo com a nova esquerda e essa função também altera o tamanho do Freft.
procedimento tControl.setbounds (Aleft, no topo, de adição, ahight: integer);
Começar
Se CheckNewsize (dewidth, ahight) e
((Aleft <> Fleft) ou (no topo <> ftop) ou
(Awidth <> fwidth) ou (ahight <> fHeight)) então
Começar
InvalidateControl (visível, falso);
Freft: = Aleft;
Ftop: = no topo;
FWidth: = Awidth;
FHeight: = aheight;
UpdateAnchorrules;
Invalidar;
Execute (wm_windowposchanged, 0, 0);
Requestalign;
Caso contrário (csloading no componentState) e redimensione;
fim;
fim;
Dessa forma, o exterior parece que o valor do atributo é alterado apenas por meio de operações de atribuição. Leia e gravação podem ser variáveis ou funções, dependendo do seu design. Obviamente, você pode escrever isso: Propriedade Propriedade Propriedade Tipo de propriedade Nome de leitura Variável 1 Variável de gravação 2. A variável 1 e a variável 2 podem ser as mesmas. Você também pode fazer este método de leitura de Nome da propriedade Propriedade da propriedade Propriedade da propriedade 1. Qualquer combinação para você. Mas há duas coisas a observar:
1. As regras de nomeação são melhores com base em hábitos e são fáceis de ler.
2. Se for uma variável, o tipo deve ser o mesmo que o tipo do atributo.
Muitas vezes, usamos os atributos do evento dos componentes, como eventos de clique, mas é difícil para nós ver na superfície como é chamado e como é acionado. Vou responder abaixo.
No inspetor de objeto do Property Manager, vemos que o nome de um método corresponde ao direito da página do evento OnClick. De fato, podemos fornecer um evento de um componente correspondente ao método anterior. Pegue um formulário como um exemplo de formulário1. Observe que os parâmetros de entrada do método são de particular importância, aqui está (remetente: Tobject)
Vamos usar o TControl como exemplo, e encontramos este código:
Propriedade OnMouseDown: TmouSevent Leia FonMouDown Write FonMousedown;
TMouSeEvent = procedimento (remetente: TObject; Button: tmouseButton; Shift: TSHIFTSTATE; X, Y: INTEGER) do objeto;
Como você pode ver, na verdade é uma função, mas a parte azul limita os parâmetros de entrada. Em seguida, atribuímos o Form1. Em seguida, apenas escrevemos uma função que intercepta as mensagens do mouse e chamamos direta ou indiretamente a FonMousedown, e então corresponderemos à mensagem e à função de processamento. Aqui, existem muitas camadas indiretamente chamadas, que consomem tempo e envolve o tipo de mensagem.
A seguir, um processo de chamada indireta.
Procedimento wmrbuttondblck (VAR Mensagem: twmrbuttondblcl);
procedimento tControl.wmrbuttondblclk (var message: twmrbuttondblclk);
Começar
herdado;
DOMOUSEDOWN (MENSAGEM, MBRIGHT, [SSDOUBLE]);
fim;
Procedimento DOMOUSEDOWN (VAR Mensagem: Twmmouse; Button: TmouseButton;
Mudança: tshiftstate);
Procedimento TControl.DomouseDown (Var Mensagem: Twmmouse; Button: TmouseButton;
Mudança: tshiftstate);
Começar
se não (csnostDevents in ControlStyle) então
com a mensagem
if (largura> 32768) ou (altura> 32768) então
com calccursorpos
Mousedown (Button, KeystoshiftState (chaves) + turno, x, y)
outro
Mousedown (botão, keystoshiftstate (chaves) + shift, message.xpos, message.ypos);
fim;
Procedimento Mousedown (Button: TmouseButton; Shift: TSHIFTSTATE;
X, y: número inteiro);
Procedimento TControl.Mousedown (Button: TmouseButton;
Turno: tshiftState;
Começar
se atribuído (fonmousedown), então fonmousedown (self, botão, shift, x, y);
fim;
Se você escrever mais de suas próprias aulas, encontrará o quão conveniente é fazer isso, sem escrever o Getleft, o Setleft como o Java e, em seguida, colocar o texto em particular. deles estão apenas chamando o Control1.text para acessar, Control1.Text: = 'Uma certa string' para modificar seu valor.
Em termos de mensagens de processamento, a classe base declara propriedades como OnClick e OnMousedown como protegido. Não pode divulgá -lo.
Minha pesquisa não é profunda, por favor, corrija -me se você tiver algum inapropriado :). Bem -vindo a [email protected]