• 0
Sign in to follow this  
acss

(Resolvido) Transformar codigo em função ou procedure

Question

 

Olá a todos tem como transformar o código abaixo em função ou procedure, o programa que estou desenvolvendo
tera várias paginas e quase todos itens variaveis de cada página vai precisar de fazer código semelhante a esse
abaixo que estou testando, mudando apenas os componentes, os valores continuram sendo os mesmos,

precisaria da ajuda de vocês pra ficar mais organizado e menor o programa sem ter que ficar repentindo as
mesmas instruções para cada item se não vai fica muito grande e ruim de dar uma manutenção se precisar futuramente,

uma função ou procedure  ou outra alternativa já resolveria, agradeço a quem puder me dá ajuda

 

 

 

procedure TForm1.Button22Click(Sender: TObject);
 var
   testando1,testando2,testando3:integer  ;
  Begin

   begin

     testando1:= strtoint(label33.Caption);
     testando2:= strtoint(label2.Caption);
     testando3:= strtoint(label3.Caption);


      if (testando1=33) or (testando2 =33) or (testando3 =33)then memo3.lines.add ('33');
      if (testando1=22) or (testando2 =22) or (testando3 =22)then memo3.lines.add ('22');
      if (testando1=11) or (testando2 =11) or (testando3 =11)then memo3.lines.add ('11');
      if (testando1=9)  or (testando2 =9)  or (testando3 =9) then memo3.lines.add ('9');
      if (testando1=8)  or (testando2 =8)  or (testando3 =8) then memo3.lines.add ('8');
      if (testando1=7)  or (testando2 =7)  or (testando3 =7) then memo3.lines.add ('7');
      if (testando1=6)  or (testando2 =6)  or (testando3 =6) then memo3.lines.add ('6');
      if (testando1=5)  or (testando2 =5)  or (testando3 =5) then memo3.lines.add ('5');
      if (testando1=4)  or (testando2 =4)  or (testando3 =4) then memo3.lines.add ('4');
      if (testando1=3)  or (testando2 =3)  or (testando3 =3) then memo3.lines.add ('3');
      if (testando1=2)  or (testando2 =2)  or (testando3 =2) then memo3.lines.add ('2');
      if (testando1=1)  or (testando2 =1)  or (testando3 =1) then memo3.lines.add ('1')

     else
       memo3.lines.add ('');
      end;
       end;   

Share this post


Link to post
Share on other sites

4 answers to this question

Recommended Posts

  • 0

Meu amigo, voce precisa ler mais sobre os comandos do delphi  ... por falta de conhecimento voce acaba fazendo um código extenso sem necessidade

veja os links sobre o comando Set Of do delphi

https://drgarcia1986.wordpress.com/2011/12/09/definindo-conjuntos-de-dados-em-delphi/

http://www.delphibasics.co.uk/RTL.asp?Name=set

outra forma

http://www.delphibasics.co.uk/Article.asp?Name=Sets

aplicando esse comando ao seu código ficaria assim:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    Label33: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    procedure NumX(NumZ : integer);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  testando1, testando2, testando3: integer ;
implementation

{$R *.dfm}

procedure TForm1.NumX(NumZ : Integer);
var
  Numeros : set of 1..33;
begin
  Numeros := [1,2,3,4,5,6,7,8,9,11,22,33];

  if NumZ In Numeros then
     Memo1.Lines.Add(inttostr(NumZ));
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   testando1 := strtoint(label33.Caption);
   testando2 := strtoint(label2.Caption);
   testando3 := strtoint(label3.Caption);

   NumX(testando1);
   NumX(testando2);
   NumX(testando3);
end;

end.

abraço

Share this post


Link to post
Share on other sites
  • 0

Tudo bem Jhonas, muito obrigado pelas suas dica e pela sua ajuda, já comecei dar estudada nos links que você me passou, realmente tem bastante comandos importantes pra conheçer e estudar meu estudo está começo e tem muita coisa pra aprender quero ter logo condições de frequentar escola de programação, sou meio teimoso ai fico olhando os livros e tentando de tudo que é jeito, mais os poucos que vou aprendendo e acertando já é uma grande conquista pra mim, mesmo parecendo que muitas vezes estou dando murro em ponta de faca é bem complicado programação pra mim, mais não vou desistir porque faz parte da vida cada aprendizado dos tombo que a que a gente leva, e conforme vou aquirinndo prática vai ficando fácil e talvez na proxima vida não precise ralar tanto para aprender as mesmas coisas, já faz uns 4 meses ou mais que estou batendo nesse programa está funcionando quas tudo certinho tem bastante coisas nele já dá uma 15 páginas e falta poucas coisas pra acrescentar nele pelo jeito vai ficar pronto só ano que vem é muita coisa mesmo, mas está ficando bem esse programa, então estava querendo dar uma enxugada no código que já tinha feirto para ficar mais fácil de fazer manuntenção se precisar uma hora,

