Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Una duda respecto a Funciones (https://www.clubdelphi.com/foros/showthread.php?t=92363)

SaraTorres 07-10-2017 17:16:05

Una duda respecto a Funciones
 
Hola chicos

Por favor, me gustaría saber qué parámetro falta para ejecutar la
procedure TForm1.FormCreate; DENTRO de la Función InicarHotKey
El error me dice: Not enough actual parameters (Los parámetros son insuficientes)

Sin que me hagan preguntas para qué lo quiero, sólo díganme si se puede ejecutar la
procedure dentro de la función. Muchas gracias desde ya chicos.

Código Delphi [-]
FUNCTION InicarHotKey( VAR Params : ARRAY OF PChar; vTitle, p: PChar ) : BOOLEAN;
BEGIN
TForm1.FormCreate();
END;

Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
const
  MOD_ALT = 1;
  MOD_CONTROL = 2;
  MOD_SHIFT = 4;
  MOD_WIN = 8;
  VK_A = $41;
  VK_R = $52;
  VK_F4 = $73;
begin
  id1 := GlobalAddAtom('Hotkey1');
  RegisterHotKey(Handle, id1, MOD_CONTROL, VK_A);
end;

AgustinOrtu 07-10-2017 18:55:31

El FormCreate es un metodo de instancia, que corresponde a un manejador para el evento OnCreate de tu formulario TForm1. Basicamente lo que hace es, cuando se crea un formulario, ejecuta el codigo que se especifica en la implementacion del FormCreate

Por lo general no se invoca explicitamente a estos metodos como estas intentando hacerlo vos, ya que eso lo hace internamente Delphi; estan para permitir al programador meter codigo que se ejecute en determinadas circustancias, de alli el nombre de evento.

El parametro que te falta es el conocido como Sender, que es la instancia que recibio el evento. Como te comentaba, ya que es Delphi quien invoca a estos metodos, es el quien sabe que parametro adecuado poner

ElKurgan 09-10-2017 08:09:23

También puedes probar poniendo esto:

Código Delphi [-]
TForm1.FromCreate(nil);

Pero coincido con Agustín en sus apreciaciones

Un saludo

Caminante 09-10-2017 15:35:19

Cita:

Empezado por SaraTorres (Mensaje 521627)
Código Delphi [-]FUNCTION InicarHotKey( VAR Params : ARRAY OF PChar; vTitle, p: PChar ) : BOOLEAN; BEGIN TForm1.FormCreate(); END;


Código Delphi [-]


Hola solo una observacion.
Al hacer TForm1.create estas creando una nueva instancia de TForm1 pero no lo asignas a nada eso te va a crear problemas de memoria.
Si solo deseas llamar al codigo de ese evento mejor ponlo en otro metodo y lo llamas desde donde quieras.

Saludos

ecfisa 09-10-2017 22:45:12

Hola.

Mas allá del acertado consejo que le han brindado, me dá la impresión que SaraTorres está intentando usar un método normal como si se tratara de un método de clase:

En apariencia, la declaración del método sería:
Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
y el uso que luego intenta:
Código Delphi [-]
  TForm1.FormCreate(); // ¡¡¡ Error !!!
cuando lo correcto es:
Código Delphi [-]
 
  Form1.FormCreate();

Luego en la llamada se requiere enviar un parámetro que puede ser de tipo TObject (y descendientes), de tipo Pointer o nulo como ejemplificó ElKurgan:
Código Delphi [-]
  Form1.FormCreate( nil ); 
  Form1.FormCreate( TObject(115) ); // (1)
  Form1.FormCreate( Pointer('z') );  // (2)
Cabe aclarar que al usar moldeos como en las líneas (1) y (2) hay que tener mucho cuidado de no intentar hacer referencia a propiedades del parámetro Sender dentro del método, vg.:
Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
  ShowMessage( Sender.ClassName ); // ¡¡¡¡ ERROR !!!
  ...

Saludos :)


La franja horaria es GMT +2. Ahora son las 18:31:24.

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