As linguagens de computador evoluíram da linguagem de máquina para a linguagem de alto nível, do complexo ao simples (na verdade, não é simples), o que reflete o desenvolvimento da ciência e da tecnologia da computação. Quanto mais avançada for uma linguagem de computador, mais abstrata e humana ela será, menos terá a ver com hardware de baixo nível e mais conveniente será seu uso. Mas por mais avançada que seja a linguagem do computador, ela é uma abstração da camada do sistema operacional, então sempre podemos descobrir as regras por trás da compreensão das linguagens de alto nível, ou seja: os códigos escritos em linguagens de alto nível são apenas para descrever as necessidades das pessoas, e esses códigos devem passar por " Tradutor "traduz-os para a forma de linguagem de máquina para que possam ser reconhecidos e executados pelo computador. Existem dois chamados métodos de tradução: um é o método de compilação, no qual o código é gerado antecipadamente em linguagem de máquina pelo compilador e depois agendado e executado pelo sistema operacional, como linguagem Delphi, linguagem C++, etc. ; o outro é o método de interpretação, que é uma vantagem no cálculo e na execução que não afeta o programa de destino, como linguagem básica, linguagem de script, etc. As características do método de interpretação são velocidade de execução lenta e requisitos relativamente altos de hardware do computador.
As linguagens de computador definem regras que descrevem as necessidades das pessoas. Por trás da linguagem está um compilador ou intérprete. A principal função de um compilador ou intérprete é traduzir código e se tornar o principal canal de comunicação entre humanos e computadores. Dessa forma, quando o sistema operacional permanece inalterado, diversas ferramentas de desenvolvimento mostram suas habilidades únicas, mas no final devem gerar código executável de computador. Portanto, não importa em qual linguagem de computador um programa esteja escrito, se ele é bom ou ruim depende em grande parte do compilador ou intérprete dessa linguagem. O compilador Delphi ainda é o compilador mais avançado, melhor e mais eficiente do mundo.
A julgar pelas características das linguagens de alto nível, elas basicamente encapsulam a interface de serviço fornecida pelo sistema operacional e adicionam seus próprios recursos de linguagem com base nisso, como OOP, ponteiros, modos de gerenciamento de memória, etc.
De toda a arquitetura da linguagem Delphi, quando escrevemos programas, usamos VCL diretamente, chamamos a API fornecida pelo sistema operacional, usamos serviços Com ou usamos diretamente a linguagem assembly para completar nosso trabalho.
A principal e melhor coisa do Delphi é a Biblioteca de Componentes Visuais (VCL - Visual Component Library) e a biblioteca de componentes de plataforma cruzada (CLX - aComponent Library for Cross-Platform), que são semelhantes ao Microsoft MFC, mas sua arquitetura é pelo menos dois a três anos mais avançados que o MFC. Ao programar em Delphi, você pode escolher VCL ou não começar do zero. Suponha que você escreva um programa que crie uma janela e exiba "Olá, mundo". Se você não usa VCL, terá que começar chamando CreateWindow da API. Isso é algo problemático, mas depende de seus requisitos. Isso apenas mostra que não é impossível usar programação Delphi sem VCL, como programas de console.
VCL é uma biblioteca de classes poderosa, que é a essência e a cristalização dos recursos orientados a objetos da linguagem Delphi. A estrutura do diagrama de classes é a seguinte:
Esta é uma estrutura de diagrama de classes abreviada, mas é muito representativa. No diagrama de classes, podemos ver que a VCL possui apenas uma raiz - TObjct, e cada uma de suas classes derivadas possui apenas um ancestral. Este é o recurso orientado a objetos da linguagem Delphi. O ancestral mais original de todas as classes é TObjcet, e o método de herança é herança única. O que precisa ser explicado é:
l Embora o design do VCL seja clássico e enorme, não se deixe intimidar por isso. Para ser franco, é uma biblioteca de classes. É uma biblioteca de classes na qual muitas classes relacionadas são reunidas para completar certas funções. Essas classes encapsulam APIs do Windows, chamam serviços COM do Windows ou usam assembly para operar diretamente a memória. Como mencionado anteriormente, podemos escrever programas com ou sem VCL, o que significa que a VCL não é necessária. Se necessário, podemos herdar e estender qualquer uma das classes para torná-la uma classe que atenda aos nossos próprios requisitos. Por exemplo, se quisermos estender a classe TPanal, os eventos correspondentes (OnMouseEnter/OnMouseLeave) podem ser acionados quando o mouse entra e sai, como a função do painel QQ.
u Crie uma nova unidade em [Arquivo]->[Novo]->[Unidade].
u Escreva o código a seguir e salve a unidade como MyPanelUnit.
unidade MeuPanelUnit;
interface
usa Classes, ExtCtrls, Mensagens, Controles;
tipo
TMouseActionEvent = PRocedure(Sender: TObject) do objeto;
TMyPanel = classe(TPanel)
privado
FOnMouseEnter, FOnMouseLeave:
FouseActionEvent;
//Intercepta a mensagem de entrada do mouse
procedimento WMMouseEnter (var Mensagem:
Mensagem); mensagem CM_MOUSEENTER;
//Intercepta a mensagem de movimento do mouse
procedimento WMMouseLeave (var Mensagem:
mensagemCM_MOUSELEAVE;
publicado
propriedade OnMouseEnter: leitura de TMouseActionEvent
FOnMouseEnter escreve FOnMouseEnter;
propriedade OnMouseLeave: leitura de TMouseActionEvent
FOnMouseLeave escreve FOnMouseLeave;
fim;
//Observe que o "R" em "Registrar" deve estar em maiúscula. Este é o único lugar na linguagem Delphi que requer atenção ao tamanho.
Cadastro de procedimentos;
implementação
{TMyPanel}
Cadastro de procedimentos;
começar
//Cadastre o componente na IDE do Delphi e exiba-o no painel "MyControl"
RegisterComponents('MeuControle', [TMyPanel]);
fim;
procedimento TMyPanel.WMMouseEnter(var Mensagem: TMessage);
começar
//Determina se existe código quando o mouse entra e se ele é executado
se atribuído (FOnMouseEnter) então
FOnMouseEnter(Auto);
fim;
procedimento TMyPanel.WMMouseLeave(var Mensagem: TMessage);
começar
//Determina se existe código quando o mouse entra e se ele é executado
se atribuído (FOnMouseLeave) então
FOnMouseLeave(Auto);
fim;
fim.
u Em seguida, clique em [Componente]->[Instalar componente…], conforme mostrado abaixo:
Selecione a unidade que acabamos de criar, MyPanelUnit.pas, em “Nome do arquivo da unidade” e deixe as outras opções como padrão. Em seguida, clique em "OK", selecione "Sim" em "O pacote dclusr.bpk será compilado e instalado, Continuar?" e salve-o após a compilação e instalação. Desta forma, o controle TmyPanel será instalado no Delphi. Role o painel de controle do Delphi até o final e você verá a página de controle MyControl conforme mostrado abaixo:
u Em seguida, crie um novo projeto, clique em [Arquivo]->[Novo]->[aplicativo], arraste MyPanel da página MyControl para o Form, pressione a tecla F11 e mude para a página Eventos, como segue:
Compare-o com o TPanel para ver se há mais eventos OnMouseEnter e OnMouseLeave. Clique duas vezes em OnMouseEnter e escreva o código da seguinte forma:
procedimento TForm1.MyPanel1MouseEnter(Remetente: TObject);
começar
ShowMessage('O mouse entra no MyPanel1');
fim;
Em seguida, pressione F9 para executar, mova o mouse para MyPanel1 e veja o resultado.
É simples assim. Estendemos o TPanel para ter a capacidade de lidar com eventos de entrada e remoção do mouse, para que o VCL não seja misterioso.
l Delphi suporta herança de interface, que de certa forma implementa herança múltipla. Por exemplo, TComponent é definido da seguinte forma:
TComponent = classe(TPersistent, IInterface,
IInterfaceComponentReference)
l Não crie instâncias de classes abstratas. Contanto que um método em uma classe seja um método abstrato, a classe será uma classe abstrata. Por exemplo, TStrings é definido da seguinte forma:
TStream = classe(TObject)
privado
…
protegido
…
público
função Read(var Buffer; Contagem: Longint): Longint virtual;
função Write (const Buffer; Contagem: Longint): Longint virtual;
…
fim;
Enquanto houver uma palavra-chave abstrata na definição de um método, ele será um método abstrato. Não faz sentido usar uma classe abstrata para criar uma instância, porque Read e Write não são implementados e um exemplo aparecerá se for chamado.
(Inacabado, consulte os bastidores do Delphi --- Referência para iniciantes, parte 2 (2))
(Se precisar reimprimir, indique a fonte e o autor http://haitian.myrice.com)