Cambiar objetos en un panel de TDockPnel tiempo ejecución

Post Reply
User avatar
leandro
Posts: 1719
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia
Has thanked: 11 times
Been thanked: 3 times
Contact:

Cambiar objetos en un panel de TDockPnel tiempo ejecución

Post by leandro »

Hola buenas tardes para todos

Como dice el encabezado _ el contenido de un TDockPnel en tiempo ejecución

Lo intente de la siguiente manera pero no funciona :(

Solo actualiza el titulo

Code: Select all | Expand


function cambia()

.....

//Actualizamos el titulo del panel y tambien el contenido del mismo
oDock4  := TDockPnel():New( oWChCfCn )
    :SetCaption( { | o | "Gestión configuración" } )
    :SetCtrlsPnel( { | o, nT, nL, nH, nW  | fGestionConfigura( o, nT, nL, nH, nW ) } )
END 

...

Return nil 



**************************
*GESTION DE LA INFORMACION
**************************
function fGestionConfigura( oP, nT, nL, nH, nW )      
Local cQry := space(0)
Local oBrush,oSCtIn,oGCtIn,oGNmIn,oSCtIm,oGCtIm,oGNmIm,oSCtIc,oGCtIc,oGNmIc
Local oSApPr,oCApPr,oGVeFt,oGNmVe,oBtApl,oDlg,oFont,oFont1

Define Font oFont  Name "Calibri" Size 0,-13  
Define Font oFont1 Name "Calibri" Size 0,-13 BOLD
DEFINE BRUSH oBrush GRADIENT { { 1, CLR_WHITE, CLR_WHITE } } 

if nTipoDlg == 1

    DEFINE DIALOG oDlg STYLE (WS_POPUP) SIZE oP:nWidth , oP:nHeight OF oP PIXEL BRUSH oBrush
        oDlg:nTop      := 0
        oDlg:nLeft     := 0
        oDlg:lHelpIcon := .F.

        @ 7, 5   SAY oSCtIn VAR "Cta. Ingreso: " SIZE 50, 11 PIXEL OF oDlg UPDATE TRANSPARENT FONT oFont1
        @ 5, 60 GET oGCtIn VAR cGCtIn SIZE 70,  11  PIXEL OF oDlg UPDATE BITMAP "Bbusc" ACTION EVAL(cbCuentaCnf,.T.,,1) PICTURE "@N" FONT oFont 
        @ 5, 133 GET oGNmIn VAR cGNmIn SIZE 180, 11 PIXEL OF oDlg UPDATE PICTURE "@N" FONT oFont  

        @ 22, 5   SAY oSCtIm VAR "Cta. Impuesto: " SIZE 50, 11 PIXEL OF oDlg UPDATE TRANSPARENT FONT oFont1
        @ 20, 60  GET oGCtIm VAR cGCtIm SIZE 70, 11 PIXEL OF oDlg UPDATE BITMAP "Bbusc" ACTION EVAL(cbCuentaCnf,.T.,,2) PICTURE "@N" FONT oFont
        @ 20, 133 GET oGNmIm VAR cGNmIm SIZE 180, 11 PIXEL OF oDlg UPDATE PICTURE "@N" FONT oFont
        
        @ 37, 5   SAY oSCtIc VAR "Cta. Csc/Ban/Cja:" SIZE 50, 11 PIXEL OF oDlg UPDATE TRANSPARENT FONT oFont1
        @ 35, 60  GET oGCtIc VAR cGCtIc SIZE 70, 11 PIXEL OF oDlg UPDATE BITMAP "Bbusc" ACTION EVAL(cbCuentaCnf,.T.,,3) PICTURE "@N" FONT oFont
        @ 35, 133 GET oGNmIc VAR cGNmIc SIZE 180, 11 PIXEL OF oDlg UPDATE PICTURE "@N" FONT oFont

        @ 52, 5   SAY oSApPr VAR "Grupo Afectar:" SIZE 50, 11 PIXEL OF oDlg UPDATE TRANSPARENT FONT oFont1
        @ 50, 60  DBCOMBO oCApPr VAR nCApPr ITEMS aId LIST aIdLis SIZE 70,15 PIXEL OF oDlg FONT oFont
        @ 50, 133 GET oGVeFt VAR cGVeFt SIZE 70, 11 PIXEL OF oDlg UPDATE PICTURE "@N" FONT oFont
        @ 50, 205 GET oGNmVe VAR cGNmVe SIZE 108, 11 PIXEL OF oDlg UPDATE PICTURE "@N" FONT oFont
        
        @ 65, 60 BUTTONBMP oBtApl OF oDlg PIXEL size 70, 13 RESOURCE oLamcla:cIcoSis PROMPT "&Aplicar" TEXTRIGHT 
        
        oGNmIn:disable()
        oGNmIm:disable()
        oGNmIc:disable()
        oGNmVe:disable()
        
    ACTIVATE DIALOG oDlg NOWAIT ON INIT (SetParent( oDlg:hWnd, oP:hWnd )) ON MOVE oDlg:Move( 0, 0, , , .T. ) 

elseif nTipoDlg == 2

    DEFINE DIALOG oDlg STYLE (WS_POPUP) SIZE oP:nWidth , oP:nHeight OF oP PIXEL BRUSH oBrush
        oDlg:nTop      := 0
        oDlg:nLeft     := 0
        oDlg:lHelpIcon := .F.

        @ 7, 5   SAY oSCtOt VAR "Cta. Ingreso: " SIZE 50, 11 PIXEL OF oDlg UPDATE TRANSPARENT FONT oFont1
        @ 5, 60 GET oGCtOt VAR cGCtOt SIZE 70,  11  PIXEL OF oDlg UPDATE BITMAP "Bbusc" 
        @ 5, 133 GET oGNmOt VAR cGNmOt SIZE 180, 11 PIXEL OF oDlg UPDATE PICTURE "@N" FONT oFont  
        
        @ 65, 60 BUTTONBMP oBtApl OF oDlg PIXEL size 70, 13 RESOURCE oLamcla:cIcoSis PROMPT "&Aplicar Rete" TEXTRIGHT 
        
    
    ACTIVATE DIALOG oDlg NOWAIT ON INIT (SetParent( oDlg:hWnd, oP:hWnd )) ON MOVE oDlg:Move( 0, 0, , , .T. ) 

endif

Return oDlg
 
Saludos
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Turbo Incremental Link64 6.98 Embarcadero 7.70 ] [ FiveWin 24.09 ] [ xHarbour 64 bits) ]
User avatar
cnavarro
Posts: 6555
Joined: Wed Feb 15, 2012 8:25 pm
Location: España
Been thanked: 3 times

Re: Cambiar objetos en un panel de TDockPnel tiempo ejecución

Post by cnavarro »

Leandro,
Para plantearte este tema has de enfocarlo en primer lugar olvidándote de que el contenedor sea un dockpnel o no
Por cierto, no entiendo el por qué necesitas usar un dialog dentro del dockpnel, pero imagino que tus razones tendrás
Si, olvidándote del dockpnel, tuvieras un dialog al que en tiempo de ejecución quisieras cambiar los controles que tiene, cómo lo harías ?
Intenta eso y seguimos viendo lo que necesitas
Recuerda que todo contenedor tiene un array ::aControls, en el que están todos los objetos que has definido dentro, por lo tanto

Code: Select all | Expand

   AEVal( oContenedor:aControls, { | o | o:End() } )
 
debería destruir todos los controles que hubiera ( al margen de posiblemente tener que hacer alguna cosa más ), que es el primer paso para la reutilización del contenedor
En el ejemplo que indicas es lo mismo, pero lo complicas poniendo un dialog dentro del dockpnel
Si los controles se pintasen sobre el propio dockpnel y no sobre el dialog, el array de controles está en el objeto:
oDock:oPnelH:aControls
quiero recordar
En tu caso, el array oDock:oPnelH:aControls solo contiene el objeto oDlg del diálog, por lo que

Code: Select all | Expand

   AEval(  oDock:oPnelH:aControls[ 1 ]:aControls, { | o | o:End() } )
   // Debería destruir todos los controles que hubiese en el dialog ya definidos
 
Hay otras técnicas posibles a aplicar en el caso del uso de dockpnels, pero para poderte orientar necesitaría ver exactamente lo que pretendes.
Quedo atento a tus comentarios

Pd.: no vuelvas a crear el dockpnel cada vez ( te lo digo porque tu código no me queda muy claro )
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
leandro
Posts: 1719
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia
Has thanked: 11 times
Been thanked: 3 times
Contact:

Re: Cambiar objetos en un panel de TDockPnel tiempo ejecución

Post by leandro »

Amigo buenas tardes, gracias por responder
Para plantearte este tema has de enfocarlo en primer lugar olvidándote de que el contenedor sea un dockpnel o no
Por cierto, no entiendo el por qué necesitas usar un dialog dentro del dockpnel, pero imagino que tus razones tendrás
Pues referente a este tema, es por que asumí :lol: que no se podía hacer, si no que era necesario hacerlo sobre el dialogo, simplemente seguí un ejemplo que había por ahí en el foro. Gracias por la recomendación, ya quite el dialogo y funciona de maravilla.
Hay otras técnicas posibles a aplicar en el caso del uso de dockpnels, pero para poderte orientar necesitaría ver exactamente lo que pretendes.
Quedo atento a tus comentarios
Amigo lo que pretendemos es cambiar los objetos de están dentro del dockpnel, nunca lo habíamos intentando de esa manera (destruyendo los objetos), pero ya que lo mencionas creo que podemos ocultar y mostrar los objetos que están dentro del dockpnel show() hide(), de esta manera causamos el mismo efecto.
Pd.: no vuelvas a crear el dockpnel cada vez ( te lo digo porque tu código no me queda muy claro )
Simplemente lo intentamos de esa manera a ver si lográbamos solucionarlo. :oops:
Saludos
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Turbo Incremental Link64 6.98 Embarcadero 7.70 ] [ FiveWin 24.09 ] [ xHarbour 64 bits) ]
User avatar
cnavarro
Posts: 6555
Joined: Wed Feb 15, 2012 8:25 pm
Location: España
Been thanked: 3 times

Re: Cambiar objetos en un panel de TDockPnel tiempo ejecución

Post by cnavarro »

Cualquier cosa, dame un "grito"
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
Post Reply