In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

Posible Bug en el diseñador

Foro de Xailer profesional en español
Responder
Avatar de Usuario
Shadax
Mensajes: 104
Registrado: Lun Mar 14, 2011 12:32 pm

Posible Bug en el diseñador

Mensaje por Shadax »

Hola, buenos días a todos!

Hoy me he dado cuenta de que cuando trato de insertar un control "TOffice2007Button" sobre un contenedor cualquiera ( Panel, Bevel ) el diseñador ignora totalmente el contenedor sobre el que se pretende insertar el botón y siempre lo genera en el formulario. ¿Cómo se puede solventar este problema?

1. Creo proyecto desde cero y agrego un simple formulario:
Imagen

2. Agrego un Bevel, que actuará de contenedor del botón:
Imagen

3. Finalmente trato de agregar el botón al contenedor sin éxito alguno:
Imagen

Un saludo a todos.
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5706
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Re: Posible Bug en el diseñador

Mensaje por jfgimenez »

Juanra,

tiene que ser un bug de ese control. Si tienes el código fuente, mira a ver cómo se está creando el control. Si hace falta, fíjate cómo se crean ese tipo de controles en \xailer\samples\controls. Quizás en la llamada a RegisterComponent() estés creando el control, cuando ahí sólo hay que instanciar el objeto. P.ej.:

Código: Seleccionar todo

   RegisterComponent( "Samples", "Label", "TBanner", {|| TBanner() } )
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
Avatar de Usuario
Shadax
Mensajes: 104
Registrado: Lun Mar 14, 2011 12:32 pm

Re: Posible Bug en el diseñador

Mensaje por Shadax »

jfgimenez escribió:Juanra,

tiene que ser un bug de ese control. Si tienes el código fuente, mira a ver cómo se está creando el control. Si hace falta, fíjate cómo se crean ese tipo de controles en \xailer\samples\controls. Quizás en la llamada a RegisterComponent() estés creando el control, cuando ahí sólo hay que instanciar el objeto. P.ej.:

Código: Seleccionar todo

   RegisterComponent( "Samples", "Label", "TBanner", {|| TBanner() } )
Buenos días José!
El control que estoy utilizando en cuestión es el que tenéis en el directorio de "Samples" del Xailer: < \Samples\MetaControls\Office2007Button\ >. Se trata de un MetaControl y utiliza la instrucción:

Código: Seleccionar todo

   RegisterComponent( "Metacontrols", "Office2007Btn", "TOffice2007Button", {|| TOffice2007Button():Create() } )
¿Será que con los metacontroles no se tiene en cuenta algo así?

EDIT
====
Prescindiendo del ":Create()" sigue comportándose de la misma manera.
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9253
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Re: Posible Bug en el diseñador

Mensaje por ignacio »

Buenas,

Ese control no es de nuestro ejemplo samplesdll:

Código: Seleccionar todo

INIT PROCEDURE SamplesDll()

   RegisterComponent( "Samples", "Label", "TBanner", {|| TBanner() } )
   RegisterComponent( "Samples", "LabelShadow", "TLabelShadow", {|| TLabelShadow() } )
   RegisterComponent( "Samples", "SearchComboBox", "TSearchComboBox", {|| TSearchComboBox() } )
   RegisterComponent( "Samples", "FilterComboBox", "TFilterComboBox", {|| TFilterComboBox() } )
   RegisterComponent( "Samples", "EditBanner", "TEditBanner", {|| TEditBanner() } )
   RegisterComponent( "Samples", "Planning", "TPlanning", {|| TPlanning() } )
   RegisterComponent( "Samples", "BToolBar", "TToolBarRE", {|| TToolBarRE() } )

RETURN
Saludos
Ignacio Ortiz de Zúñiga
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Avatar de Usuario
Shadax
Mensajes: 104
Registrado: Lun Mar 14, 2011 12:32 pm

Re: Posible Bug en el diseñador

Mensaje por Shadax »

ignacio escribió: Buenas,

Ese control no es de nuestro ejemplo samplesdll:

Código: Seleccionar todo

INIT PROCEDURE SamplesDll()

   RegisterComponent( "Samples", "Label", "TBanner", {|| TBanner() } )
   RegisterComponent( "Samples", "LabelShadow", "TLabelShadow", {|| TLabelShadow() } )
   RegisterComponent( "Samples", "SearchComboBox", "TSearchComboBox", {|| TSearchComboBox() } )
   RegisterComponent( "Samples", "FilterComboBox", "TFilterComboBox", {|| TFilterComboBox() } )
   RegisterComponent( "Samples", "EditBanner", "TEditBanner", {|| TEditBanner() } )
   RegisterComponent( "Samples", "Planning", "TPlanning", {|| TPlanning() } )
   RegisterComponent( "Samples", "BToolBar", "TToolBarRE", {|| TToolBarRE() } )

RETURN
Saludos
Sí, tienes razón. Sin embargo, lo tenéis dentro de los Samples que vienen en el Xailer4, en la carpeta "MetaControls":
Imagen


Y el código que viene lo indica de la manera que te comentaba antes:
Imagen


Al parecer está suministrado por José Lalin.

La cosa es que se trata de un MetaControl ¿e igual se le escapa algo al RegisterComponent?
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5706
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Re: Posible Bug en el diseñador

Mensaje por jfgimenez »

Juanra,

precísamente me refería a eso, a la llamada al RegisterComponent(). Prueba a quitar el :Create() del final
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
Avatar de Usuario
Shadax
Mensajes: 104
Registrado: Lun Mar 14, 2011 12:32 pm

Re: Posible Bug en el diseñador

Mensaje por Shadax »

jfgimenez escribió:Juanra,

precísamente me refería a eso, a la llamada al RegisterComponent(). Prueba a quitar el :Create() del final
Sí, lo he probado también y sigue comportándose igual: Genera el control dentro del TForm y no del TBevel. :?
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9253
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Re: Posible Bug en el diseñador

Mensaje por ignacio »

Efectivamente está fallando. Mientras tanto, simplemente 'corte' y 'pegue' el control.

Saludos
Ignacio Ortiz de Zúñiga
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5706
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Re: Posible Bug en el diseñador

Mensaje por jfgimenez »

Juanra,

veo que ese control está hecho explícitamente para que se coloque sobre el formulario, no sobre otro contenedor. Habría que cambiar lo siguiente (no lo he probado):

Código: Seleccionar todo

//------------------------------------------------------------------------------

INIT PROC RegisterOffice2007Btn()

   RegisterComponent( "Metacontrols", "Office2007Btn", "TOffice2007Button", {|| TOffice2007Button() } )

RETURN

//------------------------------------------------------------------------------

CLASS TOffice2007Button FROM TIDEMetaControl

   METHOD Create()

ENDCLASS

//------------------------------------------------------------------------------

METHOD Create( oParent ) CLASS TOffice2007Button

   LOCAL oBtn
   LOCAL aPos := GetCursorPos()

   IF ::oActiveForm == Nil
      RETURN Nil
   ENDIF

   aPos := ScreenToClient( ::oActiveForm:Handle, aPos )

   WITH OBJECT oBtn := ::AddComponent( TGlassbtn(), oParent )
      :nLeft := aPos[1]
      :nTop := aPos[2]
      :nClrGlow := 0x04BAFF
      :nClrPane := 0x04BAFF
      :nClrShine := 0xFDFFFF
      :nClrInnerBorder := clWhite
      :nClrOuterBorder := clGray
      :nClrText := clNavy
   END

   ::SetControl( oBtn )

RETURN Nil

//------------------------------------------------------------------------------
Aquí lo tienes en formato parche para que se vean los cambios:

Código: Seleccionar todo

Index: Source\Office2007Btn.prg
===================================================================
--- Source\Office2007Btn.prg	(revision: 1 head)
+++ Source\Office2007Btn.prg	(workcopy)
@@ -15,7 +15,7 @@
 
 INIT PROC RegisterOffice2007Btn()
 
-   RegisterComponent( "Metacontrols", "Office2007Btn", "TOffice2007Button", {|| TOffice2007Button():Create() } )
+   RegisterComponent( "Metacontrols", "Office2007Btn", "TOffice2007Button", {|| TOffice2007Button() } )
 
 RETURN
 
@@ -29,7 +29,7 @@
 
 //------------------------------------------------------------------------------
 
-METHOD Create() CLASS TOffice2007Button
+METHOD Create( oParent ) CLASS TOffice2007Button
 
    LOCAL oBtn
    LOCAL aPos := GetCursorPos()
@@ -40,7 +40,7 @@
 
    aPos := ScreenToClient( ::oActiveForm:Handle, aPos )
 
-   WITH OBJECT oBtn := ::AddComponent( TGlassbtn(), ::oActiveForm )
+   WITH OBJECT oBtn := ::AddComponent( TGlassbtn(), oParent )
       :nLeft := aPos[1]
       :nTop := aPos[2]
       :nClrGlow := 0x04BAFF
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9253
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Re: Posible Bug en el diseñador

Mensaje por ignacio »

Buenos días,

Realmente el control no es más que un TGlassBtn con algunas propiedades cambiadas que perfectamente lo habría podido hacer con la opción de 'Crear control de usuario'. No obstante aquí le dejo el código corregido:

Código: Seleccionar todo

INIT PROC RegisterOffice2007Btn()
   RegisterComponent( "Metacontrols", "Office2007Btn", "TOffice2007Button", {|| TOffice2007Button() } )
RETURN

CLASS TOffice2007Button FROM TGlassBtn

   PROPERTY nClrGlow          INIT 0x04BAFF
   PROPERTY nClrPane          INIT 0x04BAFF
   PROPERTY nClrShine         INIT 0xFDFFFF
   PROPERTY nClrInnerBorder   INIT clWhite
   PROPERTY nClrOuterBorder   INIT clGray
   PROPERTY nClrText          INIT clNavy

ENDCLASS

Un saludo
Ignacio Ortiz de Zúñiga
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Avatar de Usuario
Shadax
Mensajes: 104
Registrado: Lun Mar 14, 2011 12:32 pm

Re: Posible Bug en el diseñador

Mensaje por Shadax »

jfgimenez escribió:Juanra,

veo que ese control está hecho explícitamente para que se coloque sobre el formulario, no sobre otro contenedor. Habría que cambiar lo siguiente (no lo he probado):

Código: Seleccionar todo

//------------------------------------------------------------------------------

INIT PROC RegisterOffice2007Btn()

   RegisterComponent( "Metacontrols", "Office2007Btn", "TOffice2007Button", {|| TOffice2007Button() } )

RETURN

//------------------------------------------------------------------------------

CLASS TOffice2007Button FROM TIDEMetaControl

   METHOD Create()

ENDCLASS

//------------------------------------------------------------------------------

METHOD Create( oParent ) CLASS TOffice2007Button

   LOCAL oBtn
   LOCAL aPos := GetCursorPos()

   IF ::oActiveForm == Nil
      RETURN Nil
   ENDIF

   aPos := ScreenToClient( ::oActiveForm:Handle, aPos )

   WITH OBJECT oBtn := ::AddComponent( TGlassbtn(), oParent )
      :nLeft := aPos[1]
      :nTop := aPos[2]
      :nClrGlow := 0x04BAFF
      :nClrPane := 0x04BAFF
      :nClrShine := 0xFDFFFF
      :nClrInnerBorder := clWhite
      :nClrOuterBorder := clGray
      :nClrText := clNavy
   END

   ::SetControl( oBtn )

RETURN Nil

//------------------------------------------------------------------------------
Aquí lo tienes en formato parche para que se vean los cambios:

Código: Seleccionar todo

Index: Source\Office2007Btn.prg
===================================================================
--- Source\Office2007Btn.prg	(revision: 1 head)
+++ Source\Office2007Btn.prg	(workcopy)
@@ -15,7 +15,7 @@
 
 INIT PROC RegisterOffice2007Btn()
 
-   RegisterComponent( "Metacontrols", "Office2007Btn", "TOffice2007Button", {|| TOffice2007Button():Create() } )
+   RegisterComponent( "Metacontrols", "Office2007Btn", "TOffice2007Button", {|| TOffice2007Button() } )
 
 RETURN
 
@@ -29,7 +29,7 @@
 
 //------------------------------------------------------------------------------
 
-METHOD Create() CLASS TOffice2007Button
+METHOD Create( oParent ) CLASS TOffice2007Button
 
    LOCAL oBtn
    LOCAL aPos := GetCursorPos()
@@ -40,7 +40,7 @@
 
    aPos := ScreenToClient( ::oActiveForm:Handle, aPos )
 
-   WITH OBJECT oBtn := ::AddComponent( TGlassbtn(), ::oActiveForm )
+   WITH OBJECT oBtn := ::AddComponent( TGlassbtn(), oParent )
       :nLeft := aPos[1]
       :nTop := aPos[2]
       :nClrGlow := 0x04BAFF
José, el parche que indicas parece válido pero lo he probado y no funciona. En el método "Create", el parámetro que recibe ( oParent ) es de tipo "TFormEditor" por lo que al agregarlo a oParent, lo agrega al Formulario y no al control seleccionado en el mismo.

Parece ser que aunque selecciones el TBevel para agregar el control al mismo, en el método Create se recibe el TFormEditor:
Imagen
Avatar de Usuario
Shadax
Mensajes: 104
Registrado: Lun Mar 14, 2011 12:32 pm

Re: Posible Bug en el diseñador

Mensaje por Shadax »

ignacio escribió:Buenos días,

Realmente el control no es más que un TGlassBtn con algunas propiedades cambiadas que perfectamente lo habría podido hacer con la opción de 'Crear control de usuario'. No obstante aquí le dejo el código corregido:

Código: Seleccionar todo

INIT PROC RegisterOffice2007Btn()
   RegisterComponent( "Metacontrols", "Office2007Btn", "TOffice2007Button", {|| TOffice2007Button() } )
RETURN

CLASS TOffice2007Button FROM TGlassBtn

   PROPERTY nClrGlow          INIT 0x04BAFF
   PROPERTY nClrPane          INIT 0x04BAFF
   PROPERTY nClrShine         INIT 0xFDFFFF
   PROPERTY nClrInnerBorder   INIT clWhite
   PROPERTY nClrOuterBorder   INIT clGray
   PROPERTY nClrText          INIT clNavy

ENDCLASS

Un saludo
De esta manera sí funcionaría. Sin embargo, si tratamos de crear un MetaControl utilizando la técnica que tenía éste, seguiría recibiendo TFormEditor en vez de un oParent ( tal como muestro en el anterior post ). Eso se podría arreglar de alguna manera?
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9253
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Re: Posible Bug en el diseñador

Mensaje por ignacio »

Desconozco como funcionan los 'Metacontrols'. El padre de la criatura es José Lalín, espero que él mismo pueda decirte algo al respecto en breve.

Un saludo
Ignacio Ortiz de Zúñiga
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Avatar de Usuario
Shadax
Mensajes: 104
Registrado: Lun Mar 14, 2011 12:32 pm

Re: Posible Bug en el diseñador

Mensaje por Shadax »

Ok, gracias ignacio. A ver si se pasa por aquí y me echa un cable. :D
Responder