Code: Select all
#include "FiveWin.ch"
FUNCTION PRUEBA_DIALOGO()
LOCAL oWnd
LOCAL oMenu
LOCAL N:=1
MENU oMenu
MENUITEM "&Sistema"
MENU
MENUITEM "&Especificar impresora" ACTION PrinterSetup()
SEPARATOR
MENUITEM "&Salir" ACTION oWnd:End()
ENDMENU
ENDMENU
DEFINE WINDOW oWnd MDI FROM 100,100 TO 600,1200 PIXEL TITLE "TEST POSICION DIALOGO" COLOR CLR_BLACK, CLR_GRAY MENU oMenu
ACTIVATE WINDOW oWnd MAXIMIZED ON INIT CreaChild(oWnd)
RETURN(NIL)
function CreaChild(oWnd)
local oWndChild
local oDlg
local oGroup
LOCAL oBtn
DEFINE DIALOG oDlg SIZE 580,220 PIXEL TRUEPIXEL TITLE "Contenedor" OF oWnd
@ 20,20 BUTTONBMP oBtn of oDlg PIXEL size 95, 24 PROMPT "Muestrame" ACTION Prueba2(oBtn,oDlg)
ACTIVATE DIALOG oDlg CENTERED
RETURN(NIL)
///////////////////////////////////////////////////////////////////////////////
function prueba2(oBtn,oDlg)
Local oDlg1
nTopR := oBtn:nTop
nLeftR := oBtn:nLeft
nAltura := oBtn:nHeight
aPoint := { nTopR+nAltura, nLeftR }
aPoint = ClientToScreen( oDlg:hWnd, aPoint )
DEFINE DIALOG oDlg1 FROM 100,100 TO 400,400 TITLE "POSICIONADO" PIXEL OF oDlg
ACTIVATE DIALOG oDlg1 ON INIT (msginfo(GetRight(oDlg1)),oDlg1:SetPos( aPoint[ 1 ], aPoint[ 2 ] ) )
return(nil)
////////////////////////////////////////////////////////////////////////////
FUNCTION GetRight(objeto) // Devuelve el punto derecha absoluto del objeto pasado, en este caso un boton, prueba con un get
LOCAL oWnd:=objeto:oWnd
LOCAL nRight:=0
LOCAL aRect
DO WHILE .T.
IF oWnd:ClassName()="NIL"
EXIT
ENDIF
// aqui tienes que desarrollar mas posibles casos TDIALOG, ETC...
// Yo he hecho el TGROUP, TMDICHILD Y TMDIFRAME
IF oWnd:ClassName()="TGROUP"
nRight:=nRight+oWnd:nLeft
ENDIF
IF oWnd:ClassName()="TMDICHILD" .or. oWnd:ClassName()="TMDIFRAME"
aRect := GetCoors( oWnd:hWnd )
nRight:=nRight+aRect[2]
ENDIF
oWnd:=oWnd:oWnd
ENDDO
nRight:=nRight+objeto:nLeft+objeto:nWidth+13
return(nRight)