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
vBulletin v3.6.8, Derechos ©2000-2013, Jelsoft Enterprises Ltd.