Logo Hardware.com.br
maquinavirtual
maquinavirtu... Membro Senior Registrado
344 Mensagens 1 Curtida

funcao publica em delphi - duvida!!

#1 Por maquinavirtu... 22/07/2009 - 17:03
estou querendo colocar duas funcoes em meu programa uma delas e para formatar cep e outra para formatar telefone.
gostaria de saber como posso colocar essas funcoes para torna-las publicas e usar em todo o meu programa sem ter que estar montando a funcao para cada formulario.
aguardo uma resposta.
as 2 funcoes estao abaixo:

FORMATAR CEP
COLOQUE ESTE CODIGO ABAIXO DA CLAUSULA
IMPLEMENTATION DO FORM DESEJADO
implementation
uses Unitdatamodule;
{$R *.dfm}
//Esta funcao informa Cep neste formato: 99.999-999
function tbFormataCEP(const CEP: string): string;
var
I: integer;
BEGIN
begin
Result := '';
for I := 1 to Length(CEP) do
if CEP[I] in ['0'..'9'] then
Result := Result + CEP[I];
if Length(Result) <> 8 then
raise Exception.Create('CEP inválido.')
else
Result :=
Copy(Result, 1, 2) + '.' +
Copy(Result, 3, 3) + '-' +
Copy(Result, 6, 3);
end;
END;
NO EVENTO ONEXIT DO CAMPO DESEJADO COLOQUE ESSE
CODIGO ABAIXO
procedure Tfmcadastro.DBEditcepExit(Sender: TObject);
BEGIN
begin
DBEditcep.Text := tbFormataCEP(DBEditcep.Text);
end;
END;



FORMATAR TELEFONE
COLOQUE ESTE CODIGO ABAIXO DA CLAUSULA
IMPLEMENTATION DO FORM DESEJADO

//Esta funcao informa Telefone neste formato: 99.9999.9999
function tbFormataFONE(const FONE: string): string;
var
I: integer;
BEGIN
begin
Result := '';
for I := 1 to Length(FONE) do
if FONE[I] in ['0'..'9'] then
Result := Result + FONE[I];
if Length(Result) <> 10 then
raise Exception.Create('Telefone inválido.')
else
Result :=
Copy(Result, 1, 2) + '.' +
Copy(Result, 3, 4) + '-' +
Copy(Result, 4, 4);
end;
END;
NO EVENTO ONEXIT DO CAMPO DESEJADO COLOQUE ESSE
CODIGO ABAIXO
procedure Tfmcadastro.DBEdittelresExit(Sender: TObject);
BEGIN
begin
DBEdittelres.Text := tbFormataFONE(DBEdittelres.Text);
end;
END;
Guitarrista Kurumin
Guitarrista... Super Participante Registrado
837 Mensagens 14 Curtidas
#2 Por Guitarrista...
23/07/2009 - 08:34
Quando for postar um código, coloque ele entre as tags [ code ] [ / code ] sem espaço.

Pra que a função seja pública, coloque a assinatura dela também na interface. Aí onde quiser usar é só declarar a unir na cláusula uses.
Conhecimento é saber que tomate é fruta. Sabedoria é saber que não se coloca tomates em uma salada de frutas.
maquinavirtual
maquinavirtu... Membro Senior Registrado
344 Mensagens 1 Curtida
#3 Por maquinavirtu...
23/07/2009 - 10:56
blz, amigo
mas eu criei uma unit separada (sem form - apenas a unit) uRotinas. coloquei as funcoes que quero utilizar nesta unit.
na clausula uses do frmcliente adicionei uRotinas.

aqui esta o codigo da unit uRotinas
[code=rich]

unit uRotinas;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, uCadPadrao, DB, Grids, DBGrids, ExtCtrls, DBCtrls, StdCtrls, Mask,
ComCtrls, Buttons, Shellapi;
//type
//TfrmCadCliente = class(TfrmPadrao)
//Esta funcao informa Cep neste formato: 99.999-999
//function tbFormataCEP(const CEP: string): string;
//Esta funcao informa Telefone neste formato: 99.9999.9999
//function tbFormataFONE(const FONE: string): string;
//private
{ Private declarations }
//public
{ Public declarations }
//end;

implementation
uses uDtm, uCadClientes, uCadEstcid, uPrincipal;
//Esta funcao informa Cep neste formato: 99.999-999
function tbFormataCEP(const CEP: string): string;
var
I: integer;
BEGIN
begin
Result := '';
for I := 1 to Length(CEP) do
if CEP[I] in ['0'..'9'] then
Result := Result + CEP[I];
if Length(Result) <> 8 then
raise Exception.Create('CEP inválido.')
else
Result :=
Copy(Result, 1, 2) + '.' +
Copy(Result, 3, 3) + '-' +
Copy(Result, 6, 3);
end;
END;
//Esta funcao informa Cep neste formato: 99.999-999
//....................................................................
//Esta funcao informa Telefone neste formato: 99.9999.9999
function tbFormataFONE(const FONE: string): string;
var
I: integer;
BEGIN
begin
Result := '';
for I := 1 to Length(FONE) do
if FONE[I] in ['0'..'9'] then
Result := Result + FONE[I];
if Length(Result) <> 10 then
raise Exception.Create('Telefone inválido.')
else
Result :=
Copy(Result, 1, 2) + '.' +
Copy(Result, 3, 4) + '-' +
Copy(Result, 4, 4);
end;
END;
//Esta funcao informa Telefone neste formato: 99.9999.9999
//.......................................................................

end.

[/code]

porem, no frm cliente quando mando compilar para executar o programa gera esse erro:


[DCC Error] uCadClientes.pas(586): E2003 Undeclared identifier: 'tbFormataCep'

[DCC Error] pAssisTec.dpr(10): F2063 Could not compile used unit 'UNITS\uCadClientes.pas'

aqui esta a procedure da funcao
o que esta em vermelho gera o erro acima:
[code=rich]

procedure TfrmCadCliente.dbeditCepExit(Sender: TObject);
BEGIN
begin
inherited;
dbeditCep.Text := tbFormataCep(DBEditcep.Text);
end;
END;

[/code]

aguardo resposta. Obrigado.
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal