Página 1 de 1
De Xailer 1.9 a 6.1
Publicado: Lun Abr 01, 2019 1:49 pm
por buzonjmartial
Buenos días,
He empezado ha convertir todos los proyectos y por ahora, gratamente sorprendido con esta nueva versión, el sistema XVC una maravilla, enhorabuena al Equipo de Xailer.
Ahora voy a intentar explicar dudas y problemas que estoy teniendo.
1.- ¿ Existe alguna forma de cargar un BMP en un TPicture y salvarlo como JPG?
Antes lo hacía con freeimage.
2.- Si Xailer tiene los wrappers de freeimage en su lib, me gustaría poder usar algunas funciones, pero no se como las habéis llamado ni si se necesita enlazar algo.
Lo mismo no es así.
3.- Tengo el siguiente error, que antes no sucedía:
LLamo un TFomMenu ---> TFormFicha ----> TFomPrueba ( Este es el orden de llamadas)
Si en TFormPrueba pongo ::oParent:DATAdeTFormFicha, me da error diciendo que oParent es TFormMenu.
¿ Cómo accedo a DATA´s de Clases padres anteriores, que ha cambiado ?
4.- ¿Existe en esta nueva versión alguna forma de ponerle una "VARIABLE" al nClrPane (por ejemplo) de cualquier control en el IDE con mi color verde por ejemplo, y
cambiando su valor me cambie ese color en toda la aplicación ?
Me refiero a cualquier propiedad de los controles en el IDE en general, no a nClrPane en concreto.
5.- En el XVC, una vez "Confirmas" y pones un comentario, si me equivoco, ya no me deja modificar tal comentario, las etiquetas sí, las veces que quiera.
¿ O yo no encuentro como hacerlo y sí es posible?
6.- En el XVC ¿se pueden elegir los colores de las etiquetas?
7.- Antes me dejaba acceder a la propiedad lTransparent en los controles creados por mi que heredaran de la TControl. Ahora me dice que no, porque es PROTECTED.
¿ De que manera se puede modificar esa propiedad actualmente?
Gracias y enhorabuena por el buen trabajo realizado,
Joaquín Martínez
Re: De Xailer 1.9 a 6.1
Publicado: Mar Abr 02, 2019 11:12 am
por ignacio
Buenos días,
Código: Seleccionar todo
1.- ¿ Existe alguna forma de cargar un BMP en un TPicture y salvarlo como JPG?
Antes lo hacía con freeimage.
::oImage1:oPicture:Save( "test.jpg",1 )
Código: Seleccionar todo
2.- Si Xailer tiene los wrappers de freeimage en su lib, me gustaría poder usar algunas funciones, pero no se como las habéis llamado ni si se necesita enlazar algo.
Lo mismo no es así.
Sólo se han hecho los wrappers que se han necesitado, todos ellos en bajo nivel y sólo accesibles en el modulo interno de clase (no se entrega). Es decir, no son accesibles desde Harbour.
Código: Seleccionar todo
3.- Tengo el siguiente error, que antes no sucedía:
LLamo un TFomMenu ---> TFormFicha ----> TFomPrueba ( Este es el orden de llamadas)
Si en TFormPrueba pongo ::oParent:DATAdeTFormFicha, me da error diciendo que oParent es TFormMenu.
¿ Cómo accedo a DATA´s de Clases padres anteriores, que ha cambiado ?
No consigo entenderle, lo siento. Mande un ejemplo por favor.
Código: Seleccionar todo
5.- En el XVC, una vez "Confirmas" y pones un comentario, si me equivoco, ya no me deja modificar tal comentario, las etiquetas sí, las veces que quiera.
¿ O yo no encuentro como hacerlo y sí es posible?
No se puede.
Código: Seleccionar todo
6.- En el XVC ¿se pueden elegir los colores de las etiquetas?
No se puede.
Código: Seleccionar todo
7.- Antes me dejaba acceder a la propiedad lTransparent en los controles creados por mi que heredaran de la TControl. Ahora me dice que no, porque es PROTECTED.
¿ De que manera se puede modificar esa propiedad actualmente?
Cuando se ha hecho así es precisamente porque el control no funciona correctamente en modo transparente. No obstante, diga de control se trata y de damos una respuesta más precisa.
Saludos
Re: De Xailer 1.9 a 6.1
Publicado: Mar Abr 02, 2019 6:54 pm
por buzonjmartial
Buenas tardes,
Código: Seleccionar todo
1.- ¿ Existe alguna forma de cargar un BMP en un TPicture y salvarlo como JPG?
Antes lo hacía con freeimage.
::oImage1:oPicture:Save( "test.jpg",1 )
Esto es lo que pone la ayuda de XAILER
TPicture:save()
Graba la imagen en disco. No se soporta la conversión entre diferentes formatos de imagen. La imagen se guardará con el mismo formato que se leyó.
Código: Seleccionar todo
3.- Tengo el siguiente error, que antes no sucedía:
LLamo un TFomMenu ---> TFormFicha ----> TFomPrueba ( Este es el orden de llamadas)
Si en TFormPrueba pongo ::oParent:DATAdeTFormFicha, me da error diciendo que oParent es TFormMenu.
¿ Cómo accedo a DATA´s de Clases padres anteriores, que ha cambiado ?
No consigo entenderle, lo siento. Mande un ejemplo por favor.
Dentro de TFormMenu() llamo al form TFormFicha(), y dentro de TFormFicha() llamo a TFomPrueba() de esta manera:
TFomPrueba():new( Self ):showModal()
Pues Bien, si en TFomPrueba() quiero preguntar por su padre (Por ejemplo para saber el valor de una DATA de TFormFicha() ), siempre se ha usado ::oParent, pero
ahora, ::oParent parece ser, hace referencia a TFormMenu().
Intento clarificar un poco más, tres formularios que se llaman en este orden:
Padre -> Hijo -> Nieto
Si el NIETO pide el valor de ::oParent, ahora devuelve PADRE, antes que era lo correcto, devolvía HIJO.
Código: Seleccionar todo
7.- Antes me dejaba acceder a la propiedad lTransparent en los controles creados por mi que heredaran de la TControl. Ahora me dice que no, porque es PROTECTED.
¿ De que manera se puede modificar esa propiedad actualmente?
Cuando se ha hecho así es precisamente porque el control no funciona correctamente en modo transparente. No obstante, diga de control se trata y de damos una respuesta más precisa.
Me refiero a XWinControl
Y la clase la heredo así:
CLASS TXgrafica FROM XWinControl
Y en el método new() funcionaba esto: ::ltransparent := .T.
Ahora no.
Gracias,
Re: De Xailer 1.9 a 6.1
Publicado: Mar Abr 02, 2019 7:31 pm
por jfgimenez
Joaquín,
buzonjmartial escribió:Código: Seleccionar todo
1.- ¿ Existe alguna forma de cargar un BMP en un TPicture y salvarlo como JPG?
Antes lo hacía con freeimage.
::oImage1:oPicture:Save( "test.jpg",1 )
Esto es lo que pone la ayuda de XAILER
TPicture:save()
Graba la imagen en disco. No se soporta la conversión entre diferentes formatos de imagen. La imagen se guardará con el mismo formato que se leyó.
Eso era antes. Quizás la ayuda esté un poco desactualizada en este punto. Desde que utilizamos GDI+ internamente sí que se puede guardar en otro formato, concretamente en BMP, JPG, PNG y GIF; no recuerdo ahora si hay algún otro formato más.
buzonjmartial escribió:Código: Seleccionar todo
3.- Tengo el siguiente error, que antes no sucedía:
LLamo un TFomMenu ---> TFormFicha ----> TFomPrueba ( Este es el orden de llamadas)
Si en TFormPrueba pongo ::oParent:DATAdeTFormFicha, me da error diciendo que oParent es TFormMenu.
¿ Cómo accedo a DATA´s de Clases padres anteriores, que ha cambiado ?
No consigo entenderle, lo siento. Mande un ejemplo por favor.
Dentro de TFormMenu() llamo al form TFormFicha(), y dentro de TFormFicha() llamo a TFomPrueba() de esta manera:
TFomPrueba():new( Self ):showModal()
Pues Bien, si en TFomPrueba() quiero preguntar por su padre (Por ejemplo para saber el valor de una DATA de TFormFicha() ), siempre se ha usado ::oParent, pero
ahora, ::oParent parece ser, hace referencia a TFormMenu().
Intento clarificar un poco más, tres formularios que se llaman en este orden:
Padre -> Hijo -> Nieto
Si el NIETO pide el valor de ::oParent, ahora devuelve PADRE, antes que era lo correcto, devolvía HIJO.
Revísalo bien, porque debes tener algo incorrecto en tu código. ::oParent siempre guarda el objeto que le pasas en el New(), a no ser que lo cambies después o que no le pasas nada a New()
buzonjmartial escribió:Código: Seleccionar todo
7.- Antes me dejaba acceder a la propiedad lTransparent en los controles creados por mi que heredaran de la TControl. Ahora me dice que no, porque es PROTECTED.
¿ De que manera se puede modificar esa propiedad actualmente?
Cuando se ha hecho así es precisamente porque el control no funciona correctamente en modo transparente. No obstante, diga de control se trata y de damos una respuesta más precisa.
Me refiero a XWinControl
Y la clase la heredo así:
CLASS TXgrafica FROM XWinControl
Y en el método new() funcionaba esto: ::ltransparent := .T.
Ahora no.
Ha llovido mucho desde xHarbour
![Wink ;-)](./images/smilies/icon_e_wink.gif)
Si quieres seguir usando ::lTransparent, tendrás que declararlo como PUBLIC en la clase hija.
Re: De Xailer 1.9 a 6.1
Publicado: Mar Abr 02, 2019 7:35 pm
por ignacio
1) Esa limitación no es total. De BMP a JPG funciona correctamente. Probado
2) No consigo reproducir su problema. Lo siento:
Código: Seleccionar todo
FUNCTION CreateForm( oParent, cCargo )
LOCAL oForm
WITH OBJECT oForm := TForm():New( oParent )
oParent:cText := cCargo
:Cargo := cCargo
:nWidth := 400
:nHeight := 200
:Create()
WITH OBJECT TButton():New( oForm )
:cText := "click!"
:OnClick := {|| CreateForm (oForm, cCargo + "*" ) }
:Create()
END WITH
:ShowModal()
END WITH
RETURN oForm
![2019-04-02 19_24_29-Delphi Tokyo - VMware Workstation.png](./download/file.php?id=454&sid=07a3352c89fa805df7de67d59ddfe393)
- 2019-04-02 19_24_29-Delphi Tokyo - VMware Workstation.png (72.94 KiB) Visto 10660 veces
3) Tampoco consigo reproducir su error. Aquí funciona correctamente:
Código: Seleccionar todo
CLASS TXGrafica FROM TWinControl
METHOD New( oParent ) CONSTRUCTOR
END CLASS
METHOD New( oParent ) CLASS TXGrafica
::Super:New( oParent )
::lTransparent := .T.
RETURN Self
Saludos
Nota: Es posible que sus problemas se daban al cambio de xHarbour a Harbour. Revise igualmente el texto en rojo de lonuevo.htm
https://www.xailer.com/dokuwiki/doku.ph ... .a.harbour
https://www.xailer.com/?lonuevo
Re: De Xailer 1.9 a 6.1
Publicado: Mar Abr 02, 2019 8:43 pm
por buzonjmartial
Gracias Ignacio,
1) Gracias, funciona perfectamente como dices.
2) Sigo haciendo pruebas para ver que ocurre exactamente.
3) Solucionado poniendo en mi clase heredada:
PUBLIC:
PROPERTY lTransparent
Parece que la clase TWinControl de Xailer, usa una PROPERTY con ámbito PROTECTED.
Re: De Xailer 1.9 a 6.1
Publicado: Mar Abr 02, 2019 8:53 pm
por jfgimenez
Joaquín,
buzonjmartial escribió: 3) Solucionado poniendo en mi clase heredada:
PUBLIC:
PROPERTY lTransparent
Parece que la clase TWinControl de Xailer, usa una PROPERTY con ámbito PROTECTED.
Sí, es correcto. Hay controles que derivan de TWinControl que no tienen esa propiedad, y por lo tanto la clase padre no debe mostrarla. Son las clases hijas que sí tengan esa propiedad las que deben "publicarla". El hecho de que exista en TWinControl (aunque sea PROTECTED) es porque comparten la rutina de pintado por defecto. Si no lo hubiéramos hecho así, tendríamos que haber repetido esa misma rutina de pintado en cada una de las clases hijas
Re: De Xailer 1.9 a 6.1
Publicado: Mié Abr 03, 2019 7:55 am
por buzonjmartial
Buenos días,
¿ Me podéis decir algo sobre esta pregunta? Si se puede hacer de forma fácil o existe algún "truco" para conseguir esa funcionalidad.
Código: Seleccionar todo
4.- ¿Existe en esta nueva versión alguna forma de ponerle una "VARIABLE" al nClrPane (por ejemplo) de cualquier control en el IDE con mi color verde por ejemplo, y
cambiando su valor me cambie ese color en toda la aplicación ?
Me refiero a cualquier propiedad de los controles en el IDE en general, no a nClrPane en concreto.
Gracias,
Re: De Xailer 1.9 a 6.1
Publicado: Mié Abr 03, 2019 11:00 am
por ignacio
Buenos días,
La forma más sencilla es sobrecargar la clase T. Algo así:
Código: Seleccionar todo
CLASS TEdit FROM XEdit
PROPERTY nClrPane INIT clBlue
END CLASS
Este código cambia el color de fondo de todos los controles tipo TEdit y heredados, como por ejemplo: TMaskEdit.
Si quieres complicarlo un poquito más, puedes hacer lo siguiente
Código: Seleccionar todo
CLASS TEdit FROM XEdit
PROPERTY nClrPane INIT clBlue WRITE METHOD SetClrPane
METHOD SetClrPane( Value )
END CLASS
METHOD SetClrPane( Value ) CLASS TEdit
Value := ???????
RETURN ::Super( Value )
Saludos
Re: De Xailer 1.9 a 6.1
Publicado: Mié Abr 03, 2019 11:11 am
por buzonjmartial
Muchas gracias Ignacio,
No sabía si estaba implementado ya de otra forma, pero así, lo veo una solución estupenda.
Re: De Xailer 1.9 a 6.1
Publicado: Mié Abr 03, 2019 7:03 pm
por buzonjmartial
ignacio escribió:Buenos días,
La forma más sencilla es sobrecargar la clase T. Algo así:
Código: Seleccionar todo
CLASS TEdit FROM XEdit
PROPERTY nClrPane INIT clBlue
END CLASS
Este código cambia el color de fondo de todos los controles tipo TEdit y heredados, como por ejemplo: TMaskEdit.
Si quieres complicarlo un poquito más, puedes hacer lo siguiente
Código: Seleccionar todo
CLASS TEdit FROM XEdit
PROPERTY nClrPane INIT clBlue WRITE METHOD SetClrPane
METHOD SetClrPane( Value )
END CLASS
METHOD SetClrPane( Value ) CLASS TEdit
Value := ???????
RETURN ::Super( Value )
Saludos
Perdón, pero no me sirve esta manera.
Lo que necesito es una variable que pueda ponerla en el IDE en una propiedad de los controles que quiera y poder cambiar el color por ejemplo.
Si tengo 10 TLabel y 10 TEdit por ejemplo y en la propiedad nClrPane de los que yo quiera, le pongo una variable, en mi aplicación pongo clRed por ejemplo,
como valor de esa variable, Xailer cambiaría la variable por su valor a la hora de ejecutarlo.
Esta es la funcionalidad que ando buscando.
Re: De Xailer 1.9 a 6.1
Publicado: Mié Abr 03, 2019 7:15 pm
por ignacio
Buenas tardes,
Código: Seleccionar todo
MEMVAR MiVariable // En algún sitio estará declarada como PUBLIC
CLASS TEdit FROM XEdit
PROPERTY nClrPane INIT clBlue READE METHOD GetClrPane
METHOD GetClrPane()
END CLASS
METHOD GetClrPane() CLASS TEdit
RETURN MiVariable
Re: De Xailer 1.9 a 6.1
Publicado: Mié Abr 03, 2019 7:22 pm
por buzonjmartial
Buenas tardes,
Sí Ignacio, eso entiendo que es así, pero lo que quiero es usar en el IDE la variable MiVariable como una propiedad y que él me permita o
dar un valor por defecto mientras diseño, o que en modo diseño la ignore.
No se si me he explicado bien.
Gracias,
Re: De Xailer 1.9 a 6.1
Publicado: Mié Abr 03, 2019 8:19 pm
por jfgimenez
Joaquín,
por favor, intenta concretar más lo que necesitas. Si es posible, dinos exactamente qué es lo que quieres hacer. Lo mismo hay alguna solución más sencilla que lo que tú estás pensando.
Re: De Xailer 1.9 a 6.1
Publicado: Mié Abr 03, 2019 8:38 pm
por buzonjmartial
Buenas tardes,
A ver si soy capaz de explicarme mejor.
Por ejemplo,
1) en toda mi aplicación, quiero cambiar todos los colores de nClrPane que sean rojos a verdes.
2) en toda mi aplicación, quiero cambiar todos los colores de nClrText que sean rojos a verdes.
3) en toda mi aplicación, quiero cambiar todos los fonts que sean Arial 8 a Tahoma 8.
Una opción sería recorrer todos los controles cada vez que abra un Form y hacer el cambio a mano, sabiendo que valor le puse en el IDE,
pero usando una variable en el IDE sería ideal, luego en el mismo IDE defino esas variables por defecto y trabajo con ellas, y en mi aplicación
podría definir esas variables con el valor que quiera en tiempo de ejecución, no con el valor por defecto que tenían en el IDE, sino con otro, elegido
por el usuario por ejemplo.
Espero haberme explicado ahora.
Gracias,
Re: De Xailer 1.9 a 6.1
Publicado: Jue Abr 04, 2019 10:51 am
por ignacio
Buenos días,
luego en el mismo IDE defino esas variables por defecto y trabajo con ellas
Lo siento, eso no se puede hacer. Es del todo imposible.
No obstante y como el anuncio: Perdóname que insista...
La solución que te he propuesto es perfectamente válida e incluso cientos de veces mejor de la que propones. Funcionaría incluso con controles que hubieses instanciado sin haber tenido en cuenta para nada el asunto del color. Incluso con formularios de otros proyectos que hayas añadido como una librería. A continuación va un proyecto de ejemplo.
Saludos
Re: De Xailer 1.9 a 6.1
Publicado: Jue Abr 04, 2019 7:57 pm
por jfgimenez
Joaquín,
la solución que te ha dado Ignacio es la mejor, créeme. Y para el caso 3) puedes sobrecargar el método Create() de TForm y asignar ahí la fuente que tú quieras. Como los controles de un formulario (salvo que cambies expresamente su propiedad oFont) utilizan la fuente del formulario donde estén, pues sólo necesitas cambiarla en el formulario.