Page 1 of 1

Acerca MDI

PostPosted: Wed May 02, 2007 9:23 pm
by Raymundo Islas M.
Hola a todos

Necesito hacer algunas cosillas en MDI, alguno de uds tendra algo de informacion, manuales, ejemplos que quieran compartir ?

He checado los archivos en SAMPLES y uno que otro archivo que he encontrado, pero me gustaria tener un poquitin mas. :wink:

Gracias anticipadas


Saludos

PostPosted: Thu May 03, 2007 9:54 am
by Antonio Linares
Raymundo,

Explícanos un poco lo que quieres hacer y asi podremos orientarte de como implementarlo, gracias

PostPosted: Thu May 03, 2007 12:28 pm
by JoseLuis
Raymundo
A mi me va bien así:
1º Declaro como locales:
Code: Select all  Expand view
  local hdc :=CreateDc("DISPLAY","","")
  local nHor:=GetDeviceCaps(hdc,8)
  local nVer:=GetDeviceCaps(hdc,10)

2º Declaro la Ventana MDICHILD así:
Code: Select all  Expand view
  DEFINE WINDOW oDlg MDICHILD ;
   OF Publicas:oWPpal;
   FROM 30+(len(Publicas:oWPpal:oWndclient:aWnd)*15),30+(len(Publicas:oWPpal:oWndclient:aWnd)*15);
   TO nver-160+(len(Publicas:oWPpal:oWndclient:aWnd)*15),nHor-30+(len(Publicas:oWPpal:oWndclient:aWnd)*15);
   COLOR CLR_BLACK,CLR_WHITE;
        PIXEL

3º Para activarla lo hago así, teniendo en cuenta cerrar los alias mediante el Valid(), y si hemos utilizado un listbox, ése area lo cierro con él:
Code: Select all  Expand view
            ACTIVATE WINDOW oDlg        ;
                 ON INIT  oLbx:SetFocus();
                 ON PAINT ( oLbx:Refresh(),;
                            oLbx:nWidth:=oDlg:nWidth-10   ,;
                            oLbx:nHeight:=oDlg:nHeight-82 ,;
                            oTab:nWidth:=oDlg:nWidth-10   ,;
                            oTab:nTop:=oDlg:nHeight-52 )  ;
       MAXIMIZED;
                 VALID ((aAlias[21])->  ( dbClosearea() ),(aAlias[26])->( dbClosearea() ),;
              (aAlias[23])->( dbCloseArea() ),(aAlias[29])-> ( dbCloseArea() ),;
         (aAlias[2])-> ( dbCloseArea() ),oLbx:lCloseArea(),.t. )

Luego ya en la operativa para comprobar si una ventana está abierta hago:
Code: Select all  Expand view
   if AbiertaVentana( cTitulo )
   return NIL
   endif

y la funcion es:
Code: Select all  Expand view
FUNCTION AbiertaVentana ( cTitulo )
***********************************
local lAbierta:=.f.
local i

  if len( Publicas:oWPpal:OwndClient:aWnd ) <> 0
    for i = 1 to len( Publicas:oWPpal:oWndClient:aWnd )
      if Publicas:oWPpal:OwndClient:aWnd[i]:ctitle = cTitulo
        Publicas:oWPpal:OwndClient:aWnd[i]:normal()
        lAbierta:=.t.
      endif
    next
  endif

return lAbierta

Y tienes que tener en cuenta que si abres varias ventanas las bases de datos tienen que tener un alias distinto cada vez que abras una nueva.
Yo lo hago así:
Code: Select all  Expand view
Function CargaAlias
*******************

return { ;
         cGetNewAlias( "ARTICULO" ),;   // 1
         cGetNewAlias( "MUNICI" )  ,;   // 2
         cGetNewAlias( "PROVIN" )  ,;   // 3
         cGetNewAlias( "PROPIE" )  ,;   // 4
    cGetNewAlias( "SEAT1"  )  ,;   // 5
         cGetNewAlias( "RAPPEL" )  ,;   // 6
         cGetNewAlias( "EQUIPO" )  ,;   // 7
         cGetNewAlias( "REFEREN" ) ,;   // 8
    cGetNewAlias( "MATERIAL" ),;   // 9
         cGetNewAlias( "VEHICULO" ),;   // 10
    cGetNewAlias( "TIPOS" )   ,;   // 11
    cGetNewAlias( "CANON" )   ,;   // 12
    cGetNewAlias( "TEXTOS" )  ,;   // 13
    cGetNewAlias( "IMAGEN" )  ,;   // 14
               ,;   // 15
               ,;   // 16
               ,;   // 17
    cGetNewAlias( "PARTE" )   ,;   // 18
    cGetNewAlias( "FIESTAS" ) ,;   // 19
    cGetNewAlias( "VACAS" )   ,;   // 20
    cGetNewAlias( "PROVE" )   ,;   // 21
    cGetNewAlias( "FACTURA" ) ,;   // 22
    cGetNewAlias( "ALMACEN" ) ,;   // 23
    cGetNewAlias( "ALBARAN" ) ,;   // 24
    cGetNewAlias( "EXTRAS" )  ,;   // 25
    cGetNewAlias( "CONDUC" )  ,;   // 26
    cGetNewAlias( "GASTOS" )  ,;   // 27
    cGetNewAlias( "REEMBOL" ) ,;   // 28
         cGetNewAlias( "RUTA" )    ,;   // 29
         cGetNewAlias( "AVISOS" )  ,;   // 30
         cGetNewAlias( "NALBARAN" ) ;   // 31
   }

