Recent

Author Topic: RESOLVIDO - formulario := form - Não reconhece procedure de form.  (Read 2608 times)

TeoUrbana

  • New Member
  • *
  • Posts: 23
    • Distração For Fun
Tenho um formulário de pesquisa que poderá ser chamado por vários formulários, então para isto necessito que ele identifique qual foi o formulário que o chamou.
Criei então a seguinte procedure:

Code: Pascal  [Select]
  1. procedure TfrmLocalizaPaciente.FormQueChamou(form: TForm);
  2. begin
  3.    formulario := form;
  4. end;


formulario é uma variável global do tipo TForm para poder ser usada em outros métodos.

Quando tento o seguinte:
formulario.ExibeDadosBasicos - recebo a seguinte mensagem:
uFrmLocalizaPaciente.pas(58,15) Error: Identifier idents no member "ExibeDadosBasicos".

Porém form.ExibeDadosBasicos é aceito.

Porquê? formulário não recebeu de form? (formulario := form;). Se funciona para form, porque não funciona com formulario?
 Dito isto, alguém tem uma idéia do porque e como resolver?
« Last Edit: May 06, 2019, 12:20:32 am by TeoUrbana »

lucamar

  • Hero Member
  • *****
  • Posts: 2141
Re: formulario := form - Não reconhece procedure de form.
« Reply #1 on: February 15, 2019, 11:19:00 pm »
Você precisa transmitir o TForm geral para a classe do seu formulário. Por exemplo, se a sua classe "Dados basics" é chamada TBasicData, você precisa fazer:
Code: Pascal  [Select]
  1. (formulario as TBasicData).ExibeDadosBasicos


Nota: Traduzido pelo Google; pode haver alguns erros.

Original English: You need to cast the general TForm to the class of your form. For example if your "Dados Basicos" class is called TBasicData, you need to do: ..some code ...
« Last Edit: February 15, 2019, 11:21:42 pm by lucamar »
Turbo Pascal 3 CP/M - Amstrad PCW 8256 (512 KB !!!) :P
Lazarus 2.0.4/2.0.6  - FPC 3.0.4 on:
(K|L)Ubuntu 12..16, Windows XP SP3, various DOSes.

TeoUrbana

  • New Member
  • *
  • Posts: 23
    • Distração For Fun
Re: formulario := form - Não reconhece procedure de form.
« Reply #2 on: February 16, 2019, 10:42:09 pm »
Então...
A situação é essa:

Formulário de cadastro:
Code: Pascal  [Select]
  1. procedure TfrmCadPaciente.spdBtnLocalizaPaciente1Click(Sender: TObject);
  2. begin
  3.    try
  4.      frmLocalizaPaciente := TfrmLocalizaPaciente.Create(frmCadPaciente);  // criação do form de cadastro
  5.      frmLocalizaPaciente.FormQueChamou(Self); // passando o formulário de cadastro como parametro para a pesquisa
  6.      frmLocalizaPaciente.ShowModal; // chamando o formulário de pesquisa
  7.    finally
  8.      FreeAndNil(frmLocalizaPaciente);
  9.    end;
  10. end;
  11.  

Formulário de Pesquisa:
Code: Pascal  [Select]
  1.  TfrmLocalizaPaciente = class(TfrmLocalizaBase)
  2.       procedure btnSelecionarClick(Sender: TObject);
  3.       procedure edtLocalizaChange(Sender: TObject);
  4.       procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
  5.       procedure FormShow(Sender: TObject);
  6.    private
  7.  
  8.    public
  9.       procedure FormQueChamou(form: TForm);
  10.    end;
  11.  
  12. var
  13.    frmLocalizaPaciente: TfrmLocalizaPaciente;
  14.    ControlePaciente : TControlePaciente;
  15.    formulario : TForm;
  16.  
  17. implementation
  18.    .
  19.    .
  20.    .
  21. procedure TfrmLocalizaPaciente.FormQueChamou(form: TForm);
  22. begin
  23.    formulario := form; <== form.ExibeDadosBasicos OK  -  formulario.ExibeDadosBasicos ERRO
  24. end;
  25.  
  26. procedure TfrmLocalizaPaciente.btnSelecionarClick(Sender: TObject);
  27. var                            { TODO -oTerence : Depois de escolher o paciente, preecher o cadastro }
  28.    objPaciente : TPaciente;
  29. begin
  30.    ShowMessage(formulario.ClassName); <==== Resposta : TFrmCadPaciente
  31.  
  32.    with grdPacientes.DataSource.DataSet do
  33.    begin
  34.       objPaciente := TPaciente.Create;
  35.       objPaciente.idPaciente := FieldByName('ID_PACIENTE').AsInteger;
  36.    .
  37.    .
  38.    .
  39.     formulario.ExibeDadosBasicos(objPaciente); <==== Error: Identifier idents no member "ExibeDadosBasicos"
  40.  

Como visto acima, no "ShowMessage(formulario.ClassName);" o retorno é TFrmCadPaciente.
Se formulario é do tipo TFrmCadPaciente, porque formulario não está identificando a procedure (pública) ExibeDadosBasicos ?

TeoUrbana

  • New Member
  • *
  • Posts: 23
    • Distração For Fun
Re: RESOLVIDO - formulario := form - Não reconhece procedure de form.
« Reply #3 on: May 06, 2019, 12:22:33 am »
Obrigado ao lucamar pela ajuda.

Identifiquei o problema, que era... havia esquecido de adicionar a unit na clausula uses.

Feito isto o código (formulario As TFrmCadPaciente).ExibeDadosBasicos funcionou perfeitamente.

Obrigado novamente ao lucamar pela atenção.