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 15-10-2006
Avatar de hector.roma
hector.roma hector.roma is offline
Miembro
 
Registrado: jul 2005
Ubicación: a caballo entre Galicia y Portugal
Posts: 58
Poder: 19
hector.roma Va por buen camino
Abrir Dialog desde propiedad de componente

Estoy intentando definir un componente y quiero que para establecer una de las propiedades se abra un cuadro de diálogo para buscar por ejemplo, un fichero...

Es decir, cuando agregamos un nuevo componente TImage en un formulario delphi, una de las propiedades es:
Propiedad | Valor | Botón para abrir diálogo
----------+--------+-------------------------
Picture | (None) | [...]
Espero que haya quedado, más o menos, claro que lo que me interesa es crear una propiedad que tenga un comportamiento similar por ejemplo a la propiedad Picture de un TImage.

Gracias a todos por vuestra ayuda.
Responder Con Cita
  #2  
Antiguo 15-10-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,

Por si te sirve de algo te diré que lo que comentas tiene un nombre: "Property Editors", o editor de propiedades. Con Delphi vienen unos cuantos en la carpeta "Property Editors" que encontrarás en la carpeta "Source" del directorio de instalación de Delphi.

En ciertos componentes DecComp se hace también uso de algún editor de propiedades y tal vez quieras echar un vistazo al código fuente.

En todo caso, al menos ya sabes por qué buscar, o esa era al menos mi intención.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 15-10-2006
Avatar de hector.roma
hector.roma hector.roma is offline
Miembro
 
Registrado: jul 2005
Ubicación: a caballo entre Galicia y Portugal
Posts: 58
Poder: 19
hector.roma Va por buen camino
Gracias

Gracias por orientar mis pasos.

Buscaré más información ahora que sé lo que tengo que buscar, gracias otra vez.
Responder Con Cita
  #4  
Antiguo 16-10-2006
Avatar de hector.roma
hector.roma hector.roma is offline
Miembro
 
Registrado: jul 2005
Ubicación: a caballo entre Galicia y Portugal
Posts: 58
Poder: 19
hector.roma Va por buen camino
Actualizar el valor de la propiedad

Gracias, pero vuelvo con otra cuestión que no le acabo de encontrar la solución.

Actualmente tengo algo similar a...

Código Delphi [-]... TPathProperty = class(TPropertyEditor) public procedure Edit; override; function GetAttributes: TPropertyAttributes; override; end; TAlgo = class (TEdit) private FFileName:string; published property FileName:string read FFileName write FFileName; end; ... implementation procedure Register; begin RegisterPropertyEditor(TypeInfo(String),TAlgo,'FileName', TPathProperty); end; ... function TPathProperty.GetAttributes: TPropertyAttributes; begin Result := [paDialog]; end; procedure TPathProperty.Edit; var OPD: TOpenDialog; begin OPD := TOpenDialog.Create(Self.Designer.GetComponent(Self.GetName)); try OPD.InitialDir := ExtractFilePath(GetStrValue); if OPD.Execute then begin SetStrValue(OPD.FileName); // NOTA 1 end; finally OPD.Free; end; Designer.Modified; // NOTA 2 end; ...


Según quiero entender en este ejemplo, con la linea "NOTA 1" se establece el valor de la propiedad y con "NOTA 2" se realizan las modificaciones necesarias. Por lo que he podido ver, "NOTA 2" puede "sobrar" pues se llama de forma automática desde "NOTA 1".

El caso actualmente es que si bien, logro abrir el cuadro de diálogo y cuando leo la propiedad "FileName" tiene almacenado el valor del archivo seleccionado desde el cuadro de diálogo, el valor mostrado desde el "Object Inspector" para dicha propiedad aparece como "(Unknown)" cosa que visualmente queda poco atractiva a pesar de que, como he dicho, es funcional. ¿Se os ocurre alguna idea para que en vez de "(Unknown)" muestre el valor recuperado desde el cuadro de diálogo?

Por otro lado, tengo unos ComboBoxes con muy poco Width pero conteniendo unos Items que no entran en el Width del ComboBox. ¿Hay alguna forma para que al desplegar el ComboBox, el ancho de lo desplegado se ajuste al item del de mayor tamaño?

Nota: Obtener el ancho en pixels de un item no es problema.
Responder Con Cita
  #5  
Antiguo 16-10-2006
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 23
maeyanes Va por buen camino
Tienes que redefinir el método GetValue de tu editor de propiedades:

Código Delphi [-]
TPathProperty = class(TPropertyEditor)
  // Tu código
protected
  function GetValue: string; override;
end;

implementation

function TPathProperty.GetValue: string;
begin
  Result := { Aquí pones el valor que quieras que muestre la propiedad en el
Object Inspector }
end;


Saludos...
Responder Con Cita
  #6  
Antiguo 17-10-2006
Avatar de hector.roma
hector.roma hector.roma is offline
Miembro
 
Registrado: jul 2005
Ubicación: a caballo entre Galicia y Portugal
Posts: 58
Poder: 19
hector.roma Va por buen camino
Gracias

Ahora si que luce mejor, muchas gracias
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
Cambiar la propiedad a un componente JefeNet Varios 6 23-11-2004 12:05:45
Propiedad Intercept del componente TIdTCPServer JoseBozzano Internet 0 25-08-2004 21:39:34
Apuntar una propiedad de un componente a otra de otro componente Majo Varios 10 24-03-2004 19:46:39
Una clase como propiedad de un componente? setry2 OOP 3 30-12-2003 21:30:58


La franja horaria es GMT +2. Ahora son las 23:28:39.


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