Page 1 of 1

WINDOW - UNA DUDA

Posted: Thu Nov 08, 2018 9:20 pm
by SALINETAS24
Hola a todos.
Tengo una duda, una curiosidad..., necesidad de saber ... ;)

Os paso un código, muy simple, extraido del los SAMPLES de HMG.
Tal y como está, si lo compilais y ejecutais, entrar en la opción 1 del menu, os llevará a otra ventana con la sentencia ON RELEASE Refres(), y cuando cerreis la ventana, os dara un error.

Ahora bien.., si cambiamos las linea del error y dejamos activo solo el MSGBOX, funciona de maravilla.

La pregunta... ¿alguien sabe el tipo de WINDOW que utiliza la funcion MSGBOX ..., o es un secreto de bill puertas.., o es que yo defino mal este tipo de ventana....?

Muchas gracias a todos y vamos con una cervecita fresquita....,y ya se que la curiosidad mato al gato :lol:

Code: Select all

#include "hmg.ch"

Function main()

	DEFINE WINDOW Form_1 ;
		AT 0,0 ;
		WIDTH 400 ;
		HEIGHT 200 ;
		TITLE 'Menu Test' ;
		MAIN 

		DEFINE MAIN MENU

			POPUP 'File'

				ITEM 'Open' 		ACTION VEN2()
				ITEM 'Save' 		ACTION MsgInfo ('File:Save') IMAGE 'Free.Bmp'  
				ITEM 'Print' 		ACTION MsgInfo ('File:Print') IMAGE 'Info.Bmp'  
				ITEM 'Save As...' 	ACTION MsgInfo ('File:Save As')
				ITEM 'HMG Version' 	ACTION MsgInfo (HMGVersion())
				SEPARATOR
				ITEM 'Exit' 		ACTION MsgInfo ('File:Exit') IMAGE 'Exit.Bmp'

			END POPUP

			POPUP 'Test' 

				ITEM 'Item 1' 		ACTION MsgInfo ('Item 1')  name xxx
				ITEM 'Item 2' 		ACTION MsgInfo ('Item 2')

				POPUP 'Item 3' name test
					ITEM 'Item 3.1' 		ACTION MsgInfo ('Item 3.1') 
					ITEM 'Item 3.2' 		ACTION MsgInfo ('Item 3.2')

					POPUP 'Item 3.3'
						ITEM 'Item 3.3.1' 		ACTION MsgInfo ('Item 3.3.1')
						ITEM 'Item 3.3.2' 		ACTION MsgInfo ('Item 3.3.2')

						POPUP 'Item 3.3.3' 	

							ITEM 'Item 3.3.3.1' 		ACTION MsgInfo ('Item 3.3.3.1')
							ITEM 'Item 3.3.3.2' 		ACTION MsgInfo ('Item 3.3.3.2')
							ITEM 'Item 3.3.3.3' 		ACTION MsgInfo ('Item 3.3.3.3')
							ITEM 'Item 3.3.3.4' 		ACTION MsgInfo ('Item 3.3.3.4')
							ITEM 'Item 3.3.3.5' 		ACTION MsgInfo ('Item 3.3.3.5')
							ITEM 'Item 3.3.3.6' 		ACTION MsgInfo ('Item 3.3.3.6')  

						END POPUP

						ITEM 'Item 3.3.4' 		ACTION MsgInfo ('Item 3.3.4')

					END POPUP

				END POPUP

				ITEM 'Item 4' 		ACTION MsgInfo ('Item 4')

			END POPUP

			POPUP 'Help'

				ITEM 'About' 		ACTION MsgInfo ('Help:ABout')

			END POPUP

		END MENU

		DEFINE CONTEXT MENU
			ITEM 'Item 1' 		ACTION MsgInfo ('Item 1') 
			ITEM 'Item 2' 		ACTION MsgInfo ('Item 2')
			SEPARATOR
			ITEM 'Item 3' 		ACTION MsgInfo ('Item 3')
		END MENU

	END WINDOW

	CENTER WINDOW Form_1

	ACTIVATE WINDOW Form_1

Return


Function Ven2()

	DEFINE WINDOW Form_Main ;
		AT 0,0 ;
		WIDTH 640 HEIGHT 480 ;
		TITLE 'Main Window' ;
		MODAL ;
		ON RELEASE Refres()

		@ 200,250 LABEL Label_1 ;
		WIDTH 150 HEIGHT 40 ;
		VALUE 'Click Me !' ;
		FONT 'Arial' SIZE 24  CENTERALIGN ;
		ACTION MsgInfo('Label Clicked!!!')

		@ 10,10 LABEL Label_2 ;
		AUTOSIZE ;
		VALUE '...' ;
		ACTION msginfo('test')

	END WINDOW

	Form_Main.Label_2.Value := 'Hello All, This Is An AutoSIzable Label!!!'

	CENTER WINDOW Form_Main

	ACTIVATE WINDOW Form_Main

Return 

PROCEDURE REFRES()

/*
	MSGBOX("SALIMOS","ATENCION")
*/
	DEFINE WINDOW Form_SALIR ;
		AT 0,0 ;
		WIDTH 640 HEIGHT 480 ;
		TITLE 'Main Window' ;
		MODAL ;
		ON RELEASE Refres()

		@ 200,250 LABEL Label_1 ;
		WIDTH 150 HEIGHT 40 ;
		VALUE "SALIMOS DE REGRESO" ;
		FONT 'Arial' SIZE 24  CENTERALIGN ;
		ACTION MsgInfo('Label Clicked!!!')

		@ 10,10 LABEL Label_2 ;
		AUTOSIZE ;
		VALUE '...' ;
		ACTION msginfo('test')

	END WINDOW

	Form_SALIR.Label_2.Value := 'ESTO ES UNA PRUEBA'

	CENTER WINDOW Form_SALIR

	ACTIVATE WINDOW Form_SALIR
