Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Como usar procedure en otro Unit (https://www.clubdelphi.com/foros/showthread.php?t=81679)

bulc 07-12-2012 14:25:39

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:

Código Delphi [-]
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:
Espero sea útil :)

Nelson.

bulc 07-12-2012 17:26:55

Cita:

Empezado por ecfisa (Mensaje 451395)
Hola bulc.

Declara la cabecera de función en la sección de interface de la unidad:

Código Delphi [-]
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,

Cita:

Empezado por 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:
Código Delphi [-]
unit UnitB;

interface

uses ...;

type
  TMiClase = class(TObject)
   Miembro: string;
  end;
...

Unidad A:
Código Delphi [-]
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.

bulc 08-12-2012 15:10:25

Lo he hecho como dices y !voila! va como la seda
 
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:
Código Delphi [-]
procedure TwndLibretas.DBGrid1DblClick(Sender: TObject);
begin
  bnOk.Click;
end;

bulc 09-12-2012 12:39:15

Ese no lo había leído
 
Cita:

Empezado por Casimiro Notevi (Mensaje 451473)
Eso es que no has leido bien los libros ;)

Uno cualquiera en La cara oculta de Delphi 4:
Código Delphi [-]
procedure TwndLibretas.DBGrid1DblClick(Sender: TObject);
begin
  bnOk.Click;
end;

"Nunca es tarde si la dicha es buena"...


La franja horaria es GMT +2. Ahora son las 00:40:17.

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