Page 1 of 1

Mover un Dialogo sin Caption

Posted: Fri Oct 30, 2015 8:39 pm
by Marcelo Via Giglio
Holas,

hay alguna manera de mover un dialogo con el mouse sin que tenga título, pinchando en cualquier lugar y moviendolo

saludos

Marcelo

Re: Mover un Dialogo sin Caption

Posted: Sat Oct 31, 2015 11:11 am
by Antonio Linares
Marcelo,

Revisa FWH\samples\testmmov.prg

Re: Mover un Dialogo sin Caption

Posted: Sat Oct 31, 2015 9:45 pm
by Marcelo Via Giglio
Antonio,

muchas gracias, lo estoy probando con diálogos definidos en recursos, y el funcionamiento es errático, es necesario jugar un poco m'as, pero es buen inicio, gracias

saludos

Marcelo

Re: Mover un Dialogo sin Caption

Posted: Mon Nov 23, 2015 4:06 pm
by antolin
Marcelo, yo lo hago así:

Code: Select all

DEFINE DIALOG oDLg ....
   DEFINE CURSOR oCur ...
   ...
   ...
   oDlD:bLClicked := { || MovWin(oDlGD,aCoors,oCur) }
   ...
ACTIVATE DIALOG oDlg...

FUNCTION MovWin(oDW,aCoor,oCur)
   LOCAL aXY   := GetCursorPos()
   LOCAL aPun  := GetWndRect(oDW:hWnd)

   aXY[1] -= aPun[1]
   aXY[2] -= aPun[2]
   IF aXY[1] > aCoor[nTop] .AND. aXY[1] < aCoors[nBottom] .AND. aXY[2] > aCoors[nLeft] .AND. aXY[2] < aCoors[nRight]
      DO WHILE GetKeyState( VK_LBUTTON )
         SetCursor( oCur:hCursor )
         aPun := GetCursorPos()
         MoveWindow( oDW:hWnd, aPun[1]-aXY[1], aPun[2]-aXY[2],,, .T. )
         SysRefresh()
      ENDDO
      CursorArrow()
   ENDIF
RETURN .T.
 
OcUR es por si quiero utilizar un cursor diferente cuando se mueve el dialogo. No es necesario ponerlo
aCoors es el área en la que quiero que el ratón mueva el dialogo. Si quiero que mover el dialogo desde cualquier parte, no la pongo, y sería:

Code: Select all

DEFINE DIALOG oDLg ....
   DEFINE CURSOR oCur ...
   ...
   ...
   oDlD:bLClicked := { || MovWin(oDlGD,oCur) }
   ...
ACTIVATE DIALOG oDlg...

FUNCTION MovWin(oDW,oCur)
   LOCAL aXY   := GetCursorPos()
   LOCAL aPun  := GetWndRect(oDW:hWnd)

   aXY[1] -= aPun[1]
   aXY[2] -= aPun[2]

   DO WHILE GetKeyState( VK_LBUTTON )
      SetCursor( oCur:hCursor )
      aPun := GetCursorPos()
      MoveWindow( oDW:hWnd, aPun[1]-aXY[1], aPun[2]-aXY[2],,, .T. )
      SysRefresh()
   ENDDO
   CursorArrow()
RETURN .T.
 
A mi me funciona bien

Espero te sea de utilidad.

Un saludo.

Re: Mover un Dialogo sin Caption

Posted: Mon Nov 23, 2015 4:20 pm
by Marcelo Via Giglio
Antolin,

muchas gracias por compartir tu solución

saludos

Marcelo Vía

Re: Mover un Dialogo sin Caption

Posted: Mon Nov 23, 2015 5:45 pm
by acuellar
Muchas Gracias Antolin

A mi también me sirvió.

Saludos,


Adhemar

Re: Mover un Dialogo sin Caption

Posted: Mon Nov 23, 2015 7:44 pm
by FranciscoA
acuellar wrote:Muchas Gracias Antolin

A mi también me sirvió.

Saludos,


Adhemar
+1
Saludos.

Re: Mover un Dialogo sin Caption

Posted: Mon Nov 23, 2015 9:51 pm
by horacio
Funciona perfectamente, muchísimas gracias ...

Saludos

Re: Mover un Dialogo sin Caption

Posted: Tue Nov 24, 2015 11:10 am
by hmpaquito
Muchas gracias.

Me ha venido muy bien.

Re: Mover un Dialogo sin Caption

Posted: Tue Nov 24, 2015 11:59 am
by Willi Quintana
Hola Amigos,
Cuando muevo un dialogo incrustado en una windows (MDI) solo se mueve el dialogo mas no la window, y al cambiar oDlg por oWndK se mueve todo pero la window salta hacia abajo....

Code: Select all

DEFINE WINDOW oWndK MDICHILD FROM 0,0 to 2,2 OF oWnd BORDER NONE NOSYSMENU NOCAPTION TITLE cTitle ICON "SVITE"
DEFINE DIALOG oDlg RESOURCE "KARDEX" OF oWndK  
       oDlg:bLClicked := { || MovWin(oDlg, oCursor) } // para mover el objeto


aEval(oDlg:aControls,{|oC|iif(oC:ClassName()="TBTNBMP",oC:oCursor:=oCursor,)})
ACTIVATE DIALOG oDlg CENTER NOWAIT ;  
                ON INIT (oDlg:Move( 0, 0 ), ;
                VALID  (oWndK:End() , lSalir )
                oWndK:bGotFocus  = { || oDlg:SetFocus() }
ACTIVATE WINDOW oWndK ;                                                      
         ON INIT (oWndK:Move(0,0), oWndK:SetSize( oDlg:nWidth, oDlg:nHeight ) ) ;   
         ON RESIZE (oWndK:SetSize( oDlg:nWidth, oDlg:nHeight ) ) ;
         VALID (lSalir)

 

Re: Mover un Dialogo sin Caption

Posted: Wed Nov 25, 2015 3:25 am
by FranciscoA
Hola Willi.
Modificando la function de Antolin, de la siguiente manera, me funciona bien en Windows 7. En este momento no tengo a la mano otras versiones de Windows.
Pruebalo y nos dices.

Code: Select all

oDlg:bLClicked := { || MovWin(oChild, oCursor) }    //enviandole ventana hija MDI

   #define SM_CYCAPTION  4 
   #define SM_CYFRAME   33 
   #define SM_CXPADDEDBORDER  92 

//--------------------------//
FUNCTION MovWin(oDW,oCur)
   LOCAL aXY   := GetCursorPos()
   LOCAL aPun  := GetWndRect(oDW:hWnd)

   local nHeight

IF oDW:CLASSNAME() == "TMDICHILD"

   nHeight := ( GetSysMetrics(SM_CYFRAME) + ;
                GetSysMetrics(SM_CYCAPTION) + ;
                GetSysMetrics(SM_CXPADDEDBORDER) ) * 2.3666

   aXY[1] -= (aPun[1]-nHeight)  
   aXY[2] -= aPun[2]+1

ELSE
   aXY[1] -= aPun[1]
   aXY[2] -= aPun[2]
ENDIF

   DO WHILE GetKeyState( VK_LBUTTON )
      SetCursor( oCur:hCursor )
      aPun := GetCursorPos()
      MoveWindow( oDW:hWnd, aPun[1]-aXY[1], aPun[2]-aXY[2],,, .T. )
      SysRefresh()
   ENDDO
   CursorArrow()
RETURN .T.
 
Saludos.

Re: Mover un Dialogo sin Caption

Posted: Thu Nov 26, 2015 3:51 pm
by Willi Quintana
Funcionando en Windows 10
Salu2
Willi