Ver la Versión Completa : Como usar procedure en otro Unit
Tengo un procedimiento de usuario para ejecutar sonidos cuyas constantes se colocan en la sección Interface del Unit principal. Luego el procedimiento está en la seccion Implementation ( Procedure Toca(xFile: PChar);) y también en todos y cada una de las unidades secundarias.
Integro en el Uses, sección Implementation de cada unidad secundaria el mismo procedimiento y le coloco la constante que está en el principal.
Funciona perfectamente, pero me gustaría saber como se puede hacer pública la función externa de usuario (Toca(xFile: PChar) de manera que no se tenga que repetir en todas las unidades secundarias. He probado de varias maneras pero sin fortuna.
¿Puede alguien sacarme de dudas?
ecfisa
07-12-2012, 15:45:29
Hola bulc.
Declara la cabecera de función en la sección de interface de la unidad:
unit x;
interface
uses ...;
...
procedure Toca(xFile: PChar);
...
implementation
procedure Toca(xFile: PChar);
begin
...
end;
Esta unidad deberá incluirse en las unidades donde utilices el procedimiento, de ese modo será visible para cada una de ellas.
Saludos.
nlsgarcia
07-12-2012, 16:16:15
bulc,
Revisa esta información:
Unit:
http://www.delphibasics.co.uk/RTL.asp?Name=Unit
Interface:
http://www.delphibasics.co.uk/RTL.asp?Name=Interface
Implementation:
http://www.delphibasics.co.uk/RTL.asp?Name=Implementation
Understanding and Using Functions and Procedures:
http://delphi.about.com/od/beginners/a/subroutines.htm
ANATOMY OF A DELPHI UNIT:
http://delphi.about.com/od/beginners/l/aa051199.htm
Working with units:
http://delphi.about.com/od/beginners/l/aa100103a.htm
How to run procedure from another unit?:
http://stackoverflow.com/questions/1410993/how-to-run-procedure-from-another-unit
Espero sea útil :)
Nelson.
Hola bulc.
Declara la cabecera de función en la sección de interface de la unidad:
unit x;
interface
uses ...;
...
procedure Toca(xFile: PChar);
...
implementation
procedure Toca(xFile: PChar);
begin
...
end;
Esta unidad deberá incluirse en las unidades donde utilices el procedimiento, de ese modo será visible para cada una de ellas.
Saludos.
Una duda. La incluyo en la unidad secundaria, pero ¿en el uses de interface o en el de implementation?
Y nada más que agradecerte tu buena guía. Gracias.
nlsgarcia
07-12-2012, 17:48:31
bulc,
Una duda. La incluyo en la unidad secundaria, pero ¿en el uses de interface o en el de implementation?
En términos prácticos en cualquiera de las dos.
En términos teóricos depende de la ámbito de visibilidad que quieras dar a tu unidad, interface es pública, implementation es privada.
Espero sea útil :)
Nelson.
ecfisa
07-12-2012, 18:02:17
Hola bulc.
En este caso basta con incluirla en la sección de implementación.
Si necesitaras de una declaración de la unidad B para conformar otra de la unidad A que se encuentra en la sección de interface de esta última, tendrías que incluirla en la sección de interface. Ejemplo:
Unidad B:
unit UnitB;
interface
uses ...;
type
TMiClase = class(TObject)
Miembro: string;
end;
...
Unidad A:
unit UnitA;
interface
uses ..., UnitB;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
FClase: TMiClase; // <- Necesario inclusión previa de B
public
end;
...
En este caso, como es lógico, es necesario que la unidad B este incluida con anterioridad al uso de TMiClase ya que de otro modo no sería conocida en ese punto por la unidad A
Saludos.
Gracias por tus indicaciones, muy provechosas. He adaptado el código y va perfectamente, con lo cual uno se ahorra mucho código.
También he descubierto por casualidad (serendipia pura) que se puede usar el código de un botón citando el nombre del botón como prefijo seguido de punto y el nombre del evento. Por ejemplo BitBtn2.Click. Nunca lo había visto especificado en los libros de Delphi que uso. Claro que son un poco obsoletos. De Delphi 4 y 5. Pero bueno, lo menciono por si alguien lo lee.
Saludos,
Bulc.
Casimiro Notevi
08-12-2012, 16:41:19
Eso es que no has leido bien los libros ;)
Uno cualquiera en La cara oculta de Delphi 4 (http://www.intitec.com/varios/La_Cara_Oculta_De_Delphi_4.pdf):
procedure TwndLibretas.DBGrid1DblClick(Sender: TObject);
begin
bnOk.Click;
end;
Eso es que no has leido bien los libros ;)
Uno cualquiera en La cara oculta de Delphi 4 (http://www.intitec.com/varios/La_Cara_Oculta_De_Delphi_4.pdf):
procedure TwndLibretas.DBGrid1DblClick(Sender: TObject);
begin
bnOk.Click;
end;
"Nunca es tarde si la dicha es buena"...
vBulletin v3.6.8, Derechos ©2000-2024, Jelsoft Enterprises Ltd.