FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Posicionar dialogo en el punto 0,0 dentro de window
Posts: 1818
Joined: Wed Oct 26, 2005 02:49 PM

Posicionar dialogo en el punto 0,0 dentro de window

Posted: Sun Jul 11, 2021 07:26 PM
Buenas tardes para todos en este momento requiero poder mostrar un dialogo en la posici贸n "0,0" de la ventana principal, que siempre inicie en ese punto, no importando la posici贸n que tenga en ese momento la ventana principal.

Lo que requiero hacer voy a lo intento explicar en la siguiente imagen:



Code (fw): Select all Collapse
#include "FiveWin.ch"

static oWnd

//----------------------------------------------------------------------------//

function Main()

聽 聽DEFINE WINDOW oWnd TITLE "Probando Iniciar Dialogo En Posicion 0,0" ;
聽 聽 聽 MDI ;
聽 聽 聽 MENU BuildMenu()

聽 聽SET MESSAGE OF oWnd TO "Main Window"

聽 聽ACTIVATE WINDOW oWnd VALID MsgYesNo( "Want to End ?" )

return nil

//----------------------------------------------------------------------------//

function BuildMenu()

聽 聽local oMenu

聽 聽MENU oMenu
聽 聽 聽 MENUITEM "&Information"
聽 聽 聽 MENU
聽 聽 聽 聽 聽MENUITEM "&UBICAR" ACTION Dlg( oMenu )
聽 聽 聽 聽 聽SEPARATOR
聽 聽 聽 聽 聽MENUITEM "&End..." ACTION oWnd:End()
聽 聽 聽 ENDMENU

聽 聽ENDMENU

return oMenu

STATIC FUNCTION Dlg()

聽 聽 Local aPoint
聽 聽 Local nTopR
聽 聽 Local nLeftR
聽 聽 Local oDlg

聽 聽 nTopR 聽 聽 := oWnd:nTop 聽 聽 聽 
聽 聽 nLeftR 聽 聽:= oWnd:nLeft

聽 聽 aPoint := { nTopR, nLeftR }
聽 聽 aPoint = ClientToScreen( oWND:hWnd, aPoint )

聽 聽DEFINE DIALOG oDlg PIXEL TRUEPIXEL STYLE (DS_MODALFRAME|WS_POPUP|WS_BORDER) SIZE 54,70 OF oWND

聽 聽 聽 聽 oDlg:bStart := { || SetCapture( oDlg:hWnd ),;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 oDlg:SetPos( aPoint[ 1 ], aPoint[ 2 ] ) }
聽 聽 
聽 聽ACTIVATE DIALOG oDlg 

return .t.


De antemano gracias
Saludos
LEANDRO AREVALO
Bogot谩 (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Turbo Incremental Link64 6.98 Embarcadero 7.70 ] [ FiveWin 25.01 ] [ xHarbour 64 bits) ]
Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM

Re: Posicionar dialogo en el punto 0,0 dentro de window

Posted: Sun Jul 11, 2021 08:31 PM
Leandro, prueba esto, aunque lo suyo ser铆a simplemente pintar en el area cliente de la ventana
Code (fw): Select all Collapse
#include "FiveWin.ch"

static oWnd

//----------------------------------------------------------------------------//

function Main()

   DEFINE WINDOW oWnd TITLE "Probando Iniciar Dialogo En Posicion 0,0" ;
      MDI ;
      MENU BuildMenu()

   SET MESSAGE OF oWnd TO "Main Window"

   ACTIVATE WINDOW oWnd VALID MsgYesNo( "Want to End ?" )

return nil

//----------------------------------------------------------------------------//

function BuildMenu()

   local oMenu

   MENU oMenu
      MENUITEM "&Information"
      MENU
         MENUITEM "&UBICAR" ACTION Dlg( oMenu )
         SEPARATOR
         MENUITEM "&End..." ACTION oWnd:End()
      ENDMENU

   ENDMENU

return oMenu

STATIC FUNCTION Dlg( oMenu )

    Local aPoint
    Local nTopR
    Local nLeftR
    Local oDlg
    //XBrowse( GetClientRect( oWnd:hWnd ) )

    // <!-- m --><a class="postlink" href="https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getsystemmetrics">https://docs.microsoft.com/en-us/window ... temmetrics</a><!-- m -->
    //nTopR     := oWnd:nTop + if( Valtype( oMenu ) = "O", oMenu:nMnuHeight, 0 ) + GetSysMetrics( 4 ) + GetSysMetrics( 33 )
    // o asi tambien
    //                           Menu                  Caption             Border Y
    nTopR     := oWnd:nTop + GetSysMetrics( 15 ) + GetSysMetrics( 4 ) + GetSysMetrics( 33 )
    nLeftR    := oWnd:nLeft + GetSysMetrics( 32 )  // Border X


   DEFINE DIALOG oDlg FROM nTopR, nLeftR TO nTopR + 54, nLeftR + 70 PIXEL TRUEPIXEL STYLE nOr(DS_MODALFRAME,WS_POPUP,WS_BORDER) OF oWND

   ACTIVATE DIALOG oDlg NOWAIT   //quitar para dialog modal

return .t.
Cristobal Navarro

Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noci贸n del tiempo

El secreto de la felicidad no est谩 en hacer lo que te gusta, sino en que te guste lo que haces
Posts: 1818
Joined: Wed Oct 26, 2005 02:49 PM

Re: Posicionar dialogo en el punto 0,0 dentro de window

Posted: Sun Jul 11, 2021 09:18 PM
Amigo como vas?

Gracias por responder....

Lo prob茅 y el problema es que funciona solo si la ventana principal esta maximizada o si esta en su posici贸n inicial, pero si cambio la ventana principal de tama帽o y/o de posici贸n, ya no funciona.

En la posici贸n inicial


Ventana Maximizada


En otra posici贸n
Saludos
LEANDRO AREVALO
Bogot谩 (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Turbo Incremental Link64 6.98 Embarcadero 7.70 ] [ FiveWin 25.01 ] [ xHarbour 64 bits) ]
Posts: 1818
Joined: Wed Oct 26, 2005 02:49 PM

Re: Posicionar dialogo en el punto 0,0 dentro de window

Posted: Sun Jul 11, 2021 09:48 PM
Amigo lo solucione de esta manera:

Code (fw): Select all Collapse
#include "FiveWin.ch"

static oWnd

//----------------------------------------------------------------------------//

function Main()

   DEFINE WINDOW oWnd TITLE "Probando Iniciar Dialogo En Posicion 0,0" ;
      MDI ;
      MENU BuildMenu()

   SET MESSAGE OF oWnd TO "Main Window"

   ACTIVATE WINDOW oWnd VALID MsgYesNo( "Want to End ?" )

return nil

//----------------------------------------------------------------------------//

function BuildMenu()

   local oMenu

   MENU oMenu
      MENUITEM "&Information"
      MENU
         MENUITEM "&UBICAR" ACTION Dlg( oMenu )
         SEPARATOR
         MENUITEM "&End..." ACTION oWnd:End()
      ENDMENU

   ENDMENU

return oMenu

STATIC FUNCTION Dlg( oMenu )
    Local nTopR := 0
    Local nLeftR := 0
    Local oDlg
    Local aCoor
    aCoor := ClientToScreen( oWnd:hWnd, { nTopR, nLeftR } )

    DEFINE DIALOG oDlg FROM nTopR, nLeftR TO nTopR + 54, nLeftR + 70 PIXEL TRUEPIXEL STYLE nOr(DS_MODALFRAME,WS_POPUP,WS_BORDER) OF oWND

        oDlg:bStart = <||  
                oDlg:setpos(aCoor[1],aCoor[2])  
            >
        
    ACTIVATE DIALOG oDlg NOWAIT   //quitar para dialog modal

return .t.
Saludos
LEANDRO AREVALO
Bogot谩 (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Turbo Incremental Link64 6.98 Embarcadero 7.70 ] [ FiveWin 25.01 ] [ xHarbour 64 bits) ]
Posts: 1818
Joined: Wed Oct 26, 2005 02:49 PM

Re: Posicionar dialogo en el punto 0,0 dentro de window

Posted: Mon Jul 12, 2021 12:36 AM
Gracias Cristobal por responder

Este era el efecto que quer铆a lograr



Code (fw): Select all Collapse
#include "FiveWin.ch"

static oWnd
static oDlg
static aCoor
static oWndChild, oBrw
static cAlias

