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 ;)
vBulletin v3.8.7, Derechos ©2000-2026, Jelsoft Enterprises Ltd.