Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 24-04-2007
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
llamar a procedure desde otra procedure

Yo sigo preguntando . Estoy aprendiendo muchisimo con vosotros.

Me he encontrado que, haciendo un evento onkeypress, por ejemplo, necesito llamar desde ahi a otro procedimiento, pero no se ocmo se puede hacer, quiza me estoy saltando las leyes de la programacion?.
Responder Con Cita
  #2  
Antiguo 24-04-2007
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
¿Y cual es tu problema?
¿No sabes como invocarlo? ¿O es que te falla?

Es sencillo.. como en cualquier lenguaje....

Código Delphi [-]
procedure TForm1.Button1KeyPress(Sender: TObject; var Key: Char);
begin
  Procedimiento_Hacer_Algo(Algun_parametro_si_se_necesita);
end;

Creo que a lo mejor no pasa por esto la pregunta... lo veo muy simple...
Ya dirás si es esto...

Espero ser de ayuda.
Saludos
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #3  
Antiguo 24-04-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Por ejemplo si haces un procedimiento:
Código Delphi [-]
procedure TFMainForm.Construyemensaje;
begin
MessageDlg('Este es un emnsaje.',[mbOK],0);
end;
Para llamar a ese procedimiento solo tienes que poner el nombre:
Código Delphi [-]
procedure TFMainForm.FormCreate(Sender: TObject);
begin
Construyemensaje;
End;
Saludos
Responder Con Cita
  #4  
Antiguo 24-04-2007
Kenobi Kenobi is offline
Miembro
 
Registrado: mar 2007
Posts: 191
Poder: 18
Kenobi Va por buen camino
yo creo que si es lo que pregunta....

hace un tiempo me preguntaba lo mismo y cuando veo un lenguaje desconocido me lo pregunto, como dice el amigo anterior asi se llama un procedure y añado una funcion se llama asi ....

Variable:=Funcion_Predefinida(Parametro);

con la salvedad que como ya sabras esta "variable" local o global debe ser del mismo tipo que el devuelto por la funcion....

ahora otra cosa que si que no la veia en otros lenguajes en tiempo de diseño puedes llamar a el procedure de un objeto por medio del Inspector de objetos en la paletra Events como ves te sale un combo y desplegandolo asignas el procedure definido para otro objeto .....

aplicacion de esto...? por ejemplo si quieres que varios botones llamen a la misma rutina .....


Espero haber ayudado .....
Responder Con Cita
  #5  
Antiguo 24-04-2007
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
gracias, he tenido que crear un procedure nuevo, proque si hago llamada a un onkeypress me pide datos(sender:tobject).

gracias de nuevo.
Responder Con Cita
  #6  
Antiguo 24-04-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Que?
Lo conseguistes hacer.
Me quede con la duda, se nota.
Saludos
Responder Con Cita
  #7  
Antiguo 25-04-2007
Kenobi Kenobi is offline
Miembro
 
Registrado: mar 2007
Posts: 191
Poder: 18
Kenobi Va por buen camino
Aja para llamar el Onkeypress ....

para llamar este procedure que tiene dos parametros yo uso el siguiente codigo

Código Delphi [-]
var
tecla:char;
begin
tecla:=#13;
edit1keypress(nil,tecla);

end;

a mi me funciona si es una barbaridad hacerlo asi no se ustedes digan.....
que opinas Caral pruebalo....
Responder Con Cita
  #8  
Antiguo 25-04-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Kenobi
si es una barbaridad hacerlo asi no se ustedes digan....
Pues yo lo digo, es una barbaridad, pero conste que tú diste permiso para hacerlo.

Vamos, no es que esté mal, pero no son maneras de hacer las cosas. Los eventos en delphi (y en cualquier lenguaje) no están para que uno los llame, sino para que el entorno los llame. Nosotros ponemos ahí, el código que queremos se ejecuta cuando tal o cual evento suceda, pero nosotros no sabemos cuando tal evento sucederá y por ello lo dejamos en manos del entorno avisarnos de cuando eso sucede.