//----------------------------------------------------------------------------//

function Main()
聽 聽 Local oBar

聽 聽DEFINE WINDOW oWnd TITLE "Probando Iniciar Dialogo En Posicion 0,0" ;
聽 聽 MDI ;
聽 聽 MENU BuildMenu()

聽 聽 SET MESSAGE OF oWnd TO "Main Window" 2015

聽 聽 oWnd:bInit = { || CustomerBrowse(),progreso(oWnd,.F.) }

聽 聽ACTIVATE WINDOW oWnd 

return nil

//----------------------------------------------------------------------------//

function BuildMenu()

聽 聽local oMenu

聽 聽MENU oMenu
聽 聽 聽 MENUITEM "&Information"
聽 聽 聽 MENU
聽 聽 聽 聽 聽MENUITEM "Abrir" ACTION progreso(oWnd)
聽 聽 聽 聽 聽SEPARATOR
聽 聽 聽 聽 聽MENUITEM "Cerrar" ACTION oDlg:End()
聽 聽 聽 ENDMENU

聽 聽ENDMENU

return oMenu

STATIC FUNCTION progreso(oVnt,lMod,lInde)

聽 聽 Local nTopR := 0
聽 聽 Local nLeftR := 0
聽 聽 Local nGris := 聽rgb(25,25,25)
聽 聽 Local nActual := 0, nTotal := 255
聽 聽 Local oMeter,oText,oTxt
聽 聽 Local cbInicia
聽 聽 Local cbAjusta
聽 聽 Local cTxt := "Procesando ..."
聽 聽 
聽 聽 DEFAULT lMod := .F.
聽 聽 DEFAULT lInde := .T.

聽 聽 DEFINE FONT oText NAME "Calibri" SIZE 0,-22 BOLD

聽 聽 DEFINE DIALOG oDlg FROM nTopR, nLeftR TO nTopR + 54, nLeftR + 70 PIXEL TRUEPIXEL ;
聽 聽 聽 聽 聽 聽 STYLE nOr(WS_POPUP,WS_BORDER) OF oVnt COLORS CLR_WHITE,nGris

聽 聽 @ 140, 240 WHEELMETER oMeter SIZE 200,200 PIXEL OF oDlg ;
聽 聽 聽 聽 POS nActual RANGE 0, nTotal ;
聽 聽 聽 聽 ANIMACOLOR CLR_WHITE ;
聽 聽 聽 聽 BACKCOLOR 聽nGris ;
聽 聽 聽 聽 INNERCOLOR nGris ;
聽 聽 聽 聽 INNERDIA 0.7 ;
聽 聽 聽 聽 FONT oText

聽聽 聽@ 60 , 0 SAY oTxt VAR cTxt SIZE 20 , 22 PIXEL OF oDlg UPDATE FONT oText COLORS CLR_WHITE,nGris CENTER

聽 聽 cbInicia 聽:= <||
聽 聽 聽 聽 聽 聽 Local nTopR := 0
聽 聽 聽 聽 聽 聽 Local nLeftR := 0
聽 聽 聽 聽 聽 聽 aCoor := ClientToScreen( oVnt:hWnd, { nTopR, nLeftR } )
聽 聽 聽 聽 聽 聽 oDlg:nWidth := oVnt:nWidth - ( GetSysMetrics( 32 ) * 2 )
聽 聽 聽 聽 聽 聽 oDlg:nHeight := oVnt:nHeight - ( GetSysMetrics( 15 ) + GetSysMetrics( 4 ) + ( GetSysMetrics( 33 ) * 2 ) + oVnt:oMsgBar:nHeight )
聽 聽 聽 聽 聽 聽 oDlg:setpos(aCoor[1],aCoor[2])聽 
聽 聽 聽 聽 聽 聽 oMeter:nLeft := ( oDlg:nWidth - oMeter:nWidth ) / 2
聽 聽 聽 聽 聽 聽 oTxt:nWidth := oDlg:nWidth 
聽 聽 聽 聽 聽 聽 return nil
聽 聽 聽 聽 >
聽 聽 
聽 聽 oDlg:bStart = { || EVAL(cbInicia) }

