PDA

Ver la Versión Completa : Cómo ejecutar un método de un formulario desde otro


alba13
10-10-2007, 10:40:29
hola
necesito ayuda con una aplicacion de delphi. tengo que llamar desde un form a un metodo de otro form. como debo hacerlo? lo hago poniendo form2.nombremetodo y me dice que no identifica dicho metodo. podeis ayudarme por favor?
muchas gracias

Gabo
10-10-2007, 12:04:36
El método del form2, ¿lo has declarado como público?

alba13
10-10-2007, 12:27:17
si. y el form del que llamo al metodo usa el otro form (use)

Ivanzinho
10-10-2007, 13:09:40
¿Puedes poner el código de la llamada al método?

Un saúdo

alba13
11-10-2007, 10:09:35
function veces :integer;
begin
result :=strToInt(Form4.Edit1.Text);
end;

procedure TForm4.Button1Click(Sender:TObject);
begin
form2.visible := true;
form2.calculoPi(veces);
end;

//en el form2
public procedure calculoPi(veces:integer);
begin
end;

dec
11-10-2007, 10:18:20
Hola,

Fíjate que "calculoPi" debe ser un método de "form2", y no un procedimiento cualquiera. Es decir:


procedure calculoPi(veces: integer);
begin
{...}
end;


Es un procedimiento, aunque se implemente en la misma unidad que "form2", pero:


procedure TForm2.calculoPi(veces: integer);
begin
{...}
end;


Ya es un método de "form2", y por tanto puede ser ejecutado como tú requieres:


begin
form2.calculoPi(2);
end;

alba13
11-10-2007, 10:22:34
ahora lo miro.
muchas gracias

alba13
11-10-2007, 10:29:55
supuestamente si yo pongo form2. deberia desplegarse la lista de metodos y componentes publicos no?
es que no ocurre asi en mi programa y eso puede ser q no puede acceder a el no?

dec
11-10-2007, 10:32:50
Hola,

Efectivamente, el método al que quieres acceder debería ser público y no privado.


unit Unit2;

interface

{...}

type
TForm2 = class(TForm)
public
procedure calculoPi(veces: integer);
end;

var
Form2: TForm2;

implementation

{...}

procedure TForm2.calculoPi(veces: integer);
begin
{...}
end;




unit Unit1;

interface

{...}

type
TForm1 = class(TForm)
private
procedure UsaCalculoPi();
end;

var
Form1: TForm1;

implementation

uses
Unit2;

procedure TForm2.UsaCalculoPi();
begin
Form2.calculoPi(2);
end;



Más o menos...

alba13
11-10-2007, 10:37:30
Hola,
ya he declarado el método calculoPi como público, poniendo public en la cabecera. (public procedure calculoPi (veces:integer);

alba13
11-10-2007, 10:38:10
Hola,
ya he declarado el método calculoPi como público, poniendo public en la cabecera. (public procedure calculoPi (veces:integer);

el error que me da es undeclared identifier

dec
11-10-2007, 10:40:44
Hola,

He actualizado mi anterior mensaje mientras tú escribías el último... Echa un vistazo a mi anterior mensaje... fíjate cómo está declarado el método en "Form2" y cómo se usa luego desde un supuesto "Form1". Si aún no te aclaras copia por aquí el código fuente en cuestión, si bien no todo, algo que de una idea de dónde puede estar el problema.

alba13
11-10-2007, 10:44:42
jo, muchas gracias, creo que ya se ha solucionado, no sabia que debia declararlo en la parte Type.
la verdad es que no se mucho de delphi, y me explico, estoy haciendo con una compañera una comparativa de lenguajes de programacion, de los lenguajes delphi, Java, C++ y Visual Basic. Hemos realizado una misma aplicacion en los 4 lenguajes y estamos comparandolos. La verdad es que solo sabemos Java bien.
otra vez, muchas gracias

dec
11-10-2007, 11:05:42
Hola,

Estupendo. Ya nos diréis cómo queda la comparativa. :)

alba13
11-10-2007, 12:11:27
:)hola otra vez
necesito usar un array que va de 1 a numeroPosi (variable que recibo por parametros), como lo declaro? es que al poner en
var
aBB : array[1..numeroPosi] of integer;
me da error, quito y pongo
var
aBB : array of integer;

y funciona, pero luego me dice para inicializarlo.
¿cómo le indico que el array va de 1 a numeroPosi?

dec
11-10-2007, 12:23:18
Hola,

No mezclemos temas en un mismo hilo... revisa la guía de estilo, procura usar etiquetas cuando muestres código fuente...

Pero, en fin, saltémonos la regla y hagamos una excepción. Si quieres inicializar el tamaño de un "Array" y el mismo ha de estar determinado por el valor de una variable que recibes por parámetro, la idea es usar la función "SetLength", que te permite determinar cuán grande es un "Array".

Es decir, puedes hacer algo como esto:


procedure Foo(longitudArray: integer);
var
aBB: array of integer;
begin
SetLength(aBB, longitudArray);
{...}
end;

alba13
11-10-2007, 12:34:26
muchas gracias otra vez