Forum > Portuguese

RESOLVIDO - formulario := form - Não reconhece procedure de form.

(1/1)

TeoUrbana:
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  [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---procedure TfrmLocalizaPaciente.FormQueChamou(form: TForm);begin   formulario := form;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?

lucamar:
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  [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---(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 ...

TeoUrbana:
Então...
A situação é essa:

Formulário de cadastro:

--- Code: Pascal  [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---procedure TfrmCadPaciente.spdBtnLocalizaPaciente1Click(Sender: TObject);begin   try     frmLocalizaPaciente := TfrmLocalizaPaciente.Create(frmCadPaciente);  // criação do form de cadastro     frmLocalizaPaciente.FormQueChamou(Self); // passando o formulário de cadastro como parametro para a pesquisa     frmLocalizaPaciente.ShowModal; // chamando o formulário de pesquisa   finally     FreeAndNil(frmLocalizaPaciente);   end;end; 
Formulário de Pesquisa:

--- Code: Pascal  [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} --- TfrmLocalizaPaciente = class(TfrmLocalizaBase)      procedure btnSelecionarClick(Sender: TObject);      procedure edtLocalizaChange(Sender: TObject);      procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);      procedure FormShow(Sender: TObject);   private    public      procedure FormQueChamou(form: TForm);   end; var   frmLocalizaPaciente: TfrmLocalizaPaciente;   ControlePaciente : TControlePaciente;   formulario : TForm; implementation   .   .   .procedure TfrmLocalizaPaciente.FormQueChamou(form: TForm);begin   formulario := form; <== form.ExibeDadosBasicos OK  -  formulario.ExibeDadosBasicos ERROend; procedure TfrmLocalizaPaciente.btnSelecionarClick(Sender: TObject);var                            { TODO -oTerence : Depois de escolher o paciente, preecher o cadastro }   objPaciente : TPaciente;begin   ShowMessage(formulario.ClassName); <==== Resposta : TFrmCadPaciente    with grdPacientes.DataSource.DataSet do   begin      objPaciente := TPaciente.Create;      objPaciente.idPaciente := FieldByName('ID_PACIENTE').AsInteger;   .   .   .    formulario.ExibeDadosBasicos(objPaciente); <==== Error: Identifier idents no member "ExibeDadosBasicos" 
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:
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.

Navigation

[0] Message Index

Go to full version