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 28-11-2006
Avatar de DarKraZY
DarKraZY DarKraZY is offline
Miembro
 
Registrado: ago 2003
Posts: 460
Poder: 21
DarKraZY Va por buen camino
Nuevo componente con lista desplegable

Buenas foro!

Estoy creando un componente que tendrá acceso a base de datos y me gustaría saber ¿cómo conseguir que una propiedad del componente sea una lista desplegable?
Estos valores son creados dinámicamente ya que pertenecen a una base de datos.

Básicamente sería igual que por ejemplo un componente TTable o TStoredProc, los cuales muestran una lista desplegable para seleccionar el deseado.

He estado navegando por el código fuente de la VCL pero no encuentro la solución ya que esas mismas propiedades están definidas de la manera más normal
Código Delphi [-]
property StoredProcName: string read FProcName write SetProcName;
Código Delphi [-]
procedure TIBStoredProc.SetProcName(Value: string);
begin
  if not (csReading in ComponentState) then
  begin
    CheckInactive;
    if Value <> FProcName then
    begin
      FProcName := Value;
      FreeStatement;
      FParams.Clear;
      if (Value <> '') and
        (Database <> nil) then
        GenerateSQL;
    end;
  end
  else
    begin
      FProcName := Value;
      if (Value <> '') and (Database <> nil) then
        GenerateSQL;
    end;
end;

Aunque el método Set contiene código que no entiendo, todavía no sé cómo realizar lo de que aparezca la lista. ¿Es quizás algo relativo a alguna interfaz? ¿Algún editor de propiedades?

Gracias de antemano!
Responder Con Cita
  #2  
Antiguo 28-11-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
Cita:
Empezado por DarKraZY
Estoy creando un componente que tendrá acceso a base de datos y me gustaría saber ¿cómo conseguir que una propiedad del componente sea una lista desplegable?
Tal vez deberías pensar de qué componentes debes derivarlo. Tal vez de un DBComboBox, DBListBox,... Revisa si existen y si te pueden servir.

Cita:
Empezado por DarKraZY
Básicamente sería igual que por ejemplo un componente TTable o TStoredProc, los cuales muestran una lista desplegable para seleccionar el deseado.
Creo que te estás liando. TTable o TStoredProc son componentes no visuales, por lo tanto no tienen ninguna lista desplegable de donde seleccionar nada; Tal vez estás pensando en que estos componentes estén "ligados" a un DBGrid.

Cita:
Empezado por DarKraZY
Aunque el método Set contiene código que no entiendo, todavía no sé cómo realizar lo de que aparezca la lista. ¿Es quizás algo relativo a alguna interfaz? ¿Algún editor de propiedades?
Lo dicho; Estás liando componentes Visuales y NO-visuales.

Aquí tienes un manual para creación de componentes; Revísalo a ver si te aclara algunas dudas. Aquí te dejo otro, bastante más completo.
__________________
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
  #3  
Antiguo 28-11-2006
Avatar de DarKraZY
DarKraZY DarKraZY is offline
Miembro
 
Registrado: ago 2003
Posts: 460
Poder: 21
DarKraZY Va por buen camino
Perdona Neftali, pero no terminé de explicarme bien :P

Con lo de la lista desplegable me refería a que apareciese en el Object Inspector en tiempo de diseño.
Y aún a parte de este componente que estoy haciendo me gustaría saber como se programa esta lista, ya que se puede encontrar también en la propiedad ImageIndex que tiene un TMenuItem, por ejemplo.

Intento explicarme:
Creamos un TMainMenu, y lo relacionamos con un TImageList. Al añadir un TMenuItem, en su propiedad del Inspector de Objetos ImageIndex permite escribir a mano un entero o bien seleccionarlo de una lista. Esta lista es en lo que estaría interesado. Ya que solo aparecen los valores que pueda tener el TImageLista. Hasta aquí correcto. Pero no sé como hacerlo con código fuente para nuevos componentes.

Espero haberme explicado mejor. Lo siento

EDITO: Muchas gracias por los enlaces!!

Última edición por DarKraZY fecha: 28-11-2006 a las 13:32:38.
Responder Con Cita
  #4  
Antiguo 28-11-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Efectivamente es un Editor de propiedades lo que intentas hacer, en los enlaces de Neftali viene un manual.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #5  
Antiguo 28-11-2006
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
A mi no me permite bajar el de magaupload. Si quieren, me lo mandan y lo cuelgo de mi web.

