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 17-08-2007
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 21
enecumene Va por buen camino
reusar un mismo form

Hola Amigos del foro tengo esta duda, sucede lo siguiente tengo esto:

***FTramite(form)***

SpeedButton1...10
DBEdits1...10

***FBuscarPed(form)***

DBGrid1
BitButton1
Bitbutton2

hasta ahora supongo que van entendiendo, quisiera reusar el form FBuscarPed por cada SpeedButton que hay en FTramite. por ejemplo:

en el SpeedButton1 abre el form FBuscarPed y el codigo del BitButton1 es el siguiente:

Código Delphi [-]
procedure TFBuscarPed.BitBtn1Click(Sender: TObject);
begin
FTramite.DBEdit1.Text:=TbPedidono.AsString;
FTramite.dbId1.Text:=TbPedidono_ped.AsString;
FTramite.dbTipo1.Text:=TbPedidotipo_exp.AsString;
FTramite.dbDpto1.Text:=TbPedidodpto.AsString;
Close;
end;

aqui esta el asunto como hago que en cada SpeedButton cuando abre el mismo form FBuscarPed el codigo varie? por ejemplo:

SpeedButton2.FBuscarPed.Show el bitbutton1 del FBuscarPed cambie de codigo asi:

Código Delphi [-]
procedure TFBuscarPed.BitBtn1Click(Sender: TObject);
begin
FTramite.DBEdit2.Text:=TbPedidono.AsString;
FTramite.dbId2.Text:=TbPedidono_ped.AsString;
FTramite.dbTipo2.Text:=TbPedidotipo_exp.AsString;
FTramite.dbDpto2.Text:=TbPedidodpto.AsString;
Close;
end;

en vez del primer codigo y asi sucesivamente, no se si me hice entender, solo que quiero evitar tener que hacer el form FBuscarPed 10 veces, supongo que se hace con la sentencia CASE, espero que hayan podido entender lo que trato de hacer.

Saludos.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #2  
Antiguo 17-08-2007
rcubillos rcubillos is offline
Registrado
 
Registrado: ago 2007
Posts: 5
Poder: 0
rcubillos Va por buen camino
Busqueda de Componentes por nombre

Una forma sencilla de realizar los es utilizando el método FindComponent del formulario para buscar Dinamicamente el que corresponde a cada botón, como necesitas diferenciar cuales son el conjunto de componentes asociados a cada boton utiliza la propiedad tag del boton como indice.

Ejemplo:
Código:
procedure TForm1.Button1Click(Sender: TObject);
begin
TEdit(self.FindComponent('Edit'+intToStr( TControl(Sender).Tag) )).Text:='HOLA'
end;
Aqui asigno al edit cuyo nombre es edit + nro de la propiedad tag del boton presionado el texto Hola, en tu caso el resultado de algo mas.
Responder Con Cita
  #3  
Antiguo 17-08-2007
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 21
enecumene Va por buen camino
Gracias rcubillos por tu respuesta pero no me llego a funcionar lo tengo asi:

Código Delphi [-]
procedure TFBuscarPed.BitBtn1Click(Sender: TObject);
begin
FTramite.dbId2(self.FindComponent('dbId2'+intToStr( TControl(Sender).5) )).Text:=TbPedidono_ped.AsString;
Close;
end;

y me sale el siguiente error:

Cita:
[Error] BuscarPed.pas(82): Missing operator or semicolon
[Error] BuscarPed.pas(82): Identifier expected but number found
que estoy haciendo mal?

Saludos...
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #4  
Antiguo 17-08-2007
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,

Código Delphi [-]
TControl(Sender).5

Puede que quisieras decir:

Código Delphi [-]
TControl(Sender).Tag
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #5  
Antiguo 17-08-2007
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 21
enecumene Va por buen camino
Hola dec y rcubillos lo he puesto asi:

Código Delphi [-]
FTramite.dbId1(self.FindComponent('dbId1'+intToStr( TControl(Sender).Tag) )).Text:=TbPedidono_ped.AsString;

pero sucede que me sale este error aque se debe?:
Cita:
[Error] BuscarPed.pas(82): Missing operator or semicolon
Saludos...
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #6  
Antiguo 17-08-2007
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Estás haciendo mal las cosas...

La función FindComponent te devuelve un objeto de tipo TComponent. Este objeto lo tienes que "convertir" en un TEdit para poder asignar bien el valor:

