Page 1 of 1

Crear ventana en una determinada posición

Posted: Mon Apr 27, 2020 11:30 am
by AngelSalom
Buenas amigos, tengo un diálogo creado y al pulsar un botón quiero que se cree UNA VENTANA en la misma posición.
He montado este pequeño ejemplo :

Code: Select all

#include "fivewin.ch"

Static oMain, oDlgGet, oBtn, oWndPop

function main()
   
   define dialog oMain title "Principal" FROM 0,0 TO 50,160 
   activate dialog oMain CENTERED NOMODAL

   define dialog oDlgGet title "Test Autoget" size 600, 50 pixel COLOR CLR_WHITE, CLR_BLUE OF oMain
   @ 0.5,20 BUTTON oBtn PROMPT "&Crear" OF odlgGet ACTION MuestraPop()

   activate dialog oDlgGet centered 

return nil

Function Muestrapop()
   Local oRect

      // Prueba 1
      oRect:=oDlgGet:GetRect()
      nTop:= oRect:nTop
      nLeft:= oRect:nLeft

      // Prueba 2
      aRect := GetWndRect( oDlgGet:hWnd )
      nTop := aRect[ 1 ]
      nLeft := aRect[ 2 ]
   
      // Coincide 
      DEFINE DIALOG oWndPop FROM nTop, nLeft TO nTop+300, nLeft+500 OF oMain PIXEL 
      ACTIVATE DIALOG oWndPop 

      // No coincide 
      DEFINE WINDOW oWndPop FROM nTop, nLeft TO nTop+300, nLeft+500 OF oMain PIXEL 
      ACTIVATE WINDOW oWndPop 
   
REturn (nil)   

 
Si se trata de un diálogo respeta las posiciones, pero si lo que se crea es una ventana (que es lo que necesito) ésta aparece desplazada abajo y a la derecha de la posición que debería.

¿Alguna explicación?

Gracias!

Re: Crear ventana en una determinada posición

Posted: Tue Apr 28, 2020 10:26 am
by JESUS MARIN
Buenos días Ángel.
Saludos desde La Eliana (Valencia)

Como veo que nadie te contesta, me atrevo a comentarte....
¿tienes en tu versión, en cuanto a la creación de los diálogos, la opción TRUEPIXEL ?

Los diálogos creo recordar que utilizan coordenadas distintas.

Por si sirve de ayuda .

Saludos

Re: Crear ventana en una determinada posición

Posted: Tue Apr 28, 2020 11:05 am
by AngelSalom
Gracias Jesús, al final lo solucioné de otro modo :

Code: Select all

  
oRectGet    :=oGet:GetRect()
oRectDialogo:=oWnd:GetRect()

nTop :=(oRectGet:nBottom-oRectDialogo:nTop)
nLeft:=(oRectGet:nLeft-oRectDialogo:nLeft)
Quería montar una ventana justo debajo del objeto oGet, con esta operación obtengo la posición del diálogo y la posición del get y obtengo la posición relativa del get dentro del diálogo.

Son mejoras que estoy haciendo a la clase tAutoget.

Re: Crear ventana en una determinada posición

Posted: Wed Apr 29, 2020 9:23 am
by José Luis Sánchez
Angel, creo que la clase Autoget de Daniel García te hace esto de manera automática.

Saludos,

Re: Crear ventana en una determinada posición

Posted: Wed Apr 29, 2020 9:37 am
by AngelSalom
José Luis, precisamente esa clase es la que he adaptado para que muestre la TGetlist() en el diálogo padre del AUTOGET en el que estoy editando.
Imagina el escenario: un diálogo en el que el Autoget está "rozando" el borde inferior. Al desplegarse la lista no se ve nada ya que no cabe en el diálogo contenedor (en otro post pregunté si sería posible obtener el mismo funcionamiento que un combobox que se muestra sin límites), lo que he hecho es que si se le indica un diálogo padre, la tGetList se crea allí, con estupendos resultados.