Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Abrir Dialog desde propiedad de componente (https://www.clubdelphi.com/foros/showthread.php?t=36524)

hector.roma 15-10-2006 15:18:25

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.

dec 15-10-2006 15:53:02

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. ;)

hector.roma 15-10-2006 16:02:26

Gracias
 
Gracias por orientar mis pasos.

Buscaré más información ahora que sé lo que tengo que buscar, gracias otra vez.

hector.roma 16-10-2006 22:37:05

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.

maeyanes 16-10-2006 22:54:13

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...

hector.roma 17-10-2006 00:08:26

Gracias
 
Ahora si que luce mejor, muchas gracias


La franja horaria es GMT +2. Ahora son las 20:23:02.

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