Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Paramêtros por referência


Shinhatsubai

Pergunta

Bom dia!

Estou com um exercício de concatenação com passagem de parâmetros por referência mas não sei onde estou errando!

Procurei na internet mas não encontrei nenhum exemplo que me ajudasse! Alguém pode analisar o código e me dar uma luz?

Obrigado!

unit Argumentos_por_EnderecoP;

interface

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

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    procedure Concatenar(Var nome, sobrenome: String);
    procedure Button3Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Concatenar;
begin
  nome          := Form1.Edit1.Text;
  sobrenome     := Form1.Edit2.Text;
  Edit3.Text    := nome + ' ' + sobrenome;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Edit1.Text := '';
  Edit2.Text := '';
  Edit3.Text := '';
  Edit1.SetFocus;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  Application.Terminate;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Concatenar;
end;

end

Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0

ola amigo!

primeiro você esqueceu de declarar as variaveis

nome e sobrenome, um exemplo ficaria assim:

procedure TForm1.Concatenar;
var
nome, sobrenome : string;
begin
  nome          := Form1.Edit1.Text;
  sobrenome     := Form1.Edit2.Text;
  Edit3.Text    := nome + ' ' + sobrenome;
end;

boa sorte e um abrço!

Link para o comentário
Compartilhar em outros sites

  • 0
ola amigo!

primeiro você esqueceu de declarar as variaveis

nome e sobrenome, um exemplo ficaria assim:

procedure TForm1.Concatenar;
var
nome, sobrenome : string;
begin
  nome          := Form1.Edit1.Text;
  sobrenome     := Form1.Edit2.Text;
  Edit3.Text    := nome + ' ' + sobrenome;
end;

boa sorte e um abrço!

Muito obrigado Jaum!

Mas se eu declarando-as dessa forma o Delphi me dá a mensagem de que eu estou redeclarando as variáveis.

E dessa forma o parâmetro não deixaria de ser por referência?

Link para o comentário
Compartilhar em outros sites

  • 0

opa Shinhatsubai no exemplo que t passei, é para uma declaração local.

se você quer utilizalas como global declare elas antes do "implementation" tb se você quizer utilizalas como universal

dai no proximo form você as declara como:

var {variaveis globais neste unit}
  frV2: TfrV2;
  mCROSS, exeDIR, dOri, dDest,
  urlS, ifv, bmpw, bmph : String;
  url : widestring;
  ibtn, iLoc : integer;
  mdt : double;

implementation
{pegas todas as variaveis globais dos unitis abaixo tornando as universais}
uses xMKimdb_DM, grid_form, xMKimdb_studio, xMKimdb_status, xMKimdb_editor,
  xmkIMDB_list, xMKimdb_web;

ate mais abraço!

Link para o comentário
Compartilhar em outros sites

  • 0

Obrigado pela força Jaum!

Estou começando a aprender o Delphi, nesse caso, acho que a intenção não é declara-las como global, mas passar os valores por referência.

O meu professor pediu que concatenassemos as variáveis nome e sobrenome, sendo passador por referência para a formação do nomecompleto.

O código que postei acima está muito fora de conseguir esse objetivo?

Onde estou errando?

Mais uma vez agradeço pela ajuda!

Link para o comentário
Compartilhar em outros sites

  • 0

Olá Shinhatsubai,

pra esse caso seria mas apropriado fazer uma function ao invés de procedure.

Exemplo:

unit Argumentos_por_EnderecoP;

interface

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

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    function Concatenar(nome, sobrenome: string) : string;
    procedure Button3Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function TForm1.Concatenar(nome, sobrenome: string) : string;
begin

  Result := nome + ' ' + sobrenome;

end;   

procedure TForm1.Button2Click(Sender: TObject);
begin
  Edit1.Text := '';
  Edit2.Text := '';
  Edit3.Text := '';
  Edit1.SetFocus;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  Application.Terminate;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Edit3.Text := Concatenar(Edit1.Text,Edit2.Text);
end;

end.

Abs. Progr'amador

Editado por Progr'amador
Link para o comentário
Compartilhar em outros sites

  • 0

Muito obrigado pela força jaumDoDelphi e Progr'amador !!!

@Progr'amador: Deu certinho o código Progr'amador, obrigado.

você diz que é mais apropriado utilizar uma function ao invés de procedure, o código com function funcionou perfeitamente, mas é possível fazer esse programinha funcionar com procedure? No código que você passou, tentei trocar o function por procedure e não deu certo.

A questáo é que neste exercício meu professor pediu fizessemos esse programinha usando procedure.. ainda não aprendemos functions...

Mais uma vez obrigado !!!

Link para o comentário
Compartilhar em outros sites

  • 0

é possivel sim:

unit Argumentos_por_EnderecoP;

interface

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

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    procedure Concatenar(nome, sobrenome: string);
    procedure Button3Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Concatenar(nome, sobrenome: string);
begin

 Edit3.Text := nome + ' ' + sobrenome;

end;  

procedure TForm1.Button2Click(Sender: TObject);
begin
  Edit1.Text := '';
  Edit2.Text := '';
  Edit3.Text := '';
  Edit1.SetFocus;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  Application.Terminate;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Concatenar(Edit1.Text,Edit2.Text);
end;

end.

PS: Faça você mesmo uma analise e procure entender a difrença entre as duas.

Abs. Progr'amador

Editado por Progr'amador
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...