聽 聽 if lInde
聽 聽 聽 聽 oDlg:bInit 聽:= <||
聽 聽 聽 聽 聽 聽 oMeter:Indefinite(.T.)
聽 聽 聽 聽 聽 >
聽 聽 endif

聽 聽 oDlg:nOpacity 聽 聽:= 400
聽 聽 oDlg:lModal := lMod
聽 聽 
聽 聽 cbAjusta := <||
聽 聽 聽 聽 聽 聽 Local nTopR := oDlg:nTop
聽 聽 聽 聽 聽 聽 Local nLeftR := oDlg:nLeft
聽 聽 聽 聽 聽 聽 aCoor := ClientToScreen( oVnt:hWnd, { nTopR, nLeftR } )聽
聽 聽 聽 聽 聽 聽 oDlg:nWidth := oVnt:nWidth - ( GetSysMetrics( 32 ) * 2 )
聽 聽 聽 聽 聽 聽 oDlg:nHeight := oVnt:nHeight - ( GetSysMetrics( 15 ) + GetSysMetrics( 4 ) + ( GetSysMetrics( 33 ) * 2 ) + oVnt:oMsgBar:nHeight )
聽 聽 聽 聽 聽 聽 oDlg:setpos(aCoor[1],aCoor[2])聽 
聽 聽 聽 聽 聽 聽 oMeter:nLeft := ( oDlg:nWidth - oMeter:nWidth ) / 2
聽 聽 聽 聽 聽 聽 oTxt:nWidth := oDlg:nWidth 
聽 聽 聽 聽 聽 聽 return nil
聽 聽 >
聽 聽 
聽 聽 oVnt:bMoved 聽:= <||
聽 聽 聽 聽 聽 聽 EVAL(cbAjusta)
聽 聽 聽 聽 > 聽 
聽 聽 
聽 聽 oVnt:bResized 聽:= <||
聽 聽 聽 聽 聽 聽 EVAL(cbAjusta)
聽 聽 聽 聽 >聽 聽
聽 聽 聽 聽 
聽 聽 ACTIVATE DIALOG oDlg 

return .t.

//----------------------------------------------------------------------------//

function CustomerBrowse()
聽 聽USE Customer NEW ALIAS ( cAlias := GetNewAlias( "CUST" ) ) SHARED

聽 聽DEFINE WINDOW oWndChild MDICHILD TITLE Alias()
聽 聽
聽 聽 SET MESSAGE OF oWndChild TO "Child Window" 2015 聽 

聽 聽@ 0, 0 LISTBOX oBrw ;
聽 聽 聽 FIELDS 聽( cAlias )->First, ( cAlias )->Last ;
聽 聽 聽 HEADERS "First", 聽 聽 聽 聽 聽 "Last"

聽 聽oWndChild:SetControl( oBrw )

聽 聽ACTIVATE WINDOW oWndChild MAXIMIZED;
聽 聽 聽 VALID oBrw:lCloseArea()

return nil

//----------------------------------------------------------------------------//

function GetNewAlias( cDbfName )

聽 聽static n := 0

return cDbfName + StrZero( ++n, 2 )

//----------------------------------------------------------------------------//
Saludos
LEANDRO AREVALO
Bogot谩 (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Turbo Incremental Link64 6.98 Embarcadero 7.70 ] [ FiveWin 25.01 ] [ xHarbour 64 bits) ]
Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM

Re: Posicionar dialogo en el punto 0,0 dentro de window

Posted: Mon Jul 12, 2021 01:19 AM
Efectivamente Leandro, faltaba esto a mi c贸digo

Code (fw): Select all Collapse
聽 聽DEFINE WINDOW oWnd TITLE "Probando Iniciar Dialogo En Posicion 0,0" ;
聽 聽 聽 MDI ;
聽 聽 聽 MENU BuildMenu()

聽 聽// A帽adir
聽 聽oWnd:bResized 聽:= oWnd:bMoved := { || oWnd:CoorsUpdate() }

聽 聽SET MESSAGE OF oWnd TO "Main Window"

聽 聽ACTIVATE WINDOW oWnd VALID MsgYesNo( "Want to End ?" )
Cristobal Navarro

Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noci贸n del tiempo

El secreto de la felicidad no est谩 en hacer lo que te gusta, sino en que te guste lo que haces

Continue the discussion