RETURN

Re: WINDOW - UNA DUDA

Posted: Thu Nov 08, 2018 10:39 pm
by srvet_claudio
Las cajas de diálogo de Windows son ventanas modales del sistema.

Re: WINDOW - UNA DUDA

Posted: Fri Nov 09, 2018 2:47 pm
by SALINETAS24
Hola Claudio, y gracias.

Pero si son solo Modales .., porque el codigo da error si lo que hace es intentar mostrar una Window modal...?¿
donde esta el fallo.... en la deficion..?

Gracias de nuevo

Re: WINDOW - UNA DUDA

Posted: Fri Nov 09, 2018 3:24 pm
by srvet_claudio
SALINETAS24 wrote: Fri Nov 09, 2018 2:47 pm Hola Claudio, y gracias.

Pero si son solo Modales .., porque el codigo da error si lo que hace es intentar mostrar una Window modal...?¿
donde esta el fallo.... en la deficion..?

Gracias de nuevo
Excepto por los MessageBox, HMG no utiliza ventanas modales del sistema. Para crear una ventana "Modal" lo que hace HMG es crear una ventana normal y luego inactivar las demas ventanas de la aplicación dando la impresión que la ventana es una ventana modal del sistema.

Re: WINDOW - UNA DUDA

Posted: Fri Nov 09, 2018 5:52 pm
by SALINETAS24
Ok, ahora está más claro. Muchas gracias!!

Re: WINDOW - UNA DUDA

Posted: Sun Dec 02, 2018 9:45 am
by SALINETAS24
srvet_claudio wrote: Fri Nov 09, 2018 3:24 pm
Excepto por los MessageBox, HMG no utiliza ventanas modales del sistema. Para crear una ventana "Modal" lo que hace HMG es crear una ventana normal y luego inactivar las demas ventanas de la aplicación dando la impresión que la ventana es una ventana modal del sistema.
Hola Claudio..,¿ hay alguna forma de que podamos crear una ventana de sistema, a modo de los MESSAGEBOX ?

Es por el tema de recursividad en el LOSTFOCUS, he detectado que si la ventana es un MSGBOX detiene esos errores y se pueden displayar mensajes.., pero yo necesito mostrar un grid.
Gracias

Re: WINDOW - UNA DUDA

Posted: Sun Dec 02, 2018 12:00 pm
by mustafa
Hola Nanu !!! Com estas ?

View ---> http://www.hmgforum.com/viewtopic.php?f ... ISK#p29718

Haber si te puede servir esta alternativa ?

Code: Select all

#include "hmg.ch"
#define MB_ICONASTERISK 64
#define MB_ICONEXCLAMATION 0x30
#define MB_ICONWARNING 0x30
#define MB_ICONERROR 16
#define MB_ICONHAND 16
#define MB_ICONQUESTION 32

Function Main
  
  REQUEST DBFCDX , DBFFPT , DBFDBT
  RDDSETDEFAULT( "DBFCDX" )

  SET CODEPAGE TO SPANISH 
  SET DELETE ON
  SET CENTURY ON
  SET DATE FRENCH
  SET DATE FORMAT TO "dd/mm/yyyy"
  SET ESCAPE ON

  CLOSE DATABASES   

 IF !FILE("meses.dbf")
     NoEstaDBF()
 ENDIF
    SELECT 1 
    USE meses

 PRIVATE numerop := ALLTRIM( STR(meses->ULTIMO_REC) ) 
 PRIVATE CRLFp   := ( CHR(10) + CHR(13) )
 PRIVATE cTextp  :=  CRLFp + SPACE(3) + "Factura Nº "+ numerop + CRLFp + CRLFp ;
                        + SPACE(3) + "Factura_"+ ALLTRIM( numerop )+".txt" , ;
                          cTitlep := "End Print Factura"          
 wapi_MessageBox( wapi_GetActiveWindow(), cTextp, cTitlep, MB_ICONASTERISK )     //<-  pon el icon que quieras ?  sample  MB_ICONHAND 

 CLOSE DATABASES   

RETURN NIL

*----------------------------------------------------*
FUNCTION NoEstaDBF()
*----------------------------------------------------*
local aStru := { {"ULTIMO_REC"   ,"N" , 5,0 },;
                 {"FECHA_FACT"   ,"C", 10,0 },;
                 {"HORA"         ,"C",  8,0 } };

         REQUEST DBFCDX

         dbCreate( "meses.dbf", aStru, "DBFCDX", .T. )

  CLOSE DATABASES
  USE meses NEW
  dbAppend()
  REPLACE ULTIMO_REC WITH 45681
  REPLACE FECHA_FACT WITH DTOC(DATE())
  REPLACE HORA       WITH TIME()

  CLOSE DATABASES
             
RETURN NIL
Una abraçada
Mustafa :idea:

Re: WINDOW - UNA DUDA

Posted: Mon Dec 03, 2018 5:34 pm
by SALINETAS24
Yeep..., bona tarda senyoret!!.

Gracias Mustafa por la aportación. Desconocía la wapi_MESSAGEBOX.
Ya he resuelto el problema... el tema de no poder hacer más de lostfocus seguidos, abriendo un ventana.., con la perdida de focus, recursividad, etc....
He colgado la ultima revisión en :

http://www.hmgforum.com/viewtopic.php?f ... 2&start=10

Un abrazo..., y una serveseta frequeta!!