Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-05-2006
lanp_prospero lanp_prospero is offline
Registrado
 
Registrado: abr 2006
Posts: 6
Poder: 0
lanp_prospero Va por buen camino
problema con el visual

hola,
quisiera alguien me ayudase con algun codigo de ejemplo de como hacer una llmada desde el visual a metodos de una clase, la verdad estoy iniciandome en delphi, pero apenas estoy dando tumbos en vano.

ejemplo:
una clase que sume dos numero, un boton que cuando se le de click, sume dos numeros que se entren por dos Edit. es decir algo sencillo.

gracias
Responder Con Cita
  #2  
Antiguo 14-05-2006
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Espero que te sirva

Bienvenido a clubdelphi.
Los moderadores siempre recomiendan que los miembros lean la guia de estilo. Yo no soy moderador... pero igual te la recomiendo...

Bueno, como dices que recien te estas iniciando en Delphi, te recomiendo también que leas "La Cara Oculta de Delphi 4". Buscala en google... que la vas a hallar muy rápido. Es un buen documento (en pdf) que te va a servir para introducirte en la mayoría de los temas.

A ver... dejame ver si entiendo: ¿tu quieres que desde la interfaz se envien unos datos hacia una clase?
Si es así, yo declararía en un módulo (unidad) aparte una clase:
Código Delphi [-]
Unit NombreUnidad;
 
type
  TMiclase = TClass;
    public
    function suma(a,b:integer): integer;
  end;

y su declaración:
Código Delphi [-]
function MiClase.suma(a,b:integer): integer;
  begin
   result := a + b;
  end;

Después, en la aplicación que corresponde haces uso de dicha unidad:
Código Delphi [-]
uses NombreUnidad;

Y en el cuerpo del clik del boton pones algo como:
Código Delphi [-]
var InstanciaClase: TMiClase;
     nro1,nro2:integer;
begin
  nro1 := IntToStr(Edit1.text);
  nro2 := IntToStr(Edit2.text);
  InstanciaClase := TMiClase.Create;
  showMessage(IntToStr(InstanciaClase.suma(nro1;nro2)));

El código se puede refinar... pero como para que se entienda más o menos bien... lo declaré así.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #3  
Antiguo 14-05-2006
lanp_prospero lanp_prospero is offline
Registrado
 
Registrado: abr 2006
Posts: 6
Poder: 0
lanp_prospero Va por buen camino
Conseguido

gracias Delphius, con esto resolvi, aunque me hubiese gustado mas, sin pasarle los parametros por referencia al metodo, ponerlos como atributos de la clase, que era como estaba tratando de hacerlo. pero bueno, vere que sale.

Salu2s
Responder Con Cita
  #4  
Antiguo 14-05-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Siguiendo el estilo de Delphius:

Código Delphi [-]
Unit NombreUnidad;
 
type
  TMiclase = TClass;
    private
      Fa:integer;
      Fb:integer;
    public
    function Suma: integer;
    property A:integer read Fa write Fa;
    property B:integer read Fb write Fb;
  end;

En principio Fa y Fb no proporciona nada nuevo, pero bueno....

La funcion devolverá Fa+Fb que son las variables privadas.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #5  
Antiguo 15-05-2006
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Wink Algo más...

Puedes si deseas redefinir el constructor para setear con algún valor las variables privadas. Para ello lo declaras como sigue:
Código Delphi [-]
constructor create(a,b:integer);
begin
Fa := a;
Fb := b;
end;
Un pequeño aporte...
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #6  
Antiguo 15-05-2006
lanp_prospero lanp_prospero is offline
Registrado
 
Registrado: abr 2006
Posts: 6
Poder: 0
lanp_prospero Va por buen camino
Delphius:
eso intente hacer pero me da un explote, tengo puesto este codigo.

//aqui defino la clase

unit Unit2;
interface
Type
TNumeros = class
private
protected
Fa: integer;
Fb: integer;
public
constructor Create(_Fa, _Fb: integer);
function Suma: integer;
property A:integer read Fa write Fa;
property B:integer read Fb write Fb;
published
end;

implementation
{ TNumeros }
constructor TNumeros.Create(_Fa, _Fb: integer)
begin
Self.Fa:=_Fa;
Self.Fb:=Fb;
end;
function TNumeros.Suma: integer;
begin
Result:=Fa + Fb;
end;
end.

//aqui defino la parte de la forma

unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Unit2, StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
Edit3: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
numeros: TNumeros;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
numeros.Create(StrToInt(Edit1.Text), StrToInt(Edit2.Text));
Edit3.Text:=IntToStr(numeros.Suma);
end;
end.

mira a ver y dime que podria ser.

gracias
Responder Con Cita
  #7  
Antiguo 15-05-2006
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Pues... que error te produce?

Antes que nada... usa las etiquetas [ DELPHI ] y [ /DELPHI ]para que el código que ingresas, sea más legible (debes ingresar sin espacios entre los corchetes.) Pues, mira como queda:

Código Delphi [-]
unit Unit2;
interface
Type
TNumeros = class
private
protected
Fa: integer;
Fb: integer;
public
constructor Create(_Fa, _Fb: integer);
function Suma: integer;
property A:integer read Fa write Fa;
property B:integer read Fb write Fb;
published 
end;

implementation
{ TNumeros }
constructor TNumeros.Create(_Fa, _Fb: integer)
begin
Self.Fa:=_Fa;
Self.Fb:=Fb;
end;
function TNumeros.Suma: integer;
begin
Result:=Fa + Fb;
end;
end.

Código Delphi [-]
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Unit2, StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
Edit3: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
numeros: TNumeros;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
numeros.Create(StrToInt(Edit1.Text), StrToInt(Edit2.Text));
Edit3.Text:=IntToStr(numeros.Suma);
end;
end.

¿Pues, que error te produce?
A simple vista el código parece estar bien... ahora no tengo Delphi abierto... y no tengo mucho tiempo como para verlo. En cuanto pueda darte más mano, me fijo.
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #8  
Antiguo 15-05-2006
lanp_prospero lanp_prospero is offline
Registrado
 
Registrado: abr 2006
Posts: 6
Poder: 0
lanp_prospero Va por buen camino
errores

haber como te explico, sin tocar nada en ese codigo, me da un eeror en el {begin} del constructor en la declaracion, algo asi como esta en la imagen que adjunto aqui, la que dice error simple. ahora, cuando en la implementacion del costructor termino la linea contructor TNumeros.Create(....); con un ; como lo hice aqui ahora me da el eeror que en la imagen se llama explote, si le doy F9 nuevamente me da el ultimo error.

no se si soy bastante explicito, pero de igual forma si puedes probarlo, me dices que puede ser.

gracias
Responder Con Cita
  #9  
Antiguo 15-05-2006
lanp_prospero lanp_prospero is offline
Registrado
 
Registrado: abr 2006
Posts: 6
Poder: 0
lanp_prospero Va por buen camino
bueno las imagenes no salen, no se por que, de todas formas pruebalo haber si te dice algo, sino debe de ser algun problema con mi delphi
Responder Con Cita
  #10  
Antiguo 15-05-2006
Avatar de Héctor Randolph
[Héctor Randolph] Héctor Randolph is offline
Miembro Premium
 
Registrado: dic 2004
Posts: 882
Poder: 20
Héctor Randolph Va por buen camino
Solamente falta ajustar unos pequeños detalles para que trabaje correctamente

Prueba de esta forma:

Código Delphi [-]
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit3: TEdit;
    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
  numeros: TNumeros;
begin
  {Corrige esta línea}
  numeros:=TNumeros.Create(StrToInt(Edit1.Text), StrToInt(Edit2.Text));
  Edit3.Text:=IntToStr(numeros.Suma);
  numeros.Free; {Agrega esta línea}
end;

end.

Código Delphi [-]
unit Unit2;

interface

Type
  TNumeros = class
    private
    protected
      Fa: integer;
      Fb: integer;
    public
      constructor Create(_Fa, _Fb: integer);
      function Suma: integer;
      property A:integer read Fa write Fa;
      property B:integer read Fb write Fb;
    published
end;

implementation

{TNumeros }
constructor TNumeros.Create(_Fa, _Fb: integer);
begin
    Self.Fa:=_Fa;
    Self.Fb:=_Fb; {Corrige esta línea}
end;

function TNumeros.Suma: integer;
begin
  Result:=Fa + Fb;
end;

end.

Saludos
Responder Con Cita
  #11  
Antiguo 15-05-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Roman comentó en un hilo anterior que al constructor no debe pasarse los parámetros que son propiedades (no encuentro el link del mensaje). La Razón es bien obvia... si tenemos 9 operandos A, B,C,D,E,F,G..., ¿tambien se los pasamos como parámetros al Create?.

Inicialmente no estaba de acuerdo con esa forma de pensar.... pero el tiempo le da la razón a los veteranos

Además si añadimos código cuando se le da un valor al parámetro A ó B tambien tendríamos que modificar el Create... duplicamos y enrevesamos el código.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #12  
Antiguo 15-05-2006
lanp_prospero lanp_prospero is offline
Registrado
 
Registrado: abr 2006
Posts: 6
Poder: 0
lanp_prospero Va por buen camino
problema resuelto

gracias Hector Randolph, con esto resolvi.

gracias nuevamente.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Delphi VS Visual Basic woody Debates 137 18-03-2008 14:54:00
Delphi V/s Visual Basic lavtaro Varios 13 02-05-2006 14:30:47
Creando componente visual piccolo2101 Varios 4 25-01-2006 14:13:45
Problema con librería en Visual C++ llauraff Varios 0 16-09-2004 14:36:20
Tablas dbf-fpt (¿Visual Fox Pro?) ogorut Tablas planas 2 24-11-2003 10:04:22


La franja horaria es GMT +2. Ahora son las 01:28:45.


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
Copyright 1996-2007 Club Delphi