Página 1 de 1

Form desde codigo y from desde IDE

Publicado: Jue May 17, 2007 11:11 am
por Rene Flores
Hola a todos:
Vamos a ver.... si yo hago:
CLASS TFORM FROM XFORM
PROPERTY nClrPane := RGB(255,0,0)
ENDCLASS
Se supone, creo entender, que se sobrecarga la data nClrPane para TODOS
mis fomularios, y me tendria que pintar el fondo en rojo en todos ellos,
peeeeeero....
Si yo hago un DEFINE FORM, con el preprocesado que hizo Bingen para
hacer formularios con codigo, pues todo va bien, tengo un form con fondo
rojo y todos los forms que haga a partir de DEFINE FORM tienen el fondo
rojo.
Sin embargo si yo hago un formulario desde el IDE, me pone el color de
fondo predeterminado, y no hay manera de cambiarlo para que me respete
la sobrecarga de la propiedad, porque el IDE asgina el color al
formulario en "algun lugar", no en el eventro CREATEFORM(), no aparece
por ningun sitio, y no hay forma de decirle al IDE que no tome el color
predeterminado (se podria cambiar en el on initialize, pero... ¿ para
que sobrecargue la propiedad ?).
Pregunta.... ¿ habra alguna forma de decirle al IDE que NO QUIERO LOS
COLORES ESTANDAR y que me respete la sobrecarga de la clase ?.
Saludos
Rene Flores
http://www.ciber-tec.com

Form desde codigo y from desde IDE

Publicado: Jue May 17, 2007 2:09 pm
por Rene Flores
Me respondo a mi mismo:
>
> CLASS TFORM FROM XFORM
> PROPERTY nClrPane INIT RGB(255,0,0)
> ENDCLASS
Esto hecho asi, asignando directamente a la PROPERTY funciona sin problmeas
Ahora lo que no funciona es:
APPDATA:ADDDATA("colorventana",Rgb(255,0,0))
CLASS TFORM FROM XFORM
PROPERTY nClrPan INIT APPDATA:ColorVentana
ENDCLASS
Si asgino directametne el color, funciona, si lo hago por una appdata
no, lo curiosos es que tengo 2 propiedades sobrecargadas por APPDATA
anteriores una sobre TBROWSE y otra sobre TEDIT y funcionan sin
problema, pero cuando llega a la linea donde esta el TFORM la aplicacion
se congela y se queda ahi...
Alguna sugerencia ?
Saludos
Rene Flores
http://www.ciber-tec.com

Form desde codigo y from desde IDE

Publicado: Jue May 17, 2007 2:15 pm
por ignacio
Rene,
Los valores iniciales de las property tienen que ser valores simples, es
decir, igual que en el caso de variables tipo STATIC.
Te recomiendo que simplemente sobrecargues igualmente el constructor New() y
ahí asignes la propiedad nCrlPane, sin olvidarte de llamar a Super:New(
oParent ) al final del método.
Un saludo,
--
Ignacio Ortiz de Zúñiga
http://www.xailer.com
"Rene Flores" <"rflores[nospam]"@ciber-tec.com> escribió en el mensaje
news:464c45d6$[email=1@ozsrv2.ozlan.local...]1@ozsrv2.ozlan.local...[/email]
> Me respondo a mi mismo:
>
>>
>> CLASS TFORM FROM XFORM
>> PROPERTY nClrPane INIT RGB(255,0,0)
>> ENDCLASS
>
> Esto hecho asi, asignando directamente a la PROPERTY funciona sin
> problmeas
>
> Ahora lo que no funciona es:
>
> APPDATA:ADDDATA("colorventana",Rgb(255,0,0))
>
> CLASS TFORM FROM XFORM
> PROPERTY nClrPan INIT APPDATA:ColorVentana
> ENDCLASS
>
> Si asgino directametne el color, funciona, si lo hago por una appdata no,
> lo curiosos es que tengo 2 propiedades sobrecargadas por APPDATA
> anteriores una sobre TBROWSE y otra sobre TEDIT y funcionan sin problema,
> pero cuando llega a la linea donde esta el TFORM la aplicacion se congela
> y se queda ahi...
>
> Alguna sugerencia ?
>
> Saludos
>
> Rene Flores
> http://www.ciber-tec.com

Form desde codigo y from desde IDE

Publicado: Jue May 17, 2007 2:52 pm
por jfgimenez
Rene,
> Si asgino directametne el color, funciona, si lo hago por una appdata no,
> lo curiosos es que tengo 2 propiedades sobrecargadas por APPDATA
> anteriores una sobre TBROWSE y otra sobre TEDIT y funcionan sin problema,
> pero cuando llega a la linea donde esta el TFORM la aplicacion se congela
> y se queda ahi...
Haz caso a lo que te ha dicho Ignacio: los valores de las cláusulas INIT
deben ser valores simples, que no cambien a lo largo de la ejecución del
programa. No obstante, se puede hacer lo que quieres con algunas
limitaciones, pero teniendo muy en cuenta cómo funciona el motor de objetos.
La explicación es la siguiente: el motor de objetos de [x]Harbour es
dinámico en muchos sentidos, y uno de ellos es la propia creación de las
clases (además de los objetos). La primera vez que se instancia un objeto de
una clase determinada, es cuando se crea la clase (para las demás
instancias, la clase ya está creada). Pues bien, cuando se crea la clase es
cuando se evalúan las cláusulas INIT, y cuando se instancian los objetos de
esas clases ya no se vuelven a evaluar. Por lo tanto, si una cláusula INIT
llama a una función que devuelve un valor, esa llamada sólo ocurrirá una
vez, y las sucesivas veces se utilizará el primer valor obtenido.
En TEdit y TBrowse te ha funcionado porque seguro que estás calculando ese
valor antes de instanciar ningún edit. Pero para TForm, seguro que estás
creando el formulario principal (o algún otro formulario) antes de calcular
ese valor, y claro, cuando creas los demás formularios ya no se vuelve a
evaluar esa cláusula INIT.
--
Un saludo,
José F. Giménez
http://www.xailer.com
http://www.xailer.info