FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Maximizar Ventana
Posts: 147
Joined: Tue Oct 11, 2005 08:22 PM
Maximizar Ventana
Posted: 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

Posts: 1344
Joined: Wed Nov 16, 2005 09:14 PM
Re: Maximizar Ventana
Posted: Sat Nov 18, 2017 02: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 (fw): Select all Collapse
// 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 (fw): Select all Collapse
ABMS DIALOG DISCARDABLE 15, 19, 551, 309
STYLE WS_CHILD
FONT 8, "MS Sans Serif"
{
  ....
}

Espero que te sea de utilidad
Posts: 147
Joined: Tue Oct 11, 2005 08:22 PM
Re: Maximizar Ventana
Posted: Thu Nov 23, 2017 07: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

Posts: 147
Joined: Tue Oct 11, 2005 08:22 PM
Re: Maximizar Ventana
Posted: Mon Nov 27, 2017 05: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

Continue the discussion