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