Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
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 30-07-2008
Avatar de Cecil
Cecil Cecil is offline
Miembro
 
Registrado: may 2007
Posts: 97
Poder: 17
Cecil Va por buen camino
Propiedad de componente tipo "combobox"

Hola, estoy ahora liadito con un componente, y me ha surgido una gran duda. necesito una propiedad published que cuando quieras seleccionar un dato se despliegue un combobox dependiendo de otra propiedad, dicho combobox tendrá unos valores u otros. Pongo como ejemplo el componente TTable, su propiedad TableName es una especie de combobox en el que puedes seleccionar los nombres de las tablas y depende de la propiedad DataBase. Espero haberme explicado bien . Un saludo y espero vuestras sabias respuestas.
__________________
"There is nothing either good or bad, but thinking makes it so" William Shakespeare.
Responder Con Cita
  #2  
Antiguo 01-08-2008
jarr-o jarr-o is offline
Miembro
 
Registrado: jun 2008
Posts: 17
Poder: 0
jarr-o Va por buen camino
No se si te entendi bien pero si lo que quieres es cambiar los items de un combobox primero borras lo que tenia con:

Combo1.Clear

luego le añades los items que deseas asi:

combo1.Items.Add('Opcion1');
combo1.Items.Add('Opcion2');
etc..

espero esto te ayude.
Responder Con Cita
  #3  
Antiguo 01-08-2008
Avatar de Cecil
Cecil Cecil is offline
Miembro
 
Registrado: may 2007
Posts: 97
Poder: 17
Cecil Va por buen camino
Gracias por tu ayuda, pero no me referí a eso. He colgado una imagen para explicarme mejor:

http://www.usuarios.lycos.es/gatorayosx/prop.JPG

Bueno, en la imagen aparece un inspector de objetos, en el hay una propiedad llamada TableName, que para seleccionar el valor trabaja parecido a un combobox. Pero esa propiedad, TableName, depende de que Database tenga asignado, con lo cual digamos que esa propiedad se recrea dependiendo de otra propiedad. Eso es lo que necesito saber como se hace. Creo que ahora me he explicado mejor . Un saludo!
__________________
"There is nothing either good or bad, but thinking makes it so" William Shakespeare.
Responder Con Cita
  #4  
Antiguo 01-08-2008
Avatar de felipe88
[felipe88] felipe88 is offline
Miembro Premium
 
Registrado: may 2007
Ubicación: Mi Valle del Cauca... Colombia!!!
Posts: 1.120
Poder: 18
felipe88 Va por buen camino
Hola,

Pienso que la manera en que esta creada esta opcion es mediante codigo y de la forma como dice jarr-o, simplemente añadiendo las opciones (Sea donde esten, visibles o dentro del codigo) a menos que estes dispuesto a llenar tu formulario de cuantos Combobox necesites, pienso yo a no ser de que exista una forma mas simplificada de hacerlo.
__________________
Web
Responder Con Cita
  #5  
Antiguo 01-08-2008
jarr-o jarr-o is offline
Miembro
 
Registrado: jun 2008
Posts: 17
Poder: 0
jarr-o Va por buen camino
A bueno entonces solo faltaria agregarle en el evento ondropdown las condiciones de como quieres que se comporte para cada caso por ejemplo:


Código Delphi [-]
procedure TForm3.ComboBox1DropDown(Sender: TObject);
begin
if ComboBox2.Text = 'Letras' then
begin
ComboBox1.Clear;
ComboBox1.Items.Add('uno');
ComboBox1.Items.Add('dos');
ComboBox1.Items.Add('tres');
ComboBox1.Items.Add('cuatro');
end
else
begin
ComboBox1.Clear;
ComboBox1.Items.Add('1');
ComboBox1.Items.Add('2');
ComboBox1.Items.Add('3');
ComboBox1.Items.Add('4');
end;
end;

aqui el combo1 muestra letras si en el combo2 selecciono la opcion letras y muestra numeros en otro caso
Responder Con Cita
  #6  
Antiguo 01-08-2008
Avatar de Cecil
Cecil Cecil is offline
Miembro
 
Registrado: may 2007
Posts: 97
Poder: 17
Cecil Va por buen camino
Pero para la creación de un componente, en el que debo de escoger una propiedad como en la captura que os he puesto, ¿que debo de usar un TCombobox?... creo que no habeis entendido mi duda. A ver si alguien mas puede ayudarme, gracias y un saludo.
__________________
"There is nothing either good or bad, but thinking makes it so" William Shakespeare.
Responder Con Cita
  #7  
Antiguo 01-08-2008
Avatar de felipe88
[felipe88] felipe88 is offline
Miembro Premium
 
Registrado: may 2007
Ubicación: Mi Valle del Cauca... Colombia!!!
Posts: 1.120
Poder: 18
felipe88 Va por buen camino
Me gustaria saber como reconoceria tu componente lo que debe o no debe mostrar en esa propiedad, me explico: en el ejemplo de la tabla, tu sabes que esta viene de una consulta de la base de datos con los nombres de las tablas disponibles, ahora si tu componente no hace algo similar sino que por el contrario trae las opciones "cargadas" segun otra opcion (Ej: Combobox - Pais, Combobox - Ciudad) estas deberian estar dentro del codigo de la misma para mayor facilidad, por ejemplo asi:

