Ver Mensaje Individual
  #6  
Antiguo 12-03-2009
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Reputación: 25
Delphius Va camino a la fama
Hola Karo,
El error que veo está en que que tienes mal declarado la función sumardosnumeros. Veamos, la forma correcta es como sigue:

Código Delphi [-]
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm2 = class(TForm)
  private
    { Private declarations }
  public
    { Public declarations }
  end;

function sumardosnumeros(num1, num2: integer): integer;

var
  Form2: TForm2;

implementation

{$R *.dfm}

function sumardosnumeros(num1, num2: integer): integer;
begin
  result := num1 + num2;
end;

end.

Fíjate que declaro la función despues del la definición del TForm2. Como puede observarse esta declaración pertenece a la sección interface. Compara con el tuyo y notarás que defines la función entre la declaración interface y uses. Eso no es correcto.

Además el otro error está en escribir el cuerpo o código de dicha función dentro del evento OnClick del boton1. No es correcto, si te fijas el código está fuera...
Ahora bien, si sigues los pasos como muestro en mi ejemplo, notarás que en tu form1 ya puedes incluir una referencia en uses hacia unit3 y podrás llamar a la función de forma algo similar a esto:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Unit2, StdCtrls;
// en mi caso es unit2! es un ejemplo recuerda!

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var n1, n2: integer;
begin
  n1 := StrToInt(edit1.Text);
  n2 := StrToInt(edit2.Text);
  ShowMessage(intToStr(sumardosnumeros(n1,n2)));
// llamamos a la función definida en el otro form.
end;

end.

¿Ya leíste un poco al libro que te he recomendado? Ve al capítulo 3, página 57. Allí está bien explicado como se estructura una unit, como se declaran los tipos, variables, procedimientos, funciones, clases y métodos.

Se puede declarar una función o procedimiento de otro, e incluso dentro de un evento... algo parecido a como lo tenías declarado en tu button1 de tu unit3. La cuestión es que si lo haces, sólo estas funciones y procedimientos "internos" sólo podrán ser usados dentro del evento, función o procedimiento principal. Además estos procedimientos y/o funciones internas no necesitan declaración en interface. Algo así:

Código Delphi [-]
function SumarNumeros(Numero1, Numero2: integer): integer;
  // una función interna
  // fíjate el tabulado... ayuda a comprender mejor.
  function EsPositivo(Numero: integer): integer;
  begin
    result := Numero >= 0;
  end;

begin
  if EsPositivo(Numero1) AND EsPositivo(Numero2)
     then result := Numero1 + Numero2
     else result := -1; // digamos que este -1 significa un "error"
end;

Ahora sólo basta con agregar la declaración en la sección interface de la función SumarNumeros para que funcione.

Creo que con esto se entenderá mejor el tema. Si tienes mayores dudas por favor dilo y vamos llendo paso a paso. Recomiendo mucho la lectura de la Cara Oculta.

Si antes de Delphi pasaste por Pascal no creo que te resulte complicado adaptarte.

Espero que se me entienda.

Saludos,
PD: Acostumbrate a emplear las etiquetas delphi:
[ DELPHI ]
tu código aquí...
[ /DELPHI ]

(Sin los espacios entre los corchetes). Notarás como el sistema de los foros solito le dará el formato adecuado... esto ayuda a comprender mejor el código. Como consejo, tabula tu código.
__________________
Delphius
[Guia de estilo][Buscar]

Última edición por Delphius fecha: 12-03-2009 a las 05:00:46.
Responder Con Cita