1. Cecilia Jiménez Bedoya
  2. PowerBuilder
  3. Thursday, 8 April 2021 11:54 AM UTC

Hola!!. Tengo un problema con el servicio de resize de las pfcs. Hasta ahora lo hemos estado utilizando en nuestros aplicativos sin ningún tipo de problemas. Ahora necesito crear una aplicación que tiene un custom MDI frame ya que quiero poner una barra de herramientas en el lateral izquierdo del frame. El resize del MDI_1 se hace correctamente, el problema viene cuando abro una ventana dentro del frame. La ventana, que es heredada de w_sheet, tiene activado el servicio de resize y se registra la datawindow que contiene para que se amplie con la ventana:

this.of_SetResize(true)

inv_resize.of_Register(dw_tareas, 0,0,100, 100)

Bien pues esto que funciona con un frame standar en el momento en que pongo el panel izquierdo dentro de mi frame ya no funciona, el largo y ancho de la datawindow se me van por encima del tamaño de la ventana.

¿Alguien puede decirme por qué puede estar sucediendo esto, y si hay alguna solución?

Muchas gracias.

Accepted Answer
Miguel Leeuwe Accepted Answer Pending Moderation
  1. Friday, 9 April 2021 09:42 AM UTC
  2. PowerBuilder
  3. # Permalink

Otra cosa que tienes que tener en cuenta:

El servicio resize de las PFC sólo ajusta inicialmente bien los controles al tamaño de la ventana si la abres el modo "Original".  EDITADO: John ha dado la solución abajo, por si quieres abrir la ventana en otros modos. Hay que utilizar la function inv_resize.of_setOrigSize().

Si aún quieres abrir la hoja maximizada o layered o en cascada, cuando llamas a "opensheet" podrías hacer un opensheetWithParm(...., original) y pasar como parámetro el modo que quieres que la ventana adapte. En el open de la hoja compruebas ese valor y cambias

this.windowstate = maximized!

o llamas a of_SendMessage ("pfc_cascade") o of_SendMessage ("pfc_layer")

No sé si habrá mejor forma de conseguir eso. EDITADO: de nuevo, la mejor forma es la que ha dado John más abajo.

Nosotros abrimos todas las hojas como "original" y tenemos activado el servicio de las PFC que guarda y restora el estado y la posición de una ventana en una tabla.

saludos

 

Comment
  1. John Fauss
  2. Friday, 9 April 2021 13:23 PM UTC
Nicely done, Miguel!
  1. Helpful
  1. Miguel Leeuwe
  2. Friday, 9 April 2021 13:24 PM UTC
Thank you

:)
  1. Helpful
There are no comments made yet.
John Fauss Accepted Answer Pending Moderation
  1. Friday, 9 April 2021 18:15 PM UTC
  2. PowerBuilder
  3. # 1

El servicio Resize funciona bien al abrir una ventana de hoja usando Layered o Cascaded, pero solo si llama a la función of_SetOrigSize en el servicio Resize antes de comenzar a registrar los controles en la ventana.

El verdadero truco está en determinar los valores adecuados para pasar a la función of_SetOrigSize. Esto es lo que hice en el evento pfc_PreOpen de una ventana de prueba que contiene un botón de comando en la esquina inferior derecha que cierra la ventana:

Constant Integer WIDTH_ADJUST  = -36   // Your values may be different?
Constant Integer HEIGHT_ADJUST = -180

This.of_SetResize(True)
This.inv_resize.of_SetOrigSize(This.Width+WIDTH_ADJUST,This.Height+HEIGHT_ADJUST)

This.inv_resize.of_Register(cb_close,This.inv_resize.FIXEDRIGHTBOTTOM)

Los factores de ajuste de ancho y alto son necesarios porque en el tiempo de ejecución las propiedades de ancho y alto de la ventana incluyen los bordes y la barra de título (título) ... en el panel Propiedades del pintor de ventanas, estas cantidades se han eliminado. Las funciones WorkSpaceWidth () y WorkSpaceHeight () no se pueden utilizar porque cuando la ventana se abre como Layered o Cascaded, estas funciones devuelven el tamaño del espacio de trabajo redimensionado.

Con el código anterior, el servicio Cambiar tamaño funciona correctamente independientemente de cómo se abra la ventana de la hoja.

Comment
  1. Miguel Leeuwe
  2. Saturday, 10 April 2021 02:36 AM UTC
Thank you for that information John,

Also good information to know it has to be called before registering the objects.

I tried with This.inv_resize.of_SetMinSize() (of course without success!), but since we don't have this problem and open everything as "Original" and use the pfc service to restore and save positions and states, I didn't try anything else. Cecilia seemed happy enough.

  1. Helpful
  1. Miguel Leeuwe
  2. Saturday, 10 April 2021 02:52 AM UTC
For anyone interested, this is some code I got from Arthur:



Hi Miguel

The values describe the size within the border. You have to take the border thickness and the title into account.

With the external function: Function Int GetSystemMetrics( int nIndex ) Library "USER32"

You can get borders and title in pixels and do something like that:



li_BorderWidth = PixelsToUnits( GetSystemMetrics( 32 ), XPixelsToUnits! ) // SM_CXFRAME

li_BorderHeight = PixelsToUnits( GetSystemMetrics( 33 ), YPixelsToUnits! ) // SM_CYFRAME

li_Title = PixelsToUnits( GetSystemMetrics( 31 ), YPixelsToUnits! ) // SM_CYSIZE

Parent.Width = <Original Width by Class Definition> + li_BorderWidth

