![]() |
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álogoEspero 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. |
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. ;) |
Gracias
Gracias por orientar mis pasos.
Buscaré más información ahora que sé lo que tengo que buscar, gracias otra vez. |
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. |
Tienes que redefinir el método GetValue de tu editor de propiedades:
Saludos... |
Gracias
Ahora si que luce mejor, muchas gracias
|
La franja horaria es GMT +2. Ahora son las 18:34:13. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi