PDA

Ver la Versión Completa : Ayuda con el procedimiento Notification de Tcomponent


Punzo
04-05-2006, 02:44:19
Quiero crear un derivado de cxGrid (Developer Express), pero no encuentro una funcion o procedimiento virtual, que se llame cuando se genere una nueva vista del cxGrid aparte del Notification de TComponent; Existe alguna funcion o procedimiento que se llame al crear la vista ademas de Notification? de antemano gracias

delphi.com.ar
04-05-2006, 15:48:59
Quiero crear un derivado de cxGrid (Developer Express), pero no encuentro una funcion o procedimiento virtual, que se llame cuando se genere una nueva vista del cxGrid aparte del Notification de TComponent; Existe alguna funcion o procedimiento que se llame al crear la vista ademas de Notification? de antemano gracias
¿Podrías aclarar un poco que es lo que quieres?... ¿¿quieres que el contenedor se entere cuando se le agrega un componente??

Punzo
09-05-2006, 03:03:46
¿Podrías aclarar un poco que es lo que quieres?... ¿¿quieres que el contenedor se entere cuando se le agrega un componente??

Cada que se genere una vista, quiero ponerle propiedades diferentes, por eso quiero saber si existe un metodo dentro del cxgrid que pueda redefinir, que sea virtual. Y podria decirse que precisamente es lo que quiero que el contenedor se entere cuando se le agrega una vista.

Al González
11-05-2006, 02:25:17
¡Hola a todos!

Conozco a Iván Punzo en persona y sé a grandes rasgos lo que está buscando. Desea crear un componente derivado de TcxGrid, que intercepte el momento en que otro tipo de componente, de clase TcxGridDBTableView, es agregado a la forma. El escenario general es este:

Los componentes rejilla TcxGrid suelen contener (visualmente) en su interior a otros componentes llamados "vistas" (normalmente de tipo TcxGridDBTableView). Tanto la rejilla TcxGrid como las vistas TcxGridDBTableView son componentes que la forma contenedora adueña. En tiempo de diseño, el programador puede agregar a la rejilla TcxGrid tantas vistas TcxGridDBTableView como desee (es como cuando se agrega un nuevo elemento a una colección, o un nuevo campo persistente a una tabla).

Iván desea interceptar el momento en que una nueva vista es agregada a la rejilla para asignarle cierto valor predeterminado a una de sus propiedades; algo así como «Bienvenido nuevo objeto vista, póngase este abrigo porque aquí hace frío». Como no parece haber un método virtual que específicamente esté relacionado con esa acción, le sugerí redefinir el método Notification. Sabemos que una alternativa es redefinir la clase TcxGridDBTableView en lugar de la clase TcxGrid, pero ese camino está descartado por razones particulares del caso en cuestión.

Lo que Iván necesita es comprender cómo debe utilizar el método redefinido Notification para ponerle su abrigo a cada nueva vista que es creada en la rejilla. Cabe recordar que la rejilla TcxGrid no es el dueño (Owner) de las vistas que contiene, el dueño de éstas es la forma misma donde está la rejilla (así como una forma puede adueñar a un TTable y también a sus campos persistentes).

Un abrazo visto.

Al González. :)

Punzo
11-05-2006, 02:50:34
¡Hola a todos!

Conozco a Iván Punzo en persona y sé a grandes rasgos lo que está buscando. Desea crear un componente derivado de TcxGrid, que intercepte el momento en que otro tipo de componente, de clase TcxGridDBTableView, es agregado a la forma. El escenario general es este:

Los componentes rejilla TcxGrid suelen contener (visualmente) en su interior a otros componentes llamados "vistas" (normalmente de tipo TcxGridDBTableView). Tanto la rejilla TcxGrid como las vistas TcxGridDBTableView son componentes que la forma contenedora adueña. En tiempo de diseño, el programador puede agregar a la rejilla TcxGrid tantas vistas TcxGridDBTableView como desee (es como cuando se agrega un nuevo elemento a una colección, o un nuevo campo persistente a una tabla).

Iván desea interceptar el momento en que una nueva vista es agregada a la rejilla para asignarle cierto valor predeterminado a una de sus propiedades; algo así como «Bienvenido nuevo objeto vista, póngase este abrigo porque aquí hace frío». Como no parece haber un método virtual que específicamente esté relacionado con esa acción, le sugerí redefinir el método Notification. Sabemos que una alternativa es redefinir la clase TcxGridDBTableView en lugar de la clase TcxGrid, pero ese camino está descartado por razones particulares del caso en cuestión.

Lo que Iván necesita es comprender cómo debe utilizar el método redefinido Notification para ponerle su abrigo a cada nueva vista que es creada en la rejilla. Cabe recordar que la rejilla TcxGrid no es el dueño (Owner) de las vistas que contiene, el dueño de éstas es la forma misma donde está la rejilla (así como una forma puede adueñar a un TTable y también a sus campos persistentes).

Un abrazo visto.

Al González. :)

Basicamente es eso, crear un componente derivado de Cxgrid que cada vez que se agregue una vista cambie el valor de la propiedad StyleSheet, por el valor de una nueva propiedad llamada DefaultStyleSheet (que previamente se creo).

roman
11-05-2006, 04:03:17
Y exactamente ¿cuál es el problema? Si realmente se llama a Notification al momento de insertar la "vista" pues bastaría algo como:


procedure TMicxGrid.Notification(AComponent: TComponent; Operation: TOperation);
begin
inherited;

if (Operation = opInsert) and (AComponent is TcxGridDBTableView) then
begin
TcxGridDBTableView(AComponent).PonteElSaco;
end;
end;


// Saludos

Punzo
11-05-2006, 23:52:42
Muchas gracias Roman, creo que falta una tercera condicion en caso de que se encuentren 2 micxgrid, esto es para que en caso de que cambie cierta propiedad a micxgrid1, esta propiedad no sea cambiada en micxgrid2. Me podrias echar la mano como puede ser la otra condicion?. De antemano gracias