FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Mover un Dialogo sin Caption
Posts: 1088
Joined: Fri Oct 07, 2005 03:33 PM
Mover un Dialogo sin Caption
Posted: Fri Oct 30, 2015 08:39 PM

Holas,

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

saludos

Marcelo

Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Mover un Dialogo sin Caption
Posted: Sat Oct 31, 2015 11:11 AM

Marcelo,

Revisa FWH\samples\testmmov.prg

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 1088
Joined: Fri Oct 07, 2005 03:33 PM
Re: Mover un Dialogo sin Caption
Posted: Sat Oct 31, 2015 09:45 PM

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

Posts: 498
Joined: Thu May 10, 2007 08:30 PM
Re: Mover un Dialogo sin Caption
Posted: Mon Nov 23, 2015 04:06 PM
Marcelo, yo lo hago así:

Code (fw): Select all Collapse
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 (fw): Select all Collapse
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.
Peaaaaaso de foro...

FWH 2007 - xHarbour - BCC55
Posts: 1088
Joined: Fri Oct 07, 2005 03:33 PM
Re: Mover un Dialogo sin Caption
Posted: Mon Nov 23, 2015 04:20 PM

Antolin,

muchas gracias por compartir tu solución

saludos

Marcelo Vía

Posts: 1710
Joined: Tue Oct 28, 2008 06:26 PM
Re: Mover un Dialogo sin Caption
Posted: Mon Nov 23, 2015 05:45 PM

Muchas Gracias Antolin

A mi también me sirvió.

Saludos,

Adhemar

Saludos,



Adhemar C.
Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: Mover un Dialogo sin Caption
Posted: Mon Nov 23, 2015 07:44 PM
acuellar wrote:Muchas Gracias Antolin

A mi también me sirvió.

Saludos,


Adhemar


+1
Saludos.
Francisco J. Alegría P.

Chinandega, Nicaragua.



Fwxh-MySql-TMySql
Posts: 1364
Joined: Wed Jun 21, 2006 12:39 AM
Re: Mover un Dialogo sin Caption
Posted: Mon Nov 23, 2015 09:51 PM

Funciona perfectamente, muchísimas gracias ...

Saludos

Posts: 1515
Joined: Thu Oct 30, 2008 02:37 PM
Re: Mover un Dialogo sin Caption
Posted: Tue Nov 24, 2015 11:10 AM

Muchas gracias.

Me ha venido muy bien.

Posts: 1054
Joined: Sun Oct 09, 2005 10:41 PM
Re: Mover un Dialogo sin Caption
Posted: Tue Nov 24, 2015 11:59 AM
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 (fw): Select all Collapse
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)
Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: Mover un Dialogo sin Caption
Posted: Wed Nov 25, 2015 03:25 AM
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 (fw): Select all Collapse
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.
Francisco J. Alegría P.

Chinandega, Nicaragua.



Fwxh-MySql-TMySql
Posts: 1054
Joined: Sun Oct 09, 2005 10:41 PM
Re: Mover un Dialogo sin Caption
Posted: Thu Nov 26, 2015 03:51 PM

Funcionando en Windows 10
Salu2
Willi

Continue the discussion