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