seja bem vindo ao forum eof, caso nao seja cadastrado se cadastre para poder visualizar todo o conteudo ^^

Você não está conectado. Conecte-se ou registre-se

 » Programação Desktop » Pascal / Delphi » [tutorial] criar linguagem de macro para seus programas

[tutorial] criar linguagem de macro para seus programas

Ver o tópico anterior Ver o tópico seguinte Ir em baixo  Mensagem [Página 1 de 1]

Kodo no Kami

avatar
master
master
e ae galera faz tempo que nao posto nenhum tutorial devido esta super agarrado aqui com alguns projetos, bom nesse tutorial vou ensinar criar uma linguagem simples de macro para seus programas no caso vou usar o delphi porem pode ser usado qualquer linguagem ou ide, a linguagem de macro ela serve para deixar o programa mais dinamico voce pode manipular todos os componentes em um programa via codigo, para começar criamos um programa simples que tem 3 edits e um botao nesse programa ele soma o edit1 com edit2 e retorna o resultado no edit3 o botao que faz a açao de somar

[Você precisa estar registrado e conectado para ver esta imagem.]

no evento onclick do botao to usando o seguinte codigo

Código:
procedure TForm1.Button1Click(Sender: TObject);
begin
   edit3.Text := IntToStr(StrToInt(Edit1.Text) + StrToInt(Edit2.Text));
end;

agora criamos mais um botao que vai ativar a macro e um memo onde vamos colocar nosso codigos

[Você precisa estar registrado e conectado para ver esta imagem.]

como os componentes sao estaticos ou seja nao muda entao o nome de referencia dentro da nossa linguagem tambem nao precisa mudar no caso quando eu usar o nome X eu vou estar me referindo ao componente edit1, Y ao componente edit2, R ao componente edit3, btn ao componente botao, na nossa linguagem se os primeiros caracter for igual ao nome de referencia seguido de um igual indica atribuição para aquele componente exemplo

Código:
X=315

seria equivalente ao

Código:
edit1.text := '315';

como so existe 3 componentes para serem analisado é muito mais facil, quando existe muitos componente temos que fazer uma analise do componente principalmente componente gerados em tempo de execução, no evento onclick do botao que vai executar a macro geramos um loop para analisar todas as linhas (lembro que cada codigo da minha linguagem vai ser separada pela quebra de linha, poderia fazer uma linguagem mais complexa que usa ponto e virgula para separar cada codigo como perl)

Código:
procedure TForm1.Button2Click(Sender: TObject);
var cont: Integer;
begin
   cont := 0;
   while (cont < memo1.Lines.Count) do
   begin
       Inc(cont,1);
   end;
end;

agora nosso programa ta lendo todas as linhas so a gente comparar e executar cada ação, a primeira ação que vamos criar vai ser o comentario vamos usar o simbolo de jogo da velha e toda vez que nosso programa achar o jogo da velha vai ignorar o codigo e passar para proximo linha (para ficar menos codigo vamos fazer uma logica inversa ao inves de achar o jogo da velha vamos falar para ele fazer a açao quando nao achar e se achar o jogo da velha nao executa o escopo do if

Código:
procedure TForm1.Button2Click(Sender: TObject);
var cont: Integer;
    comando: string;
begin
   cont := 0;
   while (cont < memo1.Lines.Count) do
   begin
       comando:= memo1.Lines[cont];
       if (not(comando[1] = '#')) then
       begin
       end;
       Inc(cont,1);
   end;
end;

temos que comparar agora se as primeiras linhas bate com um atribuição para isso basta checar se o primeiro caracter nesse caso é X, Y ou R e segundo é um igual

Código:
procedure TForm1.Button2Click(Sender: TObject);
var cont: Integer;
    comando: string;
begin
   cont := 0;
   while (cont < memo1.Lines.Count) do
   begin
       comando:= memo1.Lines[cont];
       if (not(comando[1] = '#')) then
       begin
         if ((comando[1] = 'X') and (comando[2] = '=')) then
         begin
         end

         else if ((comando[1] = 'Y') and (comando[2] = '=')) then
         begin
         end

         else if((comando[1] = 'R') and (comando[2] = '=')) then
         begin
         end
       end;
       Inc(cont,1);
   end;
end;

agora recortamos o texto depois do igual e atribuimos ao componente equivalente, para recortar basta usar função copy

Código:
procedure TForm1.Button2Click(Sender: TObject);
var cont: Integer;
    comando, comando2: string;
begin
   cont := 0;
   while (cont < memo1.Lines.Count) do
   begin
       comando:= memo1.Lines[cont];
       if (not(comando[1] = '#')) then
       begin
         if ((comando[1] = 'X') and (comando[2] = '=')) then
         begin
           comando2 := copy(comando,Pos('=',comando)+1,Length(comando));
           Edit1.Text := comando2;
         end

         else if ((comando[1] = 'Y') and (comando[2] = '=')) then
         begin
           comando2 := copy(comando,Pos('=',comando)+1,Length(comando));
           Edit2.Text := comando2;
         end

         else if((comando[1] = 'R') and (comando[2] = '=')) then
         begin
           comando2 := copy(comando,Pos('=',comando)+1,Length(comando));
           Edit3.Text := comando2;
         end
       end;
       Inc(cont,1);
   end;
end;

[Você precisa estar registrado e conectado para ver esta imagem.]

agora crimaos outra condição if que vai chamar o evento do botao no caso vou comparar os 3 primeiros caracter se for igual BTN ele chama o evento click do botao1

Código:
procedure TForm1.Button2Click(Sender: TObject);
var cont: Integer;
    comando, comando2: string;
begin
   cont := 0;
   while (cont < memo1.Lines.Count) do
   begin
       comando:= memo1.Lines[cont];
       if (not(comando[1] = '#')) then
       begin
         if ((comando[1] = 'X') and (comando[2] = '=')) then
         begin
           comando2 := copy(comando,Pos('=',comando)+1,Length(comando));
           Edit1.Text := comando2;
         end

         else if ((comando[1] = 'Y') and (comando[2] = '=')) then
         begin
           comando2 := copy(comando,Pos('=',comando)+1,Length(comando));
           Edit2.Text := comando2;
         end

         else if((comando[1] = 'R') and (comando[2] = '=')) then
         begin
           comando2 := copy(comando,Pos('=',comando)+1,Length(comando));
           Edit3.Text := comando2;
         end
         else if((comando[1] = 'B') and (comando[2] = 'T') and (comando[3] = 'N')) then
         begin
           button1.Click;
         end;
       end;
       Inc(cont,1);
   end;
end;

[Você precisa estar registrado e conectado para ver esta imagem.]

podemos repara que pelo nosso codigo ele atribui automaticamente e faz a soma, no caso esse é so um exemplo basico de uma linguagem de macro que nao tem muita utilidade nesse programa se fosse um maior ate seria legal kkkk, no caso a gente tambem pode melhorar essa linguagem em diversos pontos um deles seria atribuir o valor de outro componente exemplo X=Y ou criar variaveis e estruturas condicionas e de repetição ou ate deixar elas mais modular usando bibliotecas externas ^^

by kõdo no kami


_________________ASSINATURA_________________
[Você precisa estar registrado e conectado para ver esta imagem.]
[Você precisa estar registrado e conectado para ver esta imagem.]

Contato:
Spoiler:

Contato:
Facebook: [Você precisa estar registrado e conectado para ver este link.]
Skype: hackerfts315
http://endoffile.umforum.net

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo  Mensagem [Página 1 de 1]

Permissão deste fórum:
Você não pode responder aos tópicos neste fórum