Me ajudem (exercicio da Faculdade)
É o seguinte quero colocar uma função para chamar ela mesma.
O cliente entra com a letra A e enquanto estiver no edit.text essa letra a função continua se chamando, ela só para se a letra do edit for <>A.
A função funciona o problema que ela depois de um determinado tempo da esse erro.
Olha o codigo.
function TForm2.chamada(pA: string): string;
var Va:string;
begin
if pA = ´A´ then //já tentei com while e não funcionou
begin
Va:=Form1.Edit1.text ;
chamada(Va);
end
else
begin
form2.ShowModal;
end;
end;
O cliente entra com a letra A e enquanto estiver no edit.text essa letra a função continua se chamando, ela só para se a letra do edit for <>A.
A função funciona o problema que ela depois de um determinado tempo da esse erro.
Olha o codigo.
function TForm2.chamada(pA: string): string;
var Va:string;
begin
if pA = ´A´ then //já tentei com while e não funcionou
begin
Va:=Form1.Edit1.text ;
chamada(Va);
end
else
begin
form2.ShowModal;
end;
end;
Anonymous
Curtidas 0
Respostas
Okama
24/02/2003
Se é exercício de faculdade não convém colocarmos o código pronto pra você, mas em todo caso...
insira um TStaticText com Caption := 0 e coloque esse código na primeira chamada da Função.
StaticText1.Caption := IntToStr( StrToInt( StaticText1.Caption) +1);
Vc vai notar a quantidade de vezes que a função é chamada, quando acaba o recurso da máquina ocorre o erro.
Se for pra função ficar testando o conteúdo do Edit faça use um timer, pois pode não haver intervalo para alterar o Edit, pois o aplicativo está ocupado chamando ele mesmo.
insira um TStaticText com Caption := 0 e coloque esse código na primeira chamada da Função.
StaticText1.Caption := IntToStr( StrToInt( StaticText1.Caption) +1);
Vc vai notar a quantidade de vezes que a função é chamada, quando acaba o recurso da máquina ocorre o erro.
Se for pra função ficar testando o conteúdo do Edit faça use um timer, pois pode não haver intervalo para alterar o Edit, pois o aplicativo está ocupado chamando ele mesmo.
GOSTEI 0
Aroldo Zanela
24/02/2003
É o seguinte quero colocar uma função para chamar ela mesma.
O cliente entra com a letra A e enquanto estiver no edit.text essa letra a função continua se chamando, ela só para se a letra do edit for <>A.
A função funciona o problema que ela depois de um determinado tempo da esse erro.
Olha o codigo.
function TForm2.chamada(pA: string): string;
var Va:string;
begin
if pA = ´A´ then //já tentei com while e não funcionou
begin
Va:=Form1.Edit1.text ;
chamada(Va);
end
else
begin
form2.ShowModal;
end;
end;
Criar formulário:
object Edit1: TEdit Left = 12 Top = 16 Width = 121 Height = 21 TabOrder = 0 Text = ´Edit1´ end object Button1: TButton Left = 12 Top = 42 Width = 75 Height = 25 Caption = ´Button1´ TabOrder = 1 OnClick = Button1Click end
Implementar
unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Edit1: TEdit; Button1: TButton; function Chamada( pA: String): String; procedure Button1Click(Sender: TObject); private { Private declarations } i: Integer; public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} function TForm1.Chamada(pA: String): String; begin Inc(i); if i>1000 then Begin ShowMessage(´Mais de 1000 chamadas recursivas. Chega´); exit; end; if pA = ´A´ then begin Chamada(Edit1.Text); end; end; procedure TForm1.Button1Click(Sender: TObject); begin // Faz a primeira chamada i := 0; Chamada(Edit1.Text); end; end.
GOSTEI 0