Lo que pasa es que muchas veces confundimos el evento en sí con la acción a realizar. Vamos a suponer que tenemos un botón [Guardar] en nuestro formulario, que tiene por objeto guardar el archivo que tengamos abierto. Por un lado está el evento (clic en el botón) y por otro la acción (guardar el archivo).

La acción es un método independiente del botón o de cualquier otro elemento visual; un día podemos decidir usar otro tipo de botón o un menú para lanzar la acción, pero el método para guardar no cambiará.

Podemos colocar el código de guardado dentro el evento:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  { código para guardar el archivo }
end;

pero con esto estaremos atando la lógica de la aplicación (la parte medular) a la interfaz de usuario, siendo que debería ser independiente.

Lo más adecuado sería aislar el código de la acción en un método aparte:

Código Delphi [-]
procedure TForm1.Guardar;
begin
  { código para guardar el archivo }
end;

e invocarlo en el evento:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  Guardar;
end;

De esta manera, podemos reusar el método Guardar desde donde queramos, sin tener que recurrir a llamar explícitamente al "evento"

Código Delphi [-]
Button1Click(nil);

Si hacemos esto último, y luego decidimos que ya no queremos usar un botón, sino un menú o algún otro elemento visual, tendremos que cambiar el código en todas las partes donde hallamos llamado a Button1Click(). De la forma que comento, un cambio como el que menciono, sólo requerirá poner la llamada a Guardar en el evento de ese otro elemento visual.

Así pues, cuando se pregunta uno, como llamar a OnKeyPress, la respuesta sería, no lo hagas, en su lugar, llama al método (acción) a la que dicho evento invoque.

// Saludos
Responder Con Cita
  #9  
Antiguo 25-04-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola Roman
He hecho procesos determinados para forms especificos, la catedra que acabas de dar es digna de ti.
Me alegro de estar presente en estos momentos.
La tecnica seguro es la mas simple y limpia, desgraciadamente por alguna razon, posiblemente desconocimiento, no es usual su uso, en el ambito del programador comun, lo que hace falta es poner mas atencion y tener maestros como tu.
Saludos Maestro.
Responder Con Cita
  #10  
Antiguo 25-04-2007
Kenobi Kenobi is offline
Miembro
 
Registrado: mar 2007
Posts: 191
Poder: 18
Kenobi Va por buen camino
ya decia yo....

aja ya les estoy agarrando el punto sensible a los mienbros del foro....
lo digo porque sabia que eso de si es una barbaridad y el codigo mismo claro llamarian la atencion ....

pero si lo dice ROMAN compadre es una barbaridad sin duda...ya que (y esto lo digo en serio) no me atreveria a mi nivel discutir con una autoridad de este foro, del cual soy humilde admirador....
pero la verdad funciona hombre si funciona lo que si es que no es "ELEGANTE" pero me resuelve el problema, ya sabes ...

sin embargo ya me picaste la curiosidad y voy a revisar mi codigo para montar lo que esta en el onkeypress en una procedure aparte para llamar .....

por cierto roman u otro de los usuarios avanzado por favor respondan la pregunta de la dll crystal con el inno setup o install shields
tengo dias prenguntando lo mismo de distintas formas y nadie me contesta....

Please helpppppppppppp........

Última edición por Kenobi fecha: 25-04-2007 a las 01:09:03.
Responder Con Cita
  #11  
Antiguo 25-04-2007
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
pues si la verdad, es una leccion MAESTRA para tener muy en cuenta que muchas veces ni la pensamos.

Si, la verdad es que me funciono por si quedo una duda a lo que pregunte.

y modificando lo que dijo roman, ya queda algo mas decente la programacion.

como dije al principio, estoy aprendiendo un monton de delphi y de la manera de estructurar un programa.

