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 08-04-2008
richard187 richard187 is offline
Registrado
 
Registrado: abr 2008
Posts: 5
Poder: 0
richard187 Va por buen camino
Smile evento onclick del button

hola.

soy nuevo en esto del entorno de delphi

me dieron una tarea sobre pilas y colas para ke desarrolle un programa con su interfaz grafica

kisiera ke me ayuden en un problema que tengo al programar el evento onclic del button

tengo las siguientes funciones y procedimietos OPP
el problema ya esta casi resuelto, cree una aplicacion y una unit nueva

la unit uPilas es la siguiente..
( en esto no hay problemas )

Cita:
unit uPilas;
interface
uses StdCtrls, Dialogs;
const maxpila=10;
type
tipoinfo = string ;
TPila = object
private
tope: 0..maxpila;
items:array [1..maxpila]of tipoinfo;
public
constructor init;
function vacia:boolean;
function llena:boolean;
procedure insertar(x: tipoinfo);
function eliminar:tipoinfo;
end;
implementation
constructor TPila.init;
begin
tope:=0;
end;
function TPila.vacia:boolean;
begin
vacia:=(tope=0);
end;
function TPila.llena:boolean;
begin
llena:=(tope=maxpila);
end;
function TPila.eliminar:tipoinfo;
begin
if vacia then ShowMessage('Pila vacia')
else
begin
eliminar:=items[tope];
dec(tope);
end;
end;
procedure TPila.insertar(x: tipoinfo);
begin
if llena then showmessage('Pila llena')
else
begin
inc(tope);
items[tope]:=x;
end;
end;
end.
en la segunda unidad donde se llaman a las funciones lo hice de la siguiente manera..
en realidad es aqui donde me pierdo.. no se como llamar correctamente
en si el programa se ejecuta normal, pero al momento de insertar o eliminar un elemento me sale un error por fa ayudenme

la unit ufPilas de la forma es la siguiente:

Cita:
unit ufPilas;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
eInsertar: TEdit;
bInsertar: TButton;
bEliminar: TButton;
lbMostrar: TListBox;
procedure FormCreate(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure bInsertarClick(Sender: TObject);
procedure bEliminarClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses uPilas;
{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var p: TPila;
begin
p.init;
end;
procedure TForm1.FormActivate(Sender: TObject);
begin
eInsertar.SetFocus;
eInsertar.SelectAll;
end;
procedure TForm1.bInsertarClick(Sender: TObject);
var p: TPila;
begin
if length(eInsertar.Text)=0 then
showmessage('texto en blanco')
else
begin
lbmostrar.items.Append(eInsertar.Text);
p.insertar(eInsertar.Text);
eInsertar.setfocus;
eInsertar.SelectAll;
end;
end;
procedure TForm1.bEliminarClick(Sender: TObject);
var p: TPila; x: Tpila;
begin
p.eliminar();
lbmostrar.Items.delete(lbmostrar.Items.InstanceSize);
end;

end.

espero me ayuden
Responder Con Cita
  #2  
Antiguo 08-04-2008
Avatar de delfib
delfib delfib is offline
Miembro
 
Registrado: abr 2008
Ubicación: Los Mochis Sinaloa
Posts: 12
Poder: 0
delfib Va por buen camino
Intenta con p:= tpila.init; en lugar de llamar solo p.init
Responder Con Cita
  #3  
Antiguo 08-04-2008
richard187 richard187 is offline
Registrado
 
Registrado: abr 2008
Posts: 5
Poder: 0
richard187 Va por buen camino
error al llamar la funcion

en realidad el problema esta cuando intento llamar a la funcion con el ebutton

en los siguientes codigos

Código Delphi [-]
procedure TForm1.bInsertarClick(Sender: TObject);
var p: TPila;
  begin
    if length(eInsertar.Text)=0 then
       showmessage('texto en blanco')
     else
         begin
         lbmostrar.items.Append(eInsertar.Text);
         p.insertar(eInsertar.Text);
         eInsertar.setfocus;
         eInsertar.SelectAll; 
         end;
  end;
procedure TForm1.bEliminarClick(Sender: TObject);
var p: TPila; x: Tpila;
begin
  p.eliminar();
  lbmostrar.Items.delete(lbmostrar.Items.InstanceSize);
end;



este es el error que me sale cuando lo ejecuto:

http://www.sucrevip.net/img/error.JPG
Responder Con Cita
  #4  
Antiguo 08-04-2008
Northern Northern is offline
Miembro
 
Registrado: ene 2006
Posts: 211
Poder: 19
Northern Va por buen camino
Todos los TObject antes de inicializarlos hay que crearlos:

P := TPila.Create;

...después les asignas valores, por ejemplo P.Tope := 0;

y al finalizar los liberas

P.Free;


pero si no les asignas memoria -> crash!!!!


Saludos
Responder Con Cita
  #5  
Antiguo 08-04-2008
richard187 richard187 is offline
Registrado
 
Registrado: abr 2008
Posts: 5
Poder: 0
richard187 Va por buen camino
gracias por la ayuda pero:

El error persiste
creo ke el problema esta en como estoy llamando a las funciones OOP

ahh. y por cierto.. el evento onclick del button bEliminar no realiza su tarea,

les agradeceria si me envian nuevas sugerencias para programar los eventos de los dos button : bInsertar, bEliminar.

gracias..

porfa ayuden..
Responder Con Cita
  #6  
Antiguo 08-04-2008
keyboy keyboy is offline
Miembro
 
Registrado: oct 2004
Posts: 367
Poder: 20
keyboy Va por buen camino
A ver, no hace falta "construir" el objeto con

Código Delphi [-]
p := TPila.Create;

ó

Código Delphi [-]
p := TPila.Init;

De hecho, la primera da un error de Undeclared identifier. Sí, leyeron bien. No hace falta porque el compañero Richard está usando el tipo object, que no sigue el mismo modelo de construcción que TObject.

Cita:
Empezado por ayuda de delphi
You can create instances of an object type using the New procedure and destroy them with the Dispose procedure, or you can simply declare variables of an object type, just as you would with records.
El ejemplo que pone, lo he probado y no me ha presentado errores, siempre y cuando se use P.Init o se de un valor inicial a tope, de lo contrario en la inserción

Código Delphi [-]
items[tope]:=x;

seguramente se accederá a un elemento inexistente del arreglo.

Por otra parte, aunque no me marca errores, se debe usar una variable P que trascienda los eventos OnClick. Al ser variables locales, una no tiene que ver con la otra.

Pero, lo más importante, es que deje de usar el tipo object, que ya no se recomienda, y use las clases tal como todos las conocemos.

Bye
Responder Con Cita
  #7  
Antiguo 08-04-2008
richard187 richard187 is offline
Registrado
 
Registrado: abr 2008
Posts: 5
Poder: 0
richard187 Va por buen camino
a pesar de todas las ayudas..
sobretodo a keyboy que me aclaro algunas dudas..

mi programa sigue con los mismos errores :S

nose que hizo keyboy para que a el mi programa no le presente errores o kisas la version del delphi influye (estoy usando la version 7.2)

ayuden uds que saben del tema

thanks

ah y por cierto.. el uso del tipo object, me recomendo la docente de la materia.. (de uso impresindible para la estructura de los datos)

link de la imagen del error: http://www.sucrevip.net/img/error.JPG

y gracias nuevamente
Responder Con Cita
  #8  
Antiguo 08-04-2008
Northern Northern is offline
Miembro
 
Registrado: ene 2006
Posts: 211
Poder: 19
Northern Va por buen camino
Cierto, ahora que lo miré un poco yo lo haría de esta manera:

Código Delphi [-]
unit uPilas;
interface
uses StdCtrls, Dialogs;
const
  maxpila=10;
type
  tipoinfo = string ;
  TPila = class(Tobject)
  private
    tope: 0..maxpila;
    items:array [1..maxpila]of tipoinfo;
  public
    constructor Create;
    function vacia: boolean;
    function llena: boolean;
    procedure insertar(x: tipoinfo);
    function eliminar: tipoinfo;
  end;
implementation
constructor TPila.Create;
begin
  inherited Create;
  tope:=0;
end;
function TPila.vacia: boolean;
begin
  vacia := (tope = 0);
end;
function TPila.llena: boolean;
begin
  llena := (tope=maxpila);
end;
function TPila.eliminar: tipoinfo;
begin
  if vacia then
    ShowMessage('Pila vacia')
  else
  begin
    eliminar:=items[tope];
    dec(tope);
  end;
end;
procedure TPila.insertar(x: tipoinfo);
begin
  if llena then
    showmessage('Pila llena')
  else
  begin
    inc(tope);
    items[tope] := x;
  end;
end;
end.



La unit ufPilas (la del form):
Código Delphi [-]
unit ufPilas;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
type
  TForm1 = class(TForm)
    Label1: TLabel;
    eInsertar: TEdit;
    bInsertar: TButton;
    bEliminar: TButton;
    lbMostrar: TListBox;
    procedure FormCreate(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure bInsertarClick(Sender: TObject);
    procedure bEliminarClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
uses uPilas;
{$R *.dfm}
var
  P: TPila;
procedure TForm1.FormCreate(Sender: TObject);
begin
  p := TPila.Create;
end;
procedure TForm1.FormActivate(Sender: TObject);
begin
  eInsertar.SetFocus;
  eInsertar.SelectAll;
end;
procedure TForm1.bInsertarClick(Sender: TObject);
begin
  if length(eInsertar.Text) = 0 then
    showmessage('texto en blanco')
  else
  begin
    lbmostrar.items.Append(eInsertar.Text);
    p.insertar(eInsertar.Text);
    eInsertar.setfocus;
    eInsertar.SelectAll;
  end;
end;
procedure TForm1.bEliminarClick(Sender: TObject);
var
  x: Tpila;
begin
  p.eliminar();
  lbmostrar.Items.delete(lbmostrar.ItemIndex);
end;
end.


Así ya funciona...eso creo


Saludos
Responder Con Cita
  #9  
Antiguo 08-04-2008
richard187 richard187 is offline
Registrado
 
Registrado: abr 2008
Posts: 5
Poder: 0
richard187 Va por buen camino
gracias a todos las participaciones todas me fueron sumamente utiles.

ahora me surgio un ultimo problema, talves sea mas de logica que de uso de la sintaxis de delphi, pero quisiera algunos sugerencias..

como puedo programar el evento onclick del button bEliminar, para que elimine los elementos de la pila uno por uno (como corresponde en una pila), puesto que como yo lo puse no funciona correctamente

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
evento OnClick de un TRichEdit aranel OOP 4 01-12-2005 11:43:28
Evento OnClick vtdeleon OOP 4 08-08-2005 23:40:18
Ayuda con el evento OnClick de un ComboBox Striker Varios 1 15-06-2005 16:56:14
Evento onClick jzk OOP 4 27-10-2004 18:46:02
Necesito hacerlo desde el Onclick de un Button. BECERRA OOP 2 20-05-2003 12:48:57


La franja horaria es GMT +2. Ahora son las 09:13:07.


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