GARANTIR DESCONTO

Fórum Function, como funciona, como usar???? #202614

22/12/2003

0

Bom, antes de mais nada...
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.

Marcelo_j.

Responder

Posts

22/12/2003

Renata Coimbra

bem posso te passar um modelo básico daí vc estuda.
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


Responder

Gostei + 0

22/12/2003

Deus

Eu vou tentar explicar um pouco mais para você, já que a explicação da nossa amiga Renata não se expandiu muito... :)

[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.


Responder

Gostei + 0

23/12/2003

Marcelo_j.

:lol:Agradeço a explicação e vou estudar estes exemplos.

: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!


Responder

Gostei + 0

23/12/2003

Lucas Silva

Citando o exemplo que o dEUS fez ai..

function RetornaDataAtual: TDateTime; 
begin 
  Result := Now; 
end;


procedure Tform1.BtnHoraClickSender: TObject);
 begin
   edit1.text :=  DateToStr(RetornaDataAtual);
 end;



deu pra entender Melhor??


Responder

Gostei + 0

23/12/2003

Beppe

Só fique envergonhado se usar Delphi há mais de 10 anos, se não tem problema não em pedir. :wink:

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;



Responder

Gostei + 0

30/12/2003

Marcelo_j.

Eu não consigo! :cry: :oops: :cry: :cry: :oops: :cry: :oops: :cry:

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.


Responder

Gostei + 0

01/01/2004

Wagner

Cara isso para quem é iniciante como eu, é complicado mesmo, mais eu uso um que funciona legal ve se é igual ao seu.

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


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar