Cambiar objetos en un panel de TDockPnel tiempo ejecución

Cambiar objetos en un panel de TDockPnel tiempo ejecución

Postby leandro » Thu Mar 30, 2023 5:28 pm

Hola buenas tardes para todos

Como dice el encabezado necesitamos cambiar 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 view


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

[ Embarcadero C++ 7.60 for Win32 ] [ FiveWin 23.07 ] [ xHarbour 1.3.0 Intl. (SimpLex) (Build 20230914) ]
User avatar
leandro
 
Posts: 1481
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia

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

Postby cnavarro » Thu Mar 30, 2023 7:14 pm

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 view

   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 view

   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
cnavarro
 
Posts: 6500
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

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

Postby leandro » Thu Mar 30, 2023 9:56 pm

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

[ Embarcadero C++ 7.60 for Win32 ] [ FiveWin 23.07 ] [ xHarbour 1.3.0 Intl. (SimpLex) (Build 20230914) ]
User avatar
leandro
 
Posts: 1481
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia

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

Postby cnavarro » Thu Mar 30, 2023 10:58 pm

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
User avatar
cnavarro
 
Posts: 6500
Joined: Wed Feb 15, 2012 8:25 pm
Location: España


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 84 guests