Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Declarar funciones generales (https://www.clubdelphi.com/foros/showthread.php?t=31519)

Colgueit 10-05-2006 15:56:59

Declarar funciones generales
 
Hola,

Quiero hacer un Modulo de Datos en donde declarar funciones para poderlas usar en todos los formularios. Con los "procedure" todo bien, los pongo en el interface y ya esta... , pero con las "function" no puedo ponerlas en el interface (por lo menos a mi me da error), entonces ¿como hago para que una "function" sea visible por los demas formularios?

Gracias de antemano :)

roman 10-05-2006 16:22:29

Debe funcionar sin problemas. Muéstranos cómo lo haces.

// Saludos

Neftali [Germán.Estévez] 10-05-2006 16:29:28

Cita:

Empezado por Colgueit
...pero con las "function" no puedo ponerlas en el interface (por lo menos a mi me da error)

¿Y cual es el error que te da? Sin él va a ser difícil...

Colgueit 10-05-2006 16:32:52

Lo explico con un ejemplo: Tengo este código declarado en la parte de implementación:
Código Delphi [-]
function EsNif(NIF: String): Boolean;
var
  Numero: Integer;
begin
   Result:= FALSE;
   if TryStrToInt(Copy(NIF,1,Length(NIF)-1),Numero) then
      Result:= Uppercase(Copy(NIF,Length(NIF),1)) = Letra(Numero);
end;

Ahora bien si quiero que sea visible a los demas formularios deberia poner la cabezera ( function EsNif(NIF: String): Boolean; ) en el interface.
Esto es lo que pongo:
Código Delphi [-]
unit ClienteNuevo;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, DBCtrls, Mask, ComCtrls, Buttons, ExtCtrls, DB, DBTables;
type
  TFormClienteNuevo = class(TForm)
   //todas los objetos
   //todos los procedures
   function EsNif(NIF: String): Boolean;

Ahí no me deja poner la cabezera de la función, este es el error que da:
[Error] ClienteNuevo.pas(51): Unsatisfied forward or external declaration: 'TFormClienteNuevo.Letra'

¿hago algo mal? y si no ¿entonces donde pongo la cabezera de la funcion o la funcion entera para que sea visible por los demas formularios?

Gracias!

roman 10-05-2006 16:40:38

Eso, con un procedure te va a dar el mismo error. ¿Por qué no revisas los procedure que sí te funcionan y así ves la diferencia?

// Saludos

seoane 10-05-2006 16:41:25

Debes colocarlo dentro del interface, pero tu ademas lo colocas dentro de la declaracion del formulario. Esto puedes solucionarlo de dos maneras:

Sacandolo fuera:
Código Delphi [-]
unit ClienteNuevo;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, DBCtrls, Mask, ComCtrls, Buttons, ExtCtrls, DB, DBTables;
type
  TFormClienteNuevo = class(TForm)
   //todas los objetos
   //todos los procedures
  end;


  function EsNif(NIF: String): Boolean;

O por el contrario si va a formar parte del formulario, la implementacion de la funcion seria asi:
Código Delphi [-]
function TFormClienteNuevo.EsNif(NIF: String): Boolean;
var
  Numero: Integer;
begin
   Result:= FALSE;
   if TryStrToInt(Copy(NIF,1,Length(NIF)-1),Numero) then
      Result:= Uppercase(Copy(NIF,Length(NIF),1)) = Letra(Numero);
end;

Colgueit 10-05-2006 17:01:56

Conseguido
 
Gracias Seoane, la segunda opción es justo lo que quería saber, ya lo he probado y perfecto. Nunca había usado las funciones con un formulario asignado, no sabia que se podía hacer "function formulario.nombre", vaya paquete estoy hecho jeje.

Gracias a todos


La franja horaria es GMT +2. Ahora son las 06:50:57.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi