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.
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
Posible Bug en el diseñador
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:
2. Agrego un Bevel, que actuará de contenedor del botón:
3. Finalmente trato de agregar el botón al contenedor sin éxito alguno:
Un saludo 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:
2. Agrego un Bevel, que actuará de contenedor del botón:
3. Finalmente trato de agregar el botón al contenedor sin éxito alguno:
Un saludo a todos.
Re: Posible Bug en el diseñador
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.:
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() } )
Re: Posible Bug en el diseñador
Buenos días José!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() } )
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() } )
EDIT
====
Prescindiendo del ":Create()" sigue comportándose de la misma manera.
- 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
Buenas,
Ese control no es de nuestro ejemplo samplesdll:
Saludos
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
Re: Posible Bug en el diseñador
Sí, tienes razón. Sin embargo, lo tenéis dentro de los Samples que vienen en el Xailer4, en la carpeta "MetaControls":ignacio escribió: Buenas,
Ese control no es de nuestro ejemplo samplesdll:
SaludosCó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
Y el código que viene lo indica de la manera que te comentaba antes:
Al parecer está suministrado por José Lalin.
La cosa es que se trata de un MetaControl ¿e igual se le escapa algo al RegisterComponent?
Re: Posible Bug en el diseñador
Juanra,
precísamente me refería a eso, a la llamada al RegisterComponent(). Prueba a quitar el :Create() del final
precísamente me refería a eso, a la llamada al RegisterComponent(). Prueba a quitar el :Create() del final
Re: Posible Bug en el diseñador
Sí, lo he probado también y sigue comportándose igual: Genera el control dentro del TForm y no del TBevel.jfgimenez escribió:Juanra,
precísamente me refería a eso, a la llamada al RegisterComponent(). Prueba a quitar el :Create() del final
- 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
Efectivamente está fallando. Mientras tanto, simplemente 'corte' y 'pegue' el control.
Saludos
Saludos
Re: Posible Bug en el diseñador
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):
Aquí lo tienes en formato parche para que se vean los cambios:
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
//------------------------------------------------------------------------------
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
- 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
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:
Un saludo
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
Re: Posible Bug en el diseñador
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.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):
Aquí lo tienes en formato parche para que se vean los cambios: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 //------------------------------------------------------------------------------
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
Parece ser que aunque selecciones el TBevel para agregar el control al mismo, en el método Create se recibe el TFormEditor:
Re: Posible Bug en el diseñador
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?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:
Un saludoCó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
- 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
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
Un saludo
Re: Posible Bug en el diseñador
Ok, gracias ignacio. A ver si se pasa por aquí y me echa un cable.