GRACIAS A TODOS
Responder Con Cita
  #12  
Antiguo 25-04-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Caral
La tecnica seguro es la mas simple y limpia, desgraciadamente por alguna razon, posiblemente desconocimiento, no es usual su uso
En realidad la razón- más que desconocimiento -es que una de las mayores virtudes de Delphi, el RAD, es también su peor defecto, porque fomenta precisamente eso, que uno termine juntando todo el código duro de la aplicación con la parte visual... Es tan fácil dar doble clic sobre un botón en el IDE y ponerse a escribir código.

Y de maestro nada, yo digo muchas cosas en teoría, pero en la práctica, ¡ay mamá!

// Saludos
Responder Con Cita
  #13  
Antiguo 25-04-2007
Kenobi Kenobi is offline
Miembro
 
Registrado: mar 2007
Posts: 191
Poder: 18
Kenobi Va por buen camino
Por otro lado ...

a pesar de estar de acuerdo y de ningun modo discutir....

no esta de mas conocer esos trucos del lenguaje (que no se deben hacer ya se) pero que en momentos de apuro te sacan del atolladero y ademas te permiten conocer mas el lenguaje....


humilde opinion, si vienen mas bombas pues bienvenidas sean.....disparen gurus o usuarios avanzados que pa' aprender es que estoy aca, y como decian mis abuelos a golpes tambien se aprende....


y de acuerdo con Caral Maestro eres Roman al menos como dices a nivel teorico me quito mil veces el sombrero.....
Responder Con Cita
  #14  
Antiguo 25-04-2007
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
ya puestos a preguntar un poco mas de lo mismo o no lo mismo, pero que adecente la estructura.
Como se puede hacer una unit sin form para limpiar de procedures el la unit principal, lo he intentado, metiendo las procedures pero me da error, es decir,
si la unit no lleva form no se puede crear un form, pero intente meter las procedures debajo del type.

o esto no es legal?

gracias again
Responder Con Cita
  #15  
Antiguo 25-04-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
anubis, file -> New -> Unit, ahí tendrás una unidad sin form asociado

Código Delphi [-]

unit global

uses < lo que necesites>

type 
  type Numero = (uno, dos, tres);
  < tipos que quieres exportar o usar desde otras unidades


  procedure Simplifica(...);
  < procedimientos y funciones visibles desde otras unidades

implementation

< implementación de todo >
end.

procedure Simplifica(...);
begin 
  <  lo que sea >
end;

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #16  
Antiguo 03-03-2010
Avatar de CarlosHernandez
CarlosHernandez CarlosHernandez is offline
Miembro
 
Registrado: oct 2003
Posts: 139
Poder: 21
CarlosHernandez Va por buen camino
buenas tardes, se que esta es una pregunat vieja pero solo quiero saber en la estructura que puso lepe, en

Código Delphi [-]
 type Numero = (uno, dos, tres);


que es numero y que es (uno,dos,tres)

ya que no se que poner ahi y me da error

por ejemplo en un unit asociado a un form se coloca

Código Delphi [-]
type
  TForm1 = class(TForm)

esto es lo que puse

Código Delphi [-]
unit Unit2;

interface

uses
  Windows;

  type
    Tunit2 =  class(TForm)// estos es un disparate, no se que poner aqui y   es  el motivo de la pregunta
    procedure mensaje;
  end;

implementation


 procedure mensaje;
begin
showmessage('e');
end;

end.
__________________
begin
Elverdugo79@hotmail.com
end;
Responder Con Cita
  #17  
Antiguo 03-03-2010
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Arrow

Amigo CarlosHernandez >
Si vas a hacer una unidad con procedimientos y/o funciones que no van a pertenecer a ninguna clase pues puedes hacerlo así:
Código Delphi [-]
unit Unit2;

interface

uses Dialogs;

procedure Hola();

implementation

