Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 13-09-2006
Avatar de bbjb
bbjb bbjb is offline
Miembro
 
Registrado: jul 2003
Posts: 97
Poder: 21
bbjb Va por buen camino
Ejecutar Valor de una variable

Hola a tod@s,

No se si lo que voy a plantear es un disparate como una catedral, pero bueno por probar.

Tengo recogida en una variable el nombre de un procedimiento y me gustaría saber si es posible ejecutar el valor de esa variable de manera que pasará a lanzarse el procedimiento en cuestión

Me he conseguido explicar?
Un saludo y muchas gracias.
Responder Con Cita
  #2  
Antiguo 13-09-2006
Avatar de Bicho
[Bicho] Bicho is offline
Miembro Premium
 
Registrado: jul 2003
Ubicación: Inca - Mallorca
Posts: 1.776
Poder: 22
Bicho Va por buen camino
Hola,

a mi no se me ocurre que puedas hacerlo cogiendo el nombre del procedimiento y ejecutándolo. Sólo se me ocurre que hagas un "case" (en tu caso no valdría ya que en la variable guardas un string) o ir haciendo If's para los valores que pueda tomar esa variable y según el que tome ejecutar un procedimiento

Ej: con integer;
Código Delphi [-]
  case variable of
     1 : Buscar;
     2 : Guardar;
     3 : Borrar;
     4 : boton1OnClick(boton1);
  ...
  end;

Ej. con string
Código Delphi [-]
  if variable = 'GUARDAR' then Guardar
  else if variable = 'BUSCAR' then Buscar
    else if variable = 'BORRAR' ....

Espero te sirva o alguien encuentre mejor solución para lo que buscas.

Saludos
Responder Con Cita
  #3  
Antiguo 13-09-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

No sé si te refieres a algo así:

Código Delphi [-]
var
  FProcedimiento: procedure(s: string);

procedure UnProcedimiento(saludo: string);
begin
  ShowMessage(saludo);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  FProcedimiento := UnProcedimiento;
  FProcedimiento('¡Hola mundo!');
end;
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 13-09-2006 a las 10:58:26.
Responder Con Cita
  #4  
Antiguo 13-09-2006
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Si el procedimiento es published y pertenece a una clase puedes hacerlo utilizando RTTI.

Si es eso lo que te interesa dilo o haz una búsqueda en los foros y te aclaramos un poco más.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #5  
Antiguo 13-09-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Ya puestos a hacer cosas "exoticas" ¿que os parece esto?

Código Delphi [-]
procedure Vamos1;
begin
  ShowMessage('Hola 1');
end;

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

procedure TForm1.EjecutarPorNombre(Nombre: String);
var
  i: integer;
  p: Procedure;
begin
  i:= Lista.IndexOf(Nombre);
  if i <> -1 then
  begin
    p:= Pointer(Lista.Objects[i]);
    p;
  end else
    ShowMessage('No se encontro el procedimiento');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  EjecutarPorNombre('Vamos1');
  EjecutarPorNombre('Vamos2');
  // Esta ultima nos dara error
  EjecutarPorNombre('Vamos3');
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Lista.Free;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Lista:= TStringList.Create;
  Lista.AddObject('Vamos1',TObject(@Vamos1));
  Lista.AddObject('Vamos2',TObject(@Vamos2));
end;

No es que tenga mucha utilidad, pero resulta curioso
Responder Con Cita
  #6  
Antiguo 13-09-2006
Avatar de bbjb
bbjb bbjb is offline
Miembro
 
Registrado: jul 2003
Posts: 97
Poder: 21
bbjb Va por buen camino
Antes de nada agradeceros el interés mostrado.

Os voy a detallar un poco más el programilla que tengo para situaros mejor.

Tengo dos procedimientos declarados en una unidad Unit1 cuya utilidad única y exclusiva es recoger todas la funciones y procedimientos que son susceptibles de ser utilizados desde distintos formularios, por lo tanto estos procedimientos son "públicos".

Por otro lado, y desde el formulario Form1 por ejem. tengo una variable que puede recoger el valor de uno de esos procedimientos, por ejem:
Código:
    s_cadena := 'procedimiento_inicio';
Lo que intento es poder utilizar el valor de esa variable para ejecutar el proced. que en cada momento contenga.
Responder Con Cita
  #7  
Antiguo 13-09-2006
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Eso desestima RTTI; La opción de Seoane de una lista de apuntadores a funciones creo que puede ser la más útil si el número de funciones va a ir creciendo. Si van a ser siempre 2 utiliza un if/case.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #8  
Antiguo 13-09-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Vamos a ver, podemos implementar el método que te comente antes en una unit, y solamente hacer publico el procedimiento EjecutarPorNombre. Algo así:

Código Delphi [-]
unit Procedimientos;

interface

procedure EjecutarPorNombre(Nombre: String);

implementation

uses Windows, Sysutils, Classes;

var
  Lista: TStringList;

// Aqui coloca los procedimientos
// *******************************
procedure Procedimiento1;
begin

end;

procedure Procedimiento2;
begin

end;

procedure Procedimiento3;
begin

end;
// *******************************

procedure EjecutarPorNombre(Nombre: String);
var
  i: integer;
  P: Procedure;
begin
  i:= Lista.IndexOf(Nombre);
  if i <> -1 then
  begin
    P:= Pointer(Lista.Objects[i]);
    P;
  end else
    raise Exception.Create('No se pudo encontrar el procedimiento');
end;

initialization
  Lista:= nil;
  Lista:= TStringList.Create;
  Lista.AddObject('Procedimiento1',TObject(@Procedimiento1));
  Lista.AddObject('Procedimiento2',TObject(@Procedimiento2));
  Lista.AddObject('Procedimiento3',TObject(@Procedimiento3));
finalization
  Lista.Free;

end.


Para llamar a un procedimiento, lo haríamos de la siguiente manera:

Código Delphi [-]
var
  s_cadena: string;
begin
  // El nombre diferencia entre mayusculas y minusculas
  s_cadena:= 'Procedimiento1';
  EjecutarPorNombre(s_cadena);
end;

Espero que te sirva
Responder Con Cita
  #9  
Antiguo 13-09-2006
Avatar de bbjb
bbjb bbjb is offline
Miembro
 
Registrado: jul 2003
Posts: 97
Poder: 21
bbjb Va por buen camino
Ok, gracias a ambos.

Voy a probar y ahora os comento.
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
como usar el valor de una variable jesusomarsanche OOP 4 17-08-2006 19:17:55
Valor de una variable en un TMemo Drake OOP 5 18-07-2006 15:43:07
Guardar valor en una variable... hademon SQL 1 14-09-2005 17:16:57
Asignar el valor de DayOfTheWeek a una variable gluglu Varios 7 23-01-2005 19:47:47
Ejecutar valor de una variable bbjb OOP 2 19-02-2004 16:58:46


La franja horaria es GMT +2. Ahora son las 20:58:54.


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