Page 1 of 1

De Xailer 1.9 a 6.1

Posted: Mon Apr 01, 2019 1:49 pm
by 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

Posted: Tue Apr 02, 2019 11:12 am
by ignacio
Buenos días,

Code: Select all

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 )

Code: Select all

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.

Code: Select all

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.

Code: Select all

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.

Code: Select all

6.- En el XVC ¿se pueden elegir los colores de las etiquetas?


No se puede.

Code: Select all

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

Posted: Tue Apr 02, 2019 6:54 pm
by buzonjmartial
Buenas tardes,


Code: Select all

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



Code: Select all

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.




Code: Select all

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

Posted: Tue Apr 02, 2019 7:31 pm
by jfgimenez
Joaquín,
buzonjmartial wrote:

Code: Select all

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 wrote:

Code: Select all

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 wrote:

Code: Select all

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 ;-)
Si quieres seguir usando ::lTransparent, tendrás que declararlo como PUBLIC en la clase hija.

Re: De Xailer 1.9 a 6.1

Posted: Tue Apr 02, 2019 7:35 pm
by ignacio
1) Esa limitación no es total. De BMP a JPG funciona correctamente. Probado

2) No consigo reproducir su problema. Lo siento:

Code: Select all

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
2019-04-02 19_24_29-Delphi Tokyo - VMware Workstation.png (72.94 KiB) Viewed 1567 times


3) Tampoco consigo reproducir su error. Aquí funciona correctamente:

Code: Select all

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.php?id=migrar.de.xharbour.a.harbour
https://www.xailer.com/?lonuevo

Re: De Xailer 1.9 a 6.1

Posted: Tue Apr 02, 2019 8:43 pm
by 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

Posted: Tue Apr 02, 2019 8:53 pm
by jfgimenez
Joaquín,

buzonjmartial wrote: 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

Posted: Wed Apr 03, 2019 7:55 am
by 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.

Code: Select all

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

Posted: Wed Apr 03, 2019 11:00 am
by ignacio
Buenos días,

La forma más sencilla es sobrecargar la clase T. Algo así:

Code: Select all

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

Code: Select all

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

Posted: Wed Apr 03, 2019 11:11 am
by 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

Posted: Wed Apr 03, 2019 7:03 pm
by buzonjmartial
ignacio wrote:Buenos días,

La forma más sencilla es sobrecargar la clase T. Algo así:

Code: Select all

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

Code: Select all

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

Posted: Wed Apr 03, 2019 7:15 pm
by ignacio
Buenas tardes,

Code: Select all

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

Posted: Wed Apr 03, 2019 7:22 pm
by 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

Posted: Wed Apr 03, 2019 8:19 pm
by 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

Posted: Wed Apr 03, 2019 8:38 pm
by 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

Posted: Thu Apr 04, 2019 10:51 am
by 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

Posted: Thu Apr 04, 2019 7:57 pm
by 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.