Parent.Height = <Original Height by Class Definition> - li_Title + 2 * li_BorderHeight

-> Or better do a resize with both values.



Regards

Arthur Hefti
  1. Helpful
  1. Cecilia Jiménez Bedoya
  2. Monday, 12 April 2021 06:20 AM UTC
Muchas gracias por toda la información, la verdad es que es muy útil
  1. Helpful
There are no comments made yet.
Miguel Leeuwe Accepted Answer Pending Moderation
  1. Friday, 9 April 2021 09:13 AM UTC
  2. PowerBuilder
  3. # 2

Hola Cecilia,

He adjuntado mi versión de tu ejemplo.

1) no compilaba, tenía que quitar las 2 librerías de seguridad de la lista de librerías

2) no compilaba, tenía que renombrar una constante de tipo integer llamada "RESIZE" hacia "CONTSRESIZE". Resize es una palabra reservada, ya que es una función y también el nombre de un evento.

3) no tienes que abrir la ventana w_ppal desde el open de w_marco, sino desde el pfc_postopen

4) he comentado la línea que maximiza w_ppal.

Creo que ahora funciona mejor (espero)

saludos

MiguelL

 

Attachments (1)
Comment
There are no comments made yet.
Cecilia Jiménez Bedoya Accepted Answer Pending Moderation
  1. Friday, 9 April 2021 07:12 AM UTC
  2. PowerBuilder
  3. # 3

Por cierto las PFC son la última versión de 2019.

Gracias.

Comment
  1. Miguel Leeuwe
  2. Friday, 9 April 2021 07:21 AM UTC
Asegúrate the bajarlas de nuevo. Ayer se han incorporado los últimos cambios en el ZIP de las PFC.

  1. Helpful
There are no comments made yet.
Cecilia Jiménez Bedoya Accepted Answer Pending Moderation
  1. Friday, 9 April 2021 07:11 AM UTC
  2. PowerBuilder
  3. # 4

Hola

Adjunto una pequeña prueba, en vez de una datawindow y un panel, he puesto dos rectángulos, uno para acotar el MDI_1 y el otro dentro de la ventana sheet con un botón que es lo que se tiene que resizar. El botón debe moverse hacia abajo-derecha y el rectángulo ampliarse. Dentro del rectángulo he colocado unos statictext con los valores del workspaceHeitgh, workspaceWidth, windows heigth y width y el heigth y el width del rectángulo.

En el código subido estoy abriendo la sheet como Original con lo que funciona, para probar los otros modos  cambiad el código en el evento open de la w_marco

He comprobado que el problema viene cuando el OpenSheet lo hago en modo Layered o Cascade. Si abro la ventana en modo Original y la maximizo funciona bien.

Esto de momento me soluciona el problema, pero sería interesante ver porque no funciona en los otros dos modos de apertura de la sheet.

Muchísimas gracias!!!

 

 

Attachments (1)
Comment
There are no comments made yet.
Miguel Leeuwe Accepted Answer Pending Moderation
  1. Thursday, 8 April 2021 17:07 PM UTC
  2. PowerBuilder
  3. # 5

Si puedes hace una pequeña aplicación para poder reproducir el problema estaremos encantados de ayudarte a resolver el problema.

Comment
  1. Cecilia Jiménez Bedoya
  2. Friday, 9 April 2021 07:15 AM UTC
Miguel muchas gracias por contestar. He adjuntado una pequeña prueba abajo. Encontré un modo de que funcione, pero como digo más abajo sería interesante ver por qué no funciona abriendo la ventana en modo Layered o Cascade.
  1. Helpful
There are no comments made yet.
Miguel Leeuwe Accepted Answer Pending Moderation
  1. Thursday, 8 April 2021 16:36 PM UTC
  2. PowerBuilder
  3. # 6

Hola,

No digo que ésto será el problema, pero podría ser que tus ventanas heredadas de w_sheet tienen grabadas los últimos tamaños y posiciones?

En este caso, mira qué pasa si le das a "Ventana > Layer". Posiblemente se están aplicando posiciones a las ventanas que fueron grabadas cuando tu nuevo object todavía no existía.

saludos

Comment
There are no comments made yet.
John Fauss Accepted Answer Pending Moderation
  1. Thursday, 8 April 2021 16:24 PM UTC
  2. PowerBuilder
  3. # 7

Hola, Cecilia -

¿La ventana de la hoja ya está abierta y / o maximizada cuando se agrega la barra de herramientas al lado izquierdo del marco MDI? Incluso con la excelente descripción del problema que está experimentando, tengo un poco de dificultad para visualizar los pasos que ha descrito.

¿Puedes publicar capturas de pantalla antes y después? Si es así, sería útil reducir el tamaño del marco MDI, ya que las imágenes grandes se reducen cuando se publican si se pegan en una publicación de respuesta.

Además, ¿sabría cuántos años tiene el conjunto de bibliotecas PFC que está utilizando?

Comment
  1. Miguel Leeuwe
  2. Thursday, 8 April 2021 16:40 PM UTC
Otra cosa: ¿tu barra de herramientas está heredada de algún objeto de los PFC?
  1. Helpful
  1. Cecilia Jiménez Bedoya
  2. Friday, 9 April 2021 07:16 AM UTC
Gracias por contestar John. Abajo he puesto una pequeña prueba. Las pfcs son de 2019.
  1. Helpful
There are no comments made yet.
  • Page :
  • 1


There are no replies made for this question yet.
However, you are not allowed to reply to this question.