procedure Hola();
begin
 ShowMessage('Hola');
end;

end.
Ahora si por el contrario vas a crear nuevas clases entoces lo haces así:
Código Delphi [-]
unit Unit3;

interface
uses Dialogs;

type
  MiClase = Class {<--Aquí si deseas lo puedes haces asi >  MiClase = Class(TObject)
                   pero es lo mismo ya que para toda clase  que no se especifique su ancestro
                   el compilador asume que su padre es la clase TObject,
                   a no ser que quieras heredar de una clase en cuestión }
  private
    { Aqui se pone todas las declaraciones privadas }
  public
    { Aqui se pone todas las declaraciones públicas }
    procedure Hola();//este método es publico
  end;
implementation

{ MiClase }

procedure MiClase.Hola;
begin
ShowMessage('Hola');
end;

end.
Espero que todo haya quedado claro..
Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
Responder Con Cita
  #18  
Antiguo 04-03-2010
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
CarlosHernandez, tienes toda la razón, ese ejemplo con "Numero" es lo típico que se hace para aclarar cosas y al final resulta de lo más complejo y raro...

Eso de "Numero" es un tipo enumerado en Delphi, vamos, esto mismo:
Código Delphi [-]
type TEstadoCivil = (ecSoltero, ecCasado, ecDivorciado, ecViudo);
Simplemente un tipo de datos que puede contener un sólo estado de todos los posibles. el prefijo "ec" es por aquello de EstadoCivil

Es un tipo de datos definido en ese .pas, pero que se usará en otras partes del programa.
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #19  
Antiguo 04-03-2010
Avatar de CarlosHernandez
CarlosHernandez CarlosHernandez is offline
Miembro
 
Registrado: oct 2003
Posts: 139
Poder: 21
CarlosHernandez Va por buen camino
como llamarlo desde otro form

gracias rsgtuamigo y lepe por responder, ya entendi esa parte y corre sin problema, ahora lo que no me deja es llamar ese procedimiento desde el formulario del unit1, aqui declare en las uses el unit2 (que es donde esta el procedimiento a llamar) pero no aparece, no se llamarlo

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
MiClase.hola;
end;

hola no me lo reconoce, no aparece entre las opciones y el error es el siguiente:

"this form of method call only allowed for clas methods"

incluso revise este link pero quede igual
__________________
begin
Elverdugo79@hotmail.com
end;
Responder Con Cita
  #20  
Antiguo 04-03-2010
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
MiClase sólo es la definición de un tipo de datos y no el dato en sí. Luego entonces, por lo general, no puedes usar directamente uno de sus métodos. Sólo los objetos de esa clase pueden hacerlo. Entonces, debes primero crear un objeto de esa clase y usar el método desde ese objeto:

Código Delphi [-]
var
  Objeto: MiClase;

begin
  Objeto := MiClase.Create;
  Objeto.Hola;
end;

Por otro lado, aunque no es obligatorio, se recomienda anteponer un T (de tipo) a los tipos de datos creados por nosotros, lo cual incluye las clases:

Código Delphi [-]
type
  TMiClase = class
    ...
  end;

en lugar de

Código Delphi [-]
type
  MiClase = class
    ...
  end;

// Saludos
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
llamar a un Store Procedure BlueSteel Firebird e Interbase 6 05-07-2006 10:01:40
Llamar Un Stored Procedure Desde Un Trigger ibuser Firebird e Interbase 3 26-08-2004 10:51:48
¿Como puedo llamar un Procedure desde otra unit? athal Lazarus, FreePascal, Kylix, etc. 11 17-05-2004 02:05:20
Llamar stored procedure con BDE Ricardo Alfredo Conexión con bases de datos 3 12-09-2003 04:09:31
llamar a un procedure desde otro negama Conexión con bases de datos 1 28-08-2003 02:22:15


La franja horaria es GMT +2. Ahora son las 14:37:36.


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