// Saludos
Responder Con Cita
  #6  
Antiguo 28-11-2006
Avatar de DarKraZY
DarKraZY DarKraZY is offline
Miembro
 
Registrado: ago 2003
Posts: 460
Poder: 21
DarKraZY Va por buen camino
El manual que he descargado de megaupload es "Curso de creación de componentes en Delphi". Y aunque ahí está firmado por "MBS para el LTIASI" es el mismo que en su día escribió Luis Roche

Volviendo al tema de los editores de propiedades... no lo entendí muy bien ya que la VCL para la propiedad ProcedureName por ejemplo está así definida en la clase
Código Delphi [-]
property StoredProcName: string read FProcName write SetProcName;
¿Aquí no está usando ningún editor de propiedad? ¿O se utilizan de otra manera?
Responder Con Cita
  #7  
Antiguo 28-11-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
Cita:
Empezado por roman
A mi no me permite bajar el de magaupload.
Prueba con esta: http://www.sendspace.com/file/91rn4d

EDITO: Tenía problemas con el FTP; Resueltos, ya lo he podido subir aquí.
__________________
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 29-11-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
Cita:
Empezado por DarKraZY
¿Aquí no está usando ningún editor de propiedad? ¿O se utilizan de otra manera?
Para un tipo de datos simple (string, integer,...) no hace falta definir un editor de propiedades; Incluso para muchos tipos que no son simples delphi ya los tiene definidos.

De todas formas aunque el tipo fuera otro, al definir la propiedad no hay nada distinto, seguirá siendo así:

Código Delphi [-]
property StoredProcName:TTipoRaro read FProcName write SetProcName;
[FONT=verdana,geneva,lucida,'lucida grande',arial,helvetica,sans-serif][/font]

Cuando registras el componente (procedure Register), es cuando registras el Editor de propiedades que has hecho para una determinada propiedad.

Normalmente harías esto:
Código Delphi [-]
  RegisterComponents('Estandard', [TMiComponente]);

Para registrar propiedades harías algo así:

Código Delphi [-]
  // ejemplo del CoolHint
  RegisterComponents('Varios', [TCoolHint2KControl, 
                                     TCoolHint2KButton, 
                                     TCoolHint2KLink, 
                                     TCoolHint2KCommandLink, 
                                     TCoolHint2KIcon]);
  RegisterPropertyEditor(TypeInfo(TCHAboutBox), nil, '', TCHAboutProperty);
  // proiedad ConnectionString de ADO
  RegisterPropertyEditor(TypeInfo(WideString), TADOConnection, 'ConnectionString', TConnectionStringProperty);
__________________
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
  #9  
Antiguo 07-12-2006
Avatar de DarKraZY
DarKraZY DarKraZY is offline
Miembro
 
Registrado: ago 2003
Posts: 460
Poder: 21
DarKraZY Va por buen camino
Muchas gracias a todos por la ayuda!

Después de vuestras respuestas había dejado el tema de lado. Pero hoy volví otra vez a intentarlo haciendo unas pruebas. Y he conseguido hacer cosas parecidas a lo que pretendía.

Y la respuesta cómo habéis apuntado son los property editors.

Yo me empeñaba, según mi conocimientos de OOP, en revisar la unidad del IBStoredProc. Ahí no veía nada extraño. Así que todo parecía magia o muy complicado. Porque sólo veía que las propiedades en la definición eran de tipo string pero algunos componentes hacían unas cosas y otros otra. Era magia!

Entonces leyendo la ayuda de Delphi en el apartado "Component's Writer Guide" he ido poco a poco probando cosas.

Al final la magia está en los paquetes: paquetes de ejecución, paquetes de diseño y paquetes mixtos. La solución a mis problemas estaba en los paquetes de diseño que tienen la información de los editores de propiedades como dijo Neftali.

Un saludo y muchas gracias de nuevo!
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
lista desplegable nikotina Conexión con bases de datos 1 09-10-2006 19:27:23
¿ DBGrid.PickList := Lista Desplegable con valores de una tabla? Peterman Conexión con bases de datos 5 09-06-2006 16:42:20
Componente lista transparente DarKraZY Varios 5 01-06-2006 14:21:41
lista desplegable windows media player Renees Varios 5 02-09-2005 00:24:29
Lista desplegable dinámica HombreSigma PHP 1 12-07-2004 09:22:39


La franja horaria es GMT +2. Ahora son las 20:05:04.


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