Code: Select all  Expand view
function cGetNewAlias( cAlias )
*******************************
local cNewAlias, nArea := 1

      if Select( cAlias ) != 0
        while Select( cNewAlias := ( cAlias + ;
              StrZero( nArea++, 2 ) ) ) != 0
        end
      else
        cNewAlias = cAlias
      endif

A mi me va bien de momento así
No se si ésto es lo que pedías, y perdona que la indentación sea un churro, pero en mi procesador de textos me sale bien.

Saludos

Jose Luis

PostPosted: Thu May 03, 2007 1:57 pm
by Raymundo Islas M.
Hola Jose Luis :
Muchas gracias por compartir tu metodo MDI, empezare a hacer pruebas sobre el.

Hola Antonio :
Pasa lo siguiente, tengo una aplicacion practicamente terminada y debido a algunas sugerencias tanto de los clientes como propias, he determinado que tengo que convertirla a MDI.

Asi que, esa es la situacion tengo que ver antes de meterle mano a las modificaciones, todo lo que tengo que considerar que y que no debo cambiar, etc.


Saludos

PostPosted: Thu May 03, 2007 5:09 pm
by jcaro
Hola Raymundo:

Adjunto te dejo unos manuales de MDI al 100% que nos pasaron en un
curso de Argentina, del grupo puertosur.

Lo hicieron Eduardo Rizzolo y Victor Tomas.

Espero que te sirvan son muy buenos.

Pueden bajarlos de aqui.

http://rapidshare.com/files/29290837/Md ... _.rar.html

Saludos,

PostPosted: Thu May 03, 2007 6:44 pm
by Raymundo Islas M.
Muchas gracias Juan

Les estare dando su buena checada !!



Saludos

PostPosted: Thu May 03, 2007 11:58 pm
by FiveWiDi
JoseLuis wrote:3º Para activarla lo hago así, teniendo en cuenta cerrar los alias mediante el Valid(), y si hemos utilizado un listbox, ése area lo cierro con él:
Code: Select all  Expand view
            ACTIVATE WINDOW oDlg        ;
                 ON INIT  oLbx:SetFocus();
                 ON PAINT ( oLbx:Refresh(),;
                            oLbx:nWidth:=oDlg:nWidth-10   ,;
                            oLbx:nHeight:=oDlg:nHeight-82 ,;
                            oTab:nWidth:=oDlg:nWidth-10   ,;
                            oTab:nTop:=oDlg:nHeight-52 )  ;
       MAXIMIZED;
                 VALID ((aAlias[21])->  ( dbClosearea() ),(aAlias[26])->( dbClosearea() ),;
              (aAlias[23])->( dbCloseArea() ),(aAlias[29])-> ( dbCloseArea() ),;
         (aAlias[2])-> ( dbCloseArea() ),oLbx:lCloseArea(),.t. )



Además de tener en cuenta de que si en una ventana MDI cargas todos los campos de un registro, alteras alguno y grabas TODO el registro, si esta misma DBF (aún distinta area de trabajo y alias) se está utilizando en otra MDI y haces lo mismo con otro de sus campos, se te va a armar un pollo de coj&%$·es. (ejemplo->campo numerador de facturas y campo numerador de movimientos)
Justo ahora acabo de encontrar un fallo así en una aplicación a medio terminar; llevo casi dos días con él y son las 2 de la mañana, pero aun así estoy contento y me gusta MDI. El usuario una vez acostumbrado lo agradece.

El método que te propone José Luís es muy parecido al que yo uso y va de perlas.

Saludos
Carlos G.

PostPosted: Fri May 04, 2007 7:26 am
by joseluisysturiz
Ando tambien en algo de MDI, sera que me pudieras enviar esa guia JCARO a mi privado, trate de descargarlo pero me fue imposible... muy agradecido... joseluisysturiz@yahoo.com Saludos

Re: Acerca MDI

PostPosted: Sat Dec 08, 2012 2:57 am
by interwin
Buenas noches

¿Alguien que tenga los manuales MDI me los podria mandar a mi correo por favor?.

interwin_ags@hotmail.com

De antemano muchas gracias.

Re: Acerca MDI

PostPosted: Sat Dec 08, 2012 3:39 am
by FranciscoA
Buenas noches amigos.
Yo también solicito muy amablemente esos manuales, si alguno de ustedes lo tiene. En estos días he quedado atorado con esto de MDI, específicamente con los Dialogs NoWait.

Mi Email: falegria230349@yahoo.es
Saludos.

Re: Acerca MDI

PostPosted: Mon Dec 17, 2012 2:04 pm
by FranciscoA
Hola interwin, te he enviado TODO lo que encontré en internet sobre MDI en fivewin. Todos los escritos dicen muy poco al respecto. No encontré ningún ejemplo contundente. De todos modos, espero te sirvan.

Por otro lado, creo que deberías identificarte en poco mejor, para poder llamarte por tu nombre propio.

Saludos.