Estoy haciendo pruebas con los controles de codejock y me he topado con un problema al intentar añadirlos en un diálogo ya creado desde recursos. Si lo hago desde una ventana me funciona perfectamente pero necesito utilizarlos dentro de diálogos que ya tengo definidos en recursos.
Me explico mejor con código:
- Code: Select all Expand view
#include 'fivewin.ch'
Function Main()
Local oWnd AS Object := Nil
Local OgRIDcONTROL AS Object := Nil
Local oCategory AS Object := Nil
Local oItem AS Object := Nil
DEFINE WINDOW oWnd FROM 0,0 TO 1000,1000 PIXEL TITLE 'Pruebas Codejock'
oGridControl := TactiveX():New( oWnd, 'Codejock.PropertyGrid.20.3.0' )
oWnd:oClient := oGridControl
oCategory := oGridControl:AddCategory('Bloque1')
oItem := oCategory:AddChildItem(0,'Tipo 0')
oItem := oCategory:AddChildItem(1,'Tipo 1')
oItem := oCategory:AddChildItem(2,'Tipo 2')
oItem := oCategory:AddChildItem(3,'Tipo 3')
oItem := oCategory:AddChildItem(4,'Tipo 4')
oItem := oCategory:AddChildItem(5,'Tipo 5')
oItem := oCategory:AddChildItem(6,'Tipo 6')
oItem := oCategory:AddChildItem(7,'Tipo 7')
oItem := oCategory:AddChildItem(8,'Tipo 8')
oItem := oCategory:AddChildItem(9,'Tipo 9')
oItem := oCategory:AddChildItem(10,'Tipo 10')
oItem := oCategory:AddChildItem(11,'Tipo 11')
oItem := oCategory:AddChildItem(12,'Tipo 12')
ACTIVATE WINDOW oWnd
Return ( Nil )
pero cuando lo intento desde recurso me indica cannot create dialog box ya que tengo un custom control que es el ActiveX que al no estar instanciado cuando activo el diálogo, falla al crearlo, pero tengo que crearlo en el ON INIT para que funcione bien la definición del control, es como el pez que se come la cola...
Este es el fichero de recursos:
- Code: Select all Expand view
#include <windows.h>
#include <commctrl.h>
#include <richedit.h>
LANGUAGE LANG_ENGLISH,SUBLANG_ENGLISH_US
DIALOGO DIALOG DISCARDABLE 33, 55, 523, 373
STYLE WS_POPUP|DS_MODALFRAME|DS_3DLOOK|WS_CAPTION|WS_SYSMENU|WS_VISIBLE
CAPTION "Prueba ActiveX"
FONT 8, "Segoe UI"
{
CONTROL "Custom control", 4001, "TActiveX", 0x00000000, 0, 0, 392, 260
}
Este es el código, lo he reducido a lo mínimo con una sola categoría para no hacer el post más largo:
- Code: Select all Expand view
#include 'fivewin.ch'
Function Main()
DEFINE DIALOG oDlg RESOURCE "DIALOGO"
ACTIVATE DIALOG oDlg ON INIT BuildGrid( oDlg )
return( Nil )
Static Function BuildGrid( oDlg )
oGridControl := TActiveX():Redefine( 4001, oDlg, "Codejock.PropertyGrid.20.3.0" )
oCategory := oGridControl:AddCategory('Bloque1')
Return ( Nil )
El error que me lanza es el siguiente:
si sustituyo el redefine por un new:
- Code: Select all Expand view
oGridControl := TActiveX():New( odlg, "Codejock.PropertyGrid.20.3.0",0,0,600,400)
y quito el custom control ActiveX del diálogo en el recurso:
- Code: Select all Expand view
#include <windows.h>
#include <commctrl.h>
#include <richedit.h>
LANGUAGE LANG_ENGLISH,SUBLANG_ENGLISH_US
DIALOGO DIALOG DISCARDABLE 33, 55, 523, 373
STYLE WS_POPUP|DS_MODALFRAME|DS_3DLOOK|WS_CAPTION|WS_SYSMENU|WS_VISIBLE
CAPTION "Prueba ActiveX"
FONT 8, "Segoe UI"
{
}
entonces funciona bien:
pero necesito definir las posiciones de los controles desde recursos.
No tengo mucha experiencia utilizando los ActiveX desde Fivewin , supongo que me dejo alguna cosa básica pero no doy con la tecla.
Cualquier ayuda es bien recibida
Gracias!