Código Delphi [-]
if combo1.text = 'Deporte' then
  begin
    Combo2.Items.Add('Futbol');
    Combo2.Items.Add('Karate');
  end;
if combo1.text = 'Comida' then
  begin
    Combo2.Items.Add('Fruta');
    Combo2.Items.Add('Helado');
  end

Es una manera, no la unica
__________________
Web
Responder Con Cita
  #8  
Antiguo 01-08-2008
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
A ver... Creo que no están entendiendo lo que pregunta el compañero.
El tiene diseñado un componente y desea que una propiedad se comporte de la misma manera que la propiedad TableName de un TxxxTable.
Es decir, lo que busca es tener una propiedad publicada en la que se desplegue un combo para que en tiempo de diseño se le permita realizar una elección.

Debo admitir que en estos momentos no recuerdo si es que para ello había que declarar las propiedades de alguna manera en particular, o si es que compilador en forma automática lo realiza.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #9  
Antiguo 01-08-2008
Avatar de Cecil
Cecil Cecil is offline
Miembro
 
Registrado: may 2007
Posts: 97
Poder: 17
Cecil Va por buen camino
Gracias Delphius, exactamente eso es lo que quiero (lo has explicado mucho mejor que yo ). ¿Alguien podria ayudarme con esto? Un saludo.
__________________
"There is nothing either good or bad, but thinking makes it so" William Shakespeare.
Responder Con Cita
  #10  
Antiguo 01-08-2008
Avatar de felipe88
[felipe88] felipe88 is offline
Miembro Premium
 
Registrado: may 2007
Ubicación: Mi Valle del Cauca... Colombia!!!
Posts: 1.120
Poder: 18
felipe88 Va por buen camino
Cita:
Empezado por Delphius Ver Mensaje
A ver... Creo que no están entendiendo lo que pregunta el compañero.
Esta bien, esta bien... comprendenos hoy es viernes

Yo si le entiendo, y llego a la misma duda tuya porque a decir verdad he estudiado un poco la creación de componentes pero no la he llevado a la practica, en mi humilde opinion se me ocurrio de que una idea asi pueda servir, ademas lo del TTable fue un ejemplo
__________________
Web

Última edición por felipe88 fecha: 01-08-2008 a las 22:25:21.
Responder Con Cita
  #11  
Antiguo 16-08-2008
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 18
MaMu Va por buen camino
Y el procedimiento AddItem ? Como se usa?
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;
Responder Con Cita
  #12  
Antiguo 17-08-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Puedes usar como ejemplo el código de la VCL, pon un combobox y escribe en el editor: combobox1.items ahora haz CTRL + CLIC en la la palabra items, verás algo similar a esto:
Código Delphi [-]
type

TOpcion = (oUna, oDos, oTres);
TOpciones = set of TOpcion;

TMicomponente = class(TComponent) <<< necesario para que la lista se guarde en el dfm

private
  FItems:TStrings;
public
  constructor create(AOwner:TComponent);override;
  destructor destroy;override;
published
  property Items:TStrings read FItems write Fitems;
  property Opcion:TOpcion read Fopcion write Fopcion;
  property Opciones:TOpciones read Fopciones write Fopciones default [oUna];
end;

implementation

constructor TMiComponente.create(AOwner:TComponent);override;
begin
 inherited;
 FOpciones := [oUna];
 FItems := TStringlist.create; // hereda de TStrings así que sin problemas.
end;

destructor TMiComponente.destroy;
begin
  FItems.Free;
end;

Resumiendo:
- La propiedad se declara de tipo TStrings para que sea compatible con combobox.items , memo.lines, RichEdit.lines, etc.
- Se crea en el constructor como TStringList y dado que éste último hereda de TStrings, ya tienes compatibilidad asegurada.
- por último se libera en el destructor del componente.

Tu propiedad Items se comportará en el inspector de objetos como la propiedad Items de un TMemo. No saldrá una lista desplegable cuando el programador use tu componente.

La propiedad Opcion (al estar declarada como un tipo enumerado)será una lista desplegable en el inspector de objetos pero solo puede elegirse uno de los valores de TOpcion.

La propiedad Opciones (al estar declarada como un tipo "Set") será como el Options de un grid, que tiene un simbolo "+" que el programador puede expandir en el inspector de objetos y cada una de ellas es de tipo Boolean.

Si quieres hacer algo parecido al TColumn de un grid debes heredar de TCollection y TCollectionItem que son más potentes.

Lo que tu quieres, es si cabe lo más complicado, ya que el usuario puede escribir en esa propiedad del inspector de objetos lo que le dé la gana, y tendrás que lanzar excepciones si comete un error de tecleado. Echa una visual a los editores de propiedades en la carpeta delphi\source\..\property Editors\ no recuerdo exactamente en qué subcarpeta está. También busca en el foro, hay algo dicho.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
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
Implementar una nueva opción para la propiedad "FormStyle" JM75 OOP 3 15-02-2007 16:53:44
ComboBox - Pasar un "Key" presionado afuera como si fuera de allí amadis OOP 7 10-11-2006 15:29:48
Componente "tipo label" marceloalegre Varios 3 19-10-2005 17:15:14
cambiar en ejecución la propiedad "BandType" aip Impresión 0 06-09-2004 07:36:59
Tipo de Variable."String" ó "Double" UTECYBER OOP 7 15-12-2003 21:25:39


La franja horaria es GMT +2. Ahora son las 07:01: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