Ainda não connhecia esse comando que você me mostrou , é porque uso Lazarus que é gratuito e tudo está inglês ai preciso ficar fazendo as traduções pelo google, ainda não li nada sobre esse comando das páginas que traduzi.

Já tive o delphi7 só que deu problema no cd e o delphi tinha bastante ajuda e vários exemplos que ajudava bastante, mais esqueci a maioria deveria ter anotado, gostava de treinar nele, agora uso só o Lazarus ele é muito bom também.

------------

Jhonas ficou bem simplificado mesmo o código você me passou e ti agradeço, deu só essa mensagem de erro na hora copilação

idendifier not found "Memo1"

 

Não teria como tornar onde está o memo1 em variável para ser usado apenas no procedure dos Buttons das paginas que precisar dessas faixas de valores ? tentei fazer aqui mas não consegui

queria usar apenas uma procedure NumX para servir para todas outras páginas do Tpanel e cada um terá um memo e um button diferente que vai precisar pegar apenas aquela faixa de valores que estão no procedure NumX


Ai já enxuga bastante coisas que já tinha feito usado o comando if,

 

Agradecido se tiver condições e se não tiver não tem problema, tudo de bom pra você e os amigos ai do fórum, obrigado

Share this post


Link to post
Share on other sites
  • 0

Não teria como tornar onde está o memo1 em variável para ser usado apenas no procedure dos Buttons das paginas que precisar dessas faixas de valores ?

Voce pode trocar o Memo por um TstringList ( lista de strings )

https://translate.google.com.br/translate?hl=pt-BR&sl=en&u=http://www.delphibasics.co.uk/RTL.asp%3FName%3Dtstringlist&prev=search

queria usar apenas uma procedure NumX para servir para todas outras páginas do Tpanel e cada um terá um memo e um button diferente que vai precisar pegar apenas aquela faixa de valores que estão no procedure NumX

Voce vai usar a procedure NumX para todas ... como voce quer usar um Memo e um Button para cada um, então voce terá que fazer essa modificação:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    Label33: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Button2: TButton;
    Memo2: TMemo;
    procedure NumX(NumZ : integer);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  testando1, testando2, testando3: integer ;
  Lista : TStringlist;
implementation

{$R *.dfm}

procedure TForm1.NumX(NumZ : Integer);
var
  Numeros : set of 1..33;
begin
  Numeros := [1,2,3,4,5,6,7,8,9,11,22,33];

  if NumZ In Numeros then
     Lista.Append(inttostr(NumZ));
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   testando1 := strtoint(label33.Caption);
   testando2 := strtoint(label2.Caption);
   testando3 := strtoint(label3.Caption);

   Lista := TStringList.Create;

   NumX(testando1);
   NumX(testando2);
   NumX(testando3);

   Memo1.Lines.Add(Lista.Text);
   Lista.Free;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
   testando1 := strtoint(label33.Caption);
   testando2 := strtoint(label2.Caption);
   testando3 := strtoint(label3.Caption);

   Lista := TStringList.Create;

   NumX(testando1);
   NumX(testando2);
   NumX(testando3);

   Memo2.Lines.Add(Lista.Text);
   Lista.Free;
end;

end.

OBS: Não sei se voce terá outros Labels diferentes nas outras paginas, por isso estou repetindo os labels no Button2.. se for diferente voce faz a modificação

Como não sei como é seu projeto, o código poderia ser ainda mais simplificado e compactado.

abraço

Share this post


Link to post
Share on other sites
  • 0

Obrigado Jhonas testei ficou muito bom usando lista, agora vou gastar uns dias para ir substituindo o código no programa por esse novo, vai enxugar bastante o código

Sim terá labels diferentes,  para cada item do programa tem um conjunto de 2 ou 3 labels que recebe os valores,  vou dar mais uma estudada nele e alguma coisa ali acho vai dar para compactar mais pra frente,  mas fazer com calma que é muita coisa pra mim.

Muito obrigado mesmo pela sua ajuda Jhonas,  vai me ajudar bastante nesse e nos outros que poderá vir mais pra frente

 

 

 

 

 

 

 

 

 

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this