Código Delphi [-]
// Este método debe estar asignado al evento OnClick de todos los TBitBtn
procedure TForm1.BitBtnClick(Sender: TObject);
var
  Index: string;

begin
  Index := IntToStr(TBitBtn(Sender).Tag);
  TDBEdit(FindComponent('DBEdit' + Index)).Text := TbPedidono.AsString;
  TDBEdit(FindComponent('dbId' + Index)).Text := TbPedidono_ped.AsString;
  TDBEdit(FindComponent('dbTipo' + Index)).Text := TbPedidotipo_exp.AsString;
  TDBEdit(FindComponent('dbDpto' + Index)).Text := TbPedidodpto.AsString
end;

Con el ejemplo anterior, a cada TBitBtn de tu forma debes asignarle su propiedad Tag de tal forma que el que quieras que llene los TDBEdits con terminación 1 tenga como valor 1...


Saludos...
Responder Con Cita
  #7  
Antiguo 17-08-2007
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 21
enecumene Va por buen camino
Gracias maeyanes por tu respuesta, pero debido a mi ignorancia al no saber nada sobre los Tags y debido tambien a que el codigo que me sugeriste tampoco me funciono, decidi usar las sentencias if...then.else de esta manera:

Código Delphi [-]
procedure TFBuscarPed.BitBtn1Click(Sender: TObject);
var
Index1: string;
Primero: string;
Segundo: string;
begin
Index1:= Label3.Caption;
Primero:='Agregar Primer Pedido';
Segundo:='Agregar Segundo Pedido';
if Index1 = Primero then
begin
FTramite.DBEdit1.Text:=TbPedidono.AsString;
FTramite.dbId1.Text:=TbPedidono_ped.AsString;
FTramite.dbTipo1.Text:=TbPedidotipo_exp.AsString;
FTramite.dbDpto1.Text:=TbPedidodpto.AsString;
Close;
end
else
if Index1 = Segundo then
begin
FTramite.DBEdit2.Text:=TbPedidono.AsString;
FTramite.dbId2.Text:=TbPedidono_ped.AsString;
FTramite.dbTipo2.Text:=TbPedidotipo_exp.AsString;
FTramite.dbDpto2.Text:=TbPedidodpto.AsString;
Close;
end;

end;

les agradezco a todos por sus respuestas y tambien recibo criticas y mejoras del actual codigo.. gracias

Saludos
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #8  
Antiguo 18-08-2007
Avatar de b3nshi
b3nshi b3nshi is offline
Miembro
 
Registrado: feb 2005
Ubicación: Tucuman - Argentina
Posts: 164
Poder: 20
b3nshi Va por buen camino
Mmm... criticas... si puede ser... creo q la forma q decidiste utilizar no es la mas eficiente, puesto q te podrias ahorrar lineas de codigo utilizando las formas presentadas anteriormente en las respuestas...

Pero bueno... queda a criterio tuyo, te recomendaria seguir intentando hacerlo como te dijeron para de paso darte la oportunidad de aprender...

En cuanto al codigo q elegiste... una recomendacion... no es q este escrito en algun libro, simplemente yo lo considero mejor...

Cuando se trata de comparar cadenas de texto, es conveniente quitar espacios al principio de la cadena y pasar todo el texto a mayúsculas, para de esa forma poder comparar mejor dos cadenas... En este caso no se de q depende el texto del Label3 pero si este depende del usuario, el mismo debera ingresar el texto exactamente como tu se lo asignas a primero y segundo.

Esto te recomiendo q cambies en tu codigo:

Código Delphi [-]
Index1:= trim(uppercase(Label3.Caption));
Primero:='AGREGAR PRIMER PEDIDO';
Segundo:='AGREGAR SEGUNDO PEDIDO';

{Saludos}
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
El mismo menu en todos los form Carlos Arevalo Varios 5 11-01-2014 18:16:11
Un form enfadado. No quiere a nadie (ni a sí mismo) Bicholoco Varios 2 30-04-2007 14:29:15
Referencia a diferentes instancias del mismo Form gluglu OOP 14 23-02-2007 17:22:32
utilizar mismo form en distintos modulos @-Soft Conexión con bases de datos 5 09-07-2004 13:51:21
evitar correr mismo form en aplicacion MDI @-Soft OOP 5 01-07-2004 06:03:43


La franja horaria es GMT +2. Ahora son las 10:59:48.


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