Iniciar Sesión

Ver la Versión Completa : [Sintaxis] Modificar Propiedades de un FORM


Recato53
2 de junio de 2015, 16:22
Quiero cambiar la propiedad WindowState de un FORM en tiempo de ejecución.

En la definición el FORM esta creada la propiedad como NORMAL, pero dependiendo del usuario que ejecuta la aplicación quiero poner MAXIMIZE.

Sabe alguien como conseguir esto.
Como siempre digo con comandos del PowerCobol.

Gracias.
Un Saludo.

Hrmcobol
2 de junio de 2015, 16:33
Hola Amigo Aquí Un Ejemplo


IF V-Height < 800 INVOKE POW-SELF "ShowForm" USING POW-SWSHOWMAXIMIZED.

Puedes reemplazar POW-SELF por el nombre del form


Busca las otras opciones en el Help.

Saludos

Recato53
2 de junio de 2015, 17:17
Hola Amigo Aquí Un Ejemplo


IF V-Height < 800 INVOKE POW-SELF "ShowForm" USING POW-SWSHOWMAXIMIZED.

Puedes reemplazar POW-SELF por el nombre del form


Busca las otras opciones en el Help.

Saludos

He insertado esta línea en mi programa:

INVOKE FR-PEDVENT "ShowForm" USING POW-SWSHOWMAXIMIZED

Cuando ejecuto el programa me aparece el mensaje:
Illegal function call.

Josber
2 de junio de 2015, 18:57
Dos cosas:

- ¿ Has probado con POW-SELF en vez de FR-PEDVENT ?
- ¿ Qué versión de PWC estás usando ?

Yo uso mucho la instrucción "ShowForm", (sobre todo cuando abro un form de consulta con un listView, porque si no la uso, hasta que no ha terminado de cargar todo el listview no muestra el formulario), y no me da ningún problema.

Un saludo.-

Hrmcobol
2 de junio de 2015, 19:51
El "FR-PEDVENT" va entre comillas

Saludos

PERDON NO VA ENTRE COMILLAS, lo acabo de probar con el nimbe directamente y funciona debe ser otro el problema

Saludos

Rapinto
3 de junio de 2015, 00:48
Recato33

Verifica no "style" se está com a opção de "variable".
Se estiver "Fixed" ou "fixedtool" não podes maximizar.

Normalmente é esse a causa do erro.

Un saludo,
Rui Pinto

Kuk
3 de junio de 2015, 09:30
Josber, para que te muestre el formulario, debes usar la instruccion ThruEvents. EN los bucles lo mismo.

En cuanto al problema descrito por Recato53, estoy de acuerdo con Rui, ese debe ser el problema.

Tambien aconsejo usar siempre POW-SELF, porque es un pointer al Form actual, y asi el codigo te vale en Forms diferentes y no hay que cambiar nada. Es decir, ¡MI-FORM y POW-SELF equivalen en cualquier Form!

Josber
3 de junio de 2015, 11:07
Josber, para que te muestre el formulario, debes usar la instruccion ThruEvents. EN los bucles lo mismo.

Kuk, "ThruEvents" es lo primero que probé y no me funcionaba, así que probé de la otra forma y a funcionar.

Un saludo.-

Recato53
3 de junio de 2015, 13:19
Recato33

Verifica no "style" se está com a opção de "variable".
Se estiver "Fixed" ou "fixedtool" não podes maximizar.

Normalmente é esse a causa do erro.

Un saludo,
Rui Pinto

Muchas gracias a todos.

BorderStyle = 0, Variable
MaxButton= Activo

Con esta configuración funciona correctamente.

¿Se pueden cambiar estas propiedades una vez maximizada el FORM?.

Muchas gracias.

Kuk
3 de junio de 2015, 17:27
¿Se pueden cambiar estas propiedades una vez maximizada el FORM?.
No se puede. Estas propiedades son modificables sólo en modo diseño. Se puede hacer por WinAPI, pero es algo más complicado, son varias llamadas. Ademas, no tiene mucho sentido. Si diseñas un Form variable, debes reposicionar y redimensionar cosas en el evento "Resized" del Form.

Josber, si cargas directamente en "Opened", no te lo va a mostrar nunca. El truco en este caso es meter un CmTimer. En modo diseño, le quetas el "Active" al Timer y le pones medio segundo (500) o 1 segundo (1000). En "Opened" del Form, haces lo que haya que hacer (sin la parte de la carga del ListView), y la última línea debe ser:


/POW-SELF==>"Opened"
...
MOVE POW-TRUE TO "Active" OF CmTimer1



Y en el evento "Timer" del CmTimer1 metes:



MOVE POW-FALSE TO "Active" OF CmTimer1

...el código de carga del ListView con "ThruEvents" en cada iteración del bucle

Rapinto
4 de junio de 2015, 22:28
Kuk,

Não sei se já alguma vez, contaste o tempo que demora a mais a carregar uma Listview, fazendo o THRUEVENTS em todas as linhas!!! Chega a demorar 3 ou 4 vezes mais. Já tive casos de 10x mais (1 minuto para 10 minutos).

Eu uso um contador, e faço o thruevents de x em x linhas, por exemplo 30 ou 50. Alem disso temos que ter cuidado, pois o THRUEVENTS (no Visual Basic - DoEvents) executa tudo o que estiver pendente para processar.
Assim se entretanto o operador carregou num botão da form o programa vai executar o click do botão e pode estragar o carregamento. Imagina que por exemplo o botão tem um Clear da LISTVIEW!!! Ou que o operador fecha a form em cima no X vermelho!!!!

Saludos,
Rui Pinto

Kuk
5 de junio de 2015, 09:20
Rapinto, llevas razón. Si son muchos los datos a cargar, el ThruEvents hay que hacerlo cada x registros. O también, se puede hacer carga de X registros y el resto a petición (un Boton con texto "Cargar más..." o algo así.

Pero en cuando al segudno problema que dices, es teoricamente posible, pero en un CallForm, si además hacemos:

MOVE POW-FALSE TO "Enabled" OF POW-SELF
MOVE POW-MP-WAIT TO "MousePointer" OF POW-SELF

...BUCLE

MOVE POW-TRUE TO "Enabled" OF POW-SELF
MOVE POW-MP-DEFAULT TO "MousePointer" OF POW-SELF


No habrá posibilidad de hacer click ni nada, porque el Form esta bloqueado. Asi evitamos problemas ;)