Maximizar Ventana

Maximizar Ventana

Postby EBM » Fri Nov 17, 2017 11:03 pm

Hola compañeros,

Tengo un detallito que no he podido encontrar una solución, a ver si alguno de ustedes me dá alguna idea:

Tengo una aplicación donde creo una ventana principal y en donde tengo un pequeño chat con los usuarios de las distintas sucursales conectados.

Se crea un dialogo no modal para cada chat que tiene el usuario con las sucursales, hasta ahí todo funciona perfecto, el problema viene cuando el usuario tiene minimizados los diálogos con los diferentes chats y minimiza la ventana principal, cuando vuelve a maximizar la ventana principal, en automatico se maximizan todos los diálogos que tiene con los chats y debe minimizarlos uno a uno nuevamente, mi pregunta es:

Hay alguna forma de evitar que al maximizar la ventana principal, se maximicen todos los diálogos?? no se puede hacer que se queden exactamente como estaban al momento que se minimizó la ventana principal??

Cualquier idea es bienvenida

Saludos !!

Eduardo Borondón Muñiz
EBM
 
Posts: 147
Joined: Tue Oct 11, 2005 8:22 pm
Location: Guadalajara, Jal Mexico

Re: Maximizar Ventana

Postby cmsoft » Sat Nov 18, 2017 2:42 am

Los dialogos no modales estan contenidos en una ventana mdichild?
Sino esa puede ser una solucion, contenerlos en una ventana hija.
Yo probe con ventanas hijas minimizadas y al minimizar y volver a maximizar la ventana principal no me maximiza las ventanas hijas.

Code: Select all  Expand view

// oApp:oWnd es la ventana principal
DEFINE WINDOW oWnd1 MDICHILD TITLE "A/B/M de Articulos"  OF oApp:oWnd NOZOOM ICON oApp:oIco FROM 05,05 TO 50,50
 DEFINE DIALOG oDlg RESOURCE "ABMS" OF oWnd1
 oWnd1:bGotFocus := { || oDlg:SetFocus}
 oWnd1:bResized := { || Incrusta( oWnd1, oDlg, .t.) }
 ACTIVATE DIALOG oDlg CENTER NOWAIT ON INIT oDlg:Move(0,0) VALID(oWnd1:End())
ACTIVATE WINDOW oWnd1 ON INIT Incrusta( oWnd1, oDlg, .T.)

// Esta es la funcion que incrusta el dialogo no modal en la ventana MDI
FUNCTION Incrusta( oWnd, oDlg, lCentra)
  STATIC lActivo := .F.
  LOCAL  aRect, nPosY, nPosX, nPosXX, oIco
  IF IsIconic(oWnd:hWnd)
     RETURN .T.
  ENDIF
  IF !(lActivo)
     lActivo = .T.
     // Muevo dialogo a 0,0 para que quede bien incrustado...
     oDlg:Move(0,0)
     // Primero Seteo Como si Windows Fuera Estandar...
     oWnd:SetSize(oDlg:nWidth+8, oDlg:nHeight+27)
     // Calculo diferencia !
     aRect  := GetClientRect(oWnd:hWnd)
     nPosY := ABS(ABS(aRect[3]-aRect[1])-ABS(oWnd:nTop-oWnd:nBottom))
     nPosX := ABS(ABS(aRect[4]-aRect[2])-ABS(oWnd:nRight-oWnd:nLeft))
     nPosXX := INT(ABS(ABS(oWnd:nRight-oWnd:nLeft) - ;
               ABS(oApp:oWnd:nRight-oApp:oWnd:nLeft)) / 2)
     // Ahora la pongo JUSTA, JUSTA...
     oWnd:SetSize(oDlg:nWidth+nPosX,oDlg:nHeight+nPosY)          
     IF lCentra
        oWnd:Move(oApp:oWnd:nTop+5,nPosXX)
     ENDIF
     lActivo := .F.
     oWnd:Refresh()
     oApp:oWnd:oWndClient:Refresh()
  ENDIF
RETURN .T.
 

El .RC del dialogo NO MODAL es
Code: Select all  Expand view

ABMS DIALOG DISCARDABLE 15, 19, 551, 309
STYLE WS_CHILD
FONT 8, "MS Sans Serif"
{
  ....
}
 

Espero que te sea de utilidad
User avatar
cmsoft
 
Posts: 1188
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

Re: Maximizar Ventana

Postby EBM » Thu Nov 23, 2017 7:23 pm

Mil gracias, voy a probar lo que me comentas para ver como me funciona la aplicación.

Saludos !!

Eduardo Borondón Muñiz
EBM
 
Posts: 147
Joined: Tue Oct 11, 2005 8:22 pm
Location: Guadalajara, Jal Mexico

Re: Maximizar Ventana

Postby EBM » Mon Nov 27, 2017 5:19 pm

Hola de nuevo,

He solucionado el detallito poniendo en el bPainted de la ventana principal un llamado a un método que "restaura a su estado que tenían los diálogos" al momento en que se minimiza la pantalla principal:

oPublic:oVentPrin:bResized := { || Iif( !oPublic:oVentPrin:IsIconic(), oPublic:oDoIt:oChat:RestauraDlg(), NIL ) }

y el método quedó asi:

/////////////////////////////////////////////////////////////////////////////////////////////////////////////
METHOD RestauraDlg() CLASS Chat
LOCAL c

SysRefresh()

For c := 1 TO Len( ::aChatDlg )
If ValType( ::aChatDlg[ c ] ) == "O"
If ::aChatDlg[ c ]:lMinimize
::aChatDlg[ c ]:Minimize()
::aChatDlg[ c ]:lMinimize := .T.
else
::aChatDlg[ c ]:Normal()
::aChatDlg[ c ]:lMinimize := .F.
EndIf
EndIf
Next

SysRefresh()

Return NIL

Espero que a alguien le pueda servir

Saludos y gracias

Eduardo Borondón Muñiz
EBM
 
Posts: 147
Joined: Tue Oct 11, 2005 8:22 pm
Location: Guadalajara, Jal Mexico


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Willi Quintana and 12 guests