PDA

Ver la Versión Completa : Declarar funciones generales


Colgueit
10-05-2006, 15:56:59
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
10-05-2006, 16:29:28
...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:

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

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:

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