Fórum Function, como funciona, como usar???? #202614
22/12/2003
0
Feliz Natal e Prospero ano Novo a Todos.
Minha duvida e a seguinte:
eu tenho varios exemplos de function, mas não sei como usalas, tipo validar CIC, CPF, PIS, gostaria de saber como usalas em meu programa, se eu tenho que inserir em algum evento, sei lá.
E quando o numero nao for valido como apresentar menssagens Tipo: Numero de CPF Invalido.
En fim gostari de algumas explicações de como usar function.
Obrigado a Todos.
Marcelo_j.
Curtir tópico
+ 0Posts
22/12/2003
Renata Coimbra
uma funcao sempre retorna alguma coisa, tipo True ou False, Valor, String etc.
exemplo:
function Calcula(Valor: Currency): Currency;
begin
result := Valor * 3;
end;
como usar:
Resultado_funcao := Calcula(100,00);
seria mais ou menos assim !
Renata Coimbra
Gostei + 0
22/12/2003
Deus
[i:f8f17ba619]Function[/i:f8f17ba619] nada mais é do que uma palavra-chave que define uma rotina que retorna um valor. Nós podemos ter três tipos de funções:
1. function NomeDaFuncao : Tipo de retorno; {Directivas;}
Uma função que simplesmente retorne um tipo de dados. Somente um valor pode ser obtido através deste tipo de função, e ela não é maleável, uma vez que ela não possuí entrada, apenas saída. Um exemplo de uma função assim seria você receber a data atual:
function RetornaDataAtual: TDateTime; begin Result := Now; end;
Como essa função não possuí entrada, apenas saída, não podemos alterar o resultado de acordo com nossas necessidades. Para tal, vejamos o próximo tipo de função:
2. function NomeDaFuncao(Parametros) : Tipo de retorno; {Directivas;}
Aqui, será definida uma função que recebe um ou mais parâmetros, e retorna um tipo de dados. Somente um valor pode ser retornado. Entretanto, usando a diretiva [i:f8f17ba619]var[/i:f8f17ba619] ou [i:f8f17ba619]out[/i:f8f17ba619] antes dos parâmetros faz com que os parâmetros, ao serem modificados dentro da função, sejam modificados definitivamente. Um exemplo:
function IncrementaESoma(a, b: Integer): Integer; begin a := a + 1; Result := a + b; end; function IncrementaESoma2(var a, var b: Integer): Integer; begin a := a + 1; Result := a + b; end;
Observe que, nos dois tipos de função, o resultado é passado de volta usando uma [i:f8f17ba619]pseudo-variável[/i:f8f17ba619] (isso é, a variável não existe de verdade, ela é uma representação do retorno da função) chamada [i:f8f17ba619]Result[/i:f8f17ba619]. No exemplo acima, vimos duas funções que aceitam entrada: [i:f8f17ba619]IncrementaESoma[/i:f8f17ba619] e [i:f8f17ba619]IncrementaESoma2[/i:f8f17ba619]. A diferença entre as duas é que, se eu tivesse duas variáveis, digamos, [i:f8f17ba619]NumeroUm[/i:f8f17ba619] e [i:f8f17ba619]NumeroDois[/i:f8f17ba619], de valores [i:f8f17ba619]4[/i:f8f17ba619] e [i:f8f17ba619]5[/i:f8f17ba619], respectivamente, após executar as duas funções o retorno seria o mesmo - 10 -, mas a variável [i:f8f17ba619]NumeroUm[/i:f8f17ba619] seria modificada. Por que? Por que na primeira função, a variável [i:f8f17ba619]a[/i:f8f17ba619] é tratada como uma variável local, isso é, ela tem o mesmo valor de [i:f8f17ba619]NumeroUm[/i:f8f17ba619], mas pode ser mudada sem que [i:f8f17ba619]NumeroUm[/i:f8f17ba619] seja afetada. Isso é mudado quando você usa a diretiva [i:f8f17ba619]var[/i:f8f17ba619] nos parâmetros, que vai fazer com que a variável [i:f8f17ba619]a[/i:f8f17ba619], quando afetada, afete também a variável [i:f8f17ba619]NumeroUm[/i:f8f17ba619]. Complicou? :) Vamos ver um exemplo:
i := 4; j := 5; k := IncrementaESoma(i, j); // O que aconteceu aqui? k agora vale 10, // i continua valendo 4 e j continua valendo // 5, e i não foi alterado pois ele foi passado // apenas como parâmetro. k := IncrementaESoma2(i, j); // k continua valendo 10, e j continua valendo // 5, mas agora o valor de i foi alterado. Por // que? Porque dentro da funcao IncrementaESoma2, // i foi passado não apenas como parâmetro, // mas como uma referência. Ou seja, a deixou // de ser apenas um valor igual a i, mas passou // a ser uma referência a i - quando a for alterado, // i também será.
3. type NomeDoTipo = Function{(Parametros)} : Tipo de Retorno {Tipo Objeto};
Bem, aqui complica um pouco mais, por que.. bem, aqui a função se torna ela mesma um tipo de dados, ou seja, ela pode ser passada como um parâmetro para outra função. :) Complicado? Realmente, é. Vamos fazer um trato: aprenda os 2 anteriores primeiro e, se um dia você sentir necessidade de usar essa daqui, você me pergunta. ;)
Abraços, dEUS.
Gostei + 0
23/12/2003
Marcelo_j.
:oops: Mas tenho mas uma duvida...
Quando a função e acionada? :oops:
Sei que quando clico em um botão faço ocorrer um evento. :shock:
Como faço para esta função entrar em ação? :oops:
Em que parte do codigo devo digitala??
Desculpem minha ignorancia, mas só aqui tiro as dúvidas. :oops:
Obrigado!
Gostei + 0
23/12/2003
Lucas Silva
function RetornaDataAtual: TDateTime; begin Result := Now; end; procedure Tform1.BtnHoraClickSender: TObject); begin edit1.text := DateToStr(RetornaDataAtual); end;
deu pra entender Melhor??
Gostei + 0
23/12/2003
Beppe
Quando o mouse, teclado, ou outro dispositivo, ou ainda através do próprio código, interage com o programa, um evento relacionado é disparado. Se você olha no Object Inspector, aba Events, com um objeto no form selecionado, verá os eventos que ele suporta. Se dar dois cliques na caixinha de texto ao lado do nome de um evento, o Delphi cria um manipulador(uma função dentro da classe do form) para o evento.
Por exemplo, selecione um botão, e dê um clique duplo em OnClick.
O Delphi cria para você:
procedure TForm1.Button1Click(Sender: TObject); begin ... MinhaFuncao(´Olá, mundo´); ... end;
Gostei + 0
30/12/2003
Marcelo_j.
Tudo Bem?
Eu digitei uma função para validar o CPF, certo.
Digitei a função antes da procedure...certo?
Agora como faço para que quando eu pular para o proximo campo e o CPF estiver errado me apresente um ShowMessage(´CPF invalido.´).
Sei que o evento e o OnExit do campo.
O que eu não sei e como trabalhar com esta função dentro deste evento.
Exe:
Procedure ...
IF VALIDACPF = FALSE THEN
SHOWMESSAGE(´CPF INVALIDO!´); :oops:
Não sei como usar a função dentro da procedure. :cry:
Obrigado e feliz ano novo a todos.
Gostei + 0
01/01/2004
Wagner
1- Na interface da unit ta assim.
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, .............
[u:6defd76cd6]function RSS00005(Dado : string) : boolean;[/u:6defd76cd6] //adicione
2- Abaixo da implementation crie e função
implementation
{$R *.dfm}
{Valida dígito verificador de CPF}
function RSS00005(Dado : string) : boolean;
var D1 : array[1..9] of byte;
I,
DF1,
DF2,
DF3,
DF4,
DF5,
DF6,
Resto1,
Resto2,
PrimeiroDigito,
SegundoDigito : integer;
begin
Result := true;
if Length(Dado) = 11 then
begin
for I := 1 to 9 do
if Dado[I] in [´0´..´9´] then
D1[I] := StrToInt(Dado[I])
else
Result := false;
if Result then
begin
DF1 := 0;
DF2 := 0;
DF3 := 0;
DF4 := 0;
DF5 := 0;
DF6 := 0;
Resto1 := 0;
Resto2 := 0;
PrimeiroDigito := 0;
SegundoDigito := 0;
DF1 := 10*D1[1] + 9*D1[2] + 8*D1[3] + 7*D1[4] + 6*D1[5] + 5*D1[6] +
4*D1[7] + 3*D1[8] + 2*D1[9];
DF2 := DF1 div 11;
DF3 := DF2 * 11;
Resto1 := DF1 - DF3;
if (Resto1 = 0) or (Resto1 = 1) then
PrimeiroDigito := 0
else
PrimeiroDigito := 11 - Resto1;
DF4 := 11*D1[1] + 10*D1[2] + 9*D1[3] + 8*D1[4] + 7*D1[5] + 6*D1[6] +
5*D1[7] + 4*D1[8] + 3*D1[9] + 2*PrimeiroDigito;
DF5 := DF4 div 11;
DF6 := DF5 * 11;
Resto2 := DF4 - DF6;
if (Resto2 = 0) or (Resto2 = 1) then
SegundoDigito := 0
else
SegundoDigito := 11 - Resto2;
if (PrimeiroDigito <> StrToInt(Dado[10])) or
(SegundoDigito <> StrToInt(Dado[11])) then
Result := false;
end;
end
else
if Length(Dado) <> 0 then
Result := false;
end;
3- e no onexit do edit
procedure Tform.DBEdit4Exit(Sender: TObject);
var sCPF,
cc:string;
begin
sCPF := dbedit4.Text;
if sCPF <> ´ . . -´ then
begin
cc := copy(sCPF,1,3)+copy(sCPF,5,3)+copy(sCPF,9,3)+copy(sCPF,13,2);
if rss00005(copy(sCPF,1,3)+copy(sCPF,5,3)+copy(sCPF,9,3)+copy(sCPF,13,2)) = false then
begin
application.messagebox(´CPF Invalido! Por favor informe o CPF correto´,´Informação´,mb_ok+mb_iconinformation);
dbedit4.setfocus;
end;
end;
end;
Manda ver ai...e depois me avisa se funcionou legal
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)