*****************************************************************************
* PREFEITURA DA CIDADE DO RIO DE JANEIRO                                    *
* SECRETARIA MUNICIPAL DE FAZENDA                                           *
*****************************************************************************
* Usuario     : F/CIN/DDS                                                   *
* Programa    : CADASTRA                                                    *
* Responsavel : Alexandre Simões                                            *
* Autor       : Alexandre Simões                                            *
* Data        : Outubro/2000                                                *
* Manutenções : Alexandre Simões                                            *
* Versão atual: Classe e Métodos                                            *
* Data        : 17/06/2016      `                                           *
*---------------------------------------------------------------------------*
* Funcao      : Clonas funcoes do Sistema Gerenciador de Acessos,           *
*               a fim de permitir o gerenciamento de uma Area exclusiva de  *
*               desenvolvimento, consecutivamente, levando ao cadastramento *
*               de senhas unicas para os Analistas do DDS                   *
*****************************************************************************
#include "inkey.ch"
#include "achoice.ch"
#include "set.ch"
#include "dbinfo.ch"
#include "hbcompat.ch"
#include "fileio.ch"
#include "std.ch"
#include "hbthread.ch" 
#include "hwgui.ch"
#include "hbclass.ch"
#include "AmbienteAplic.ch"
#include "common.ch"

#define HB_SYMBOL_UNUSED( symbol )  ( symbol := ( symbol ) )

#xcommand @ <x>,<y> SAY [ <lExt: EXTENDED,EXT> ] [ <oSay> CAPTION ] <caption> ;
             [ OF <oWnd> ]              ;
             [ ID <nId> ]               ;
             [ SIZE <width>, <height> ] ;
             [ COLOR <color> ]          ;
             [ BACKCOLOR <bcolor> ]     ;
             [<lTransp: BACKTRANSPARENT>]   ;
             [ ON INIT <bInit> ]        ;
             [ ON SIZE <bSize> ]        ;
             [ ON PAINT <bDraw> ]       ;
             [ ON CLICK <bClick> ]      ;
             [ ON DBLCLICK <bDblClick> ];
             [[ON OTHER MESSAGES <bOther>][ON OTHERMESSAGES <bOther>]] ;
             [ STYLE <nStyle> ]         ;
             [ FONT <oFont> ]           ;
             [ TOOLTIP <ctoolt> ]       ;
          => ;
          [<oSay> := ] HStaticEx():New( <oWnd>,<nId>,<nStyle>,<x>,<y>,<width>, ;
             <height>,<caption>,<oFont>,<bInit>,<bSize>,<bDraw>,<ctoolt>, ;
             <color>,<bcolor>,<.lTransp.>,<bClick>,<bDblClick>,<bOther> );;
          [ <oSay>:name := <(oSay)> ]

#xcommand @ <x>,<y>  ANIMATION [ <oAnimation> ] ;
             [ OF <oWnd> ]                       ;
             [ ID <nId> ]                        ;
             [ FROM RESOURCE <xResID> ]          ;
             [ STYLE <nStyle> ]                  ;
             [ SIZE <nWidth>, <nHeight> ]        ;
             [ FILE <cFile> ]                    ;
             [ < autoplay: AUTOPLAY > ]          ;
             [ < center : CENTER > ]             ;
             [ < transparent: BACKTRANSPARENT > ]    ;
          => ;
          [<oAnimation> :=] HAnimation():New( <oWnd>,<nId>,<nStyle>,<x>,<y>, ;
             <nWidth>,<nHeight>,<cFile>,<.autoplay.>,<.center.>,<.transparent.>,<xResID>);;
          [ <oAnimation>:name := <(oAnimation)> ]

          
FUNCTION MAIN

   nDefaultOption := 3
   
   nSeconds       := 0

   oIcon := HIcon():AddFile("AVI\CADASTRAR.ICO")
   
   //nOpcao := MsgOptions( "Selecione um botão para impressão", "Atenção", oIcon, "AVI\PRINTER.bmp", {"&Tela", "&Impressora", "&Abandonar"}, nDefaultOption, nSeconds )
//   nResult := MsgOptions( "Usuário e/ou senha inválida, tentar outra vez?", "Atenção", , "AVI\PRINTER.bmp", {"&Sim","&Não","&Abandonar"}, 1, 0 ) 
//   nResult := MsgOptions( "Usuário e/ou senha inválida, tentar outra vez?", "Atenção", , "AVI\PRINTER.bmp", {"&Opcao1"}, 1, 0 ) 
//   nResult := MsgOptions( "Usuário e/ou senha inválida, tentar outra vez?", "Atenção", , "AVI\PRINTER.bmp", {"&Opcao1","&Opcao2"}, 1, 0 ) 
//   nResult := MsgOptions( "Usuário e/ou senha inválida, tentar outra vez?", "Atenção", , "AVI\PRINTER.bmp", {"&Opcao1","&Opcao2","&Opcao3"}, 1, 0 ) 
//   nResult := MsgOptions( "Usuário e/ou senha inválida, tentar outra vez?", "Atenção", , "AVI\PRINTER.bmp", {"&Opcao1","&Opcao2","&Opcao3","&Opcao4"}, 1, 0 ) 
   
   aCompDateTime := {}
   
   IF ! Type( [CompDateTime] + [()] ) == "U"
      Eval( {|| CompDateTime( @aCompDateTime ) } )
      cDataExe := aCompDateTime[1] + " " + Left( aCompDateTime[2], 5 )
   ENDIF   
   
   With Object ClPrincipal():New()
      :cDataExe := cDataExe
      :JanelaPrincipal()
   End
   
RETURN Nil

CREATE CLASS ClPrincipal
    
   PROTECTED :
   
   EXPORTED :
   
   VAR nWidth      AS Integer INIT 0
   VAR nHeigth     AS Integer INIT Nil
   VAR oMainWindow AS Object  INIT Nil
   VAR oModDlg     AS Object  INIT Nil
   VAR cDataExe    AS String  INIT ""
   VAR cAutor      AS String  INIT "Alexandre Simões"
   VAR cURL        AS String  INIT ""
    
   METHOD JanelaPrincipal()
   METHOD Sobre()
   METHOD Status( This ) 
   METHOD ChamaRotina( cRotina )
   METHOD WaitThread( nThread ) 
   METHOD Grafico()  
   METHOD Evento()
   METHOD Banner() 
   METHOD Liga_Timer( oJanela, lLiga, nTime, bBlock, oTimer ) 
   METHOD MsgOptions( cText, cTitle, oIcon, cImage, aOptions, nDefaultOption, nSeconds )
   METHOD PegaOpcao( cCaption, cOpcao )
   METHOD FlashPlayer()
   METHOD SysWait( nWait )
   
ENDCLASS   
   
METHOD JanelaPrincipal() CLASS ClPrincipal
LOCAL oMainWindow, nWidth, nHeight, oBmp
PUBLIC oCrtJan:={}

   oFont1 := HFont():Add( "Georgia", 15, -30, , 0 )
   oFont2 := HFont():Add( "Tahoma", 8, -20, , 0 )
   oFont3 := HFont():Add( "Tahoma", 6, -20, , 0 )
   oFont4 := HFont():Add( "Tahoma", 6 )
   
   oIcon  := HIcon():AddFile("AVI\IACHOICE.ICO")
   
   //hwg_SetToolTipBalloon(.T.)
   
   WITH Object oBmp := HBitmap():AddFile( "AVI\GRADIENT.JPG",,, nWidth, nHeight )
      nWidth  := :nWidth
      nHeigth := :nHeight
   END
   
   hwg_InitCommonControlsEX()
   
   oIcon001 := HIcon():AddFile("AVI\CADASTRAR.ICO")
   oIcon002 := HIcon():AddFile("AVI\USUARIO_SENHA.ICO")
   oIcon003 := HIcon():AddFile("AVI\IMPORTAR.ICO")
   oIcon004 := HIcon():AddFile("AVI\ATUALIZAR.ICO")
   oIcon005 := HIcon():AddFile("AVI\MANUTENCAO.ICO")
   oIcon006 := HIcon():AddFile("AVI\SOBRE.ICO")
   oIcon007 := HIcon():AddFile("AVI\IPRINTER2.ICO")
   oIcon999 := HIcon():AddFile("AVI\IEXIT.ICO")
   
   INIT WINDOW oMainWindow ;
        MAIN MDI TITLE "Gerenciamento do Ambiente de Desenvolvimento e Homologação - F/CIN/DDS" ;
        STYLE WS_CLIPCHILDREN ;
        ICON oIcon ;
        BACKGROUND BITMAP oBmp ;
        STRETCH 0 ;
        FONT oFont2 ;
        ON EXIT /* SAIR */ {|| IF ( hwg_MsgYesNo( "Sair do Cadastra", "Atenção" ), hwg_ExitProcess(), .F. ) }

   ::oMainWindow := oMainWindow

   MENU OF ::oMainWindow
      MENU TITLE "Manutenções"
         MENUITEM "Cadastrar Analista/Acesso"      ACTION {|| MensagemTimeOut("Teste","Teste", 60, 2 ) } BITMAP "AVI\CADASTRAR.BMP"
         MENUITEM "Cadastrar Usuário/Senha"        ACTION {|| hwg_MsgInfo() } BITMAP "AVI\USUARIO_SENHA.BMP"
         MENUITEM "Importar Tarefas Produção"      ACTION {|| hwg_MsgInfo() } BITMAP "AVI\IMPORTAR.BMP"
         MENUITEM "Atualizar Situação do Sistema"  ACTION {|| hwg_MsgInfo() } BITMAP "AVI\ATUALIZAR.bmp"
         MENUITEM "Colocar/Tirar de Manutenção"    ACTION {|| hwg_MsgInfo() }
         SEPARATOR
         MENUITEM "Sair"                           ACTION {|| hwg_EndWindow() } BITMAP "AVI\IEXIT.BMP"
      ENDMENU
   ENDMENU
   
   nRow := hwg_GetDeskTopHeight() - 150

   @ 30,nRow     SAY oLabel4 ;
             CAPTION "v. "+::cDataExe ;
                FONT oFont2 ;
                SIZE ::oMainWindow:nWidth, 60 ;
               COLOR hwg_RGB(255, 255, 255) ;
           BACKCOLOR 16579836 ;
               STYLE SS_LEFT ;
     BACKTRANSPARENT

   
   //::Liga_Timer( ::oMainWindow , .T., 10000, { || ::Grafico() }, "oTimer" )
                            
   @ 0,0 PANEL oToolBar SIZE oMainWindow:nWidth, 40 ;
               ON SIZE { |o,x,y| hwg_Movewindow(o:handle, 0, 0, x, o:nHeight ) } STYLE WS_BORDER BACKCOLOR 16777172

   @ 002, 003 BUTTONEX cmd1 ;
              CAPTION  "" ;
              OF oToolBar ;
              ON CLICK { || ::ChamaRotina( "TESTE1('TESTE 1')" ) } ;
              SIZE     32, 32 ;
              ICON     oIcon001:handle  ;
              TOOLTIP  "Permite cadastrar ou recadastrar um analista/acesso na base de desenvolvimento." 

   @ 050, 003 BUTTONEX cmd2 ;
              CAPTION  "" ;
              OF oToolBar ;
              ON CLICK { || ::ChamaRotina( "TESTE2()" )} ;
              SIZE     32, 32 ;
              ICON     oIcon002:handle  ;
              TOOLTIP  "Permite atribuir senha a um usuário para teste."
              
   @ 100, 003 BUTTONEX cmd3 ;
              CAPTION  "" ;
              OF oToolBar ;
              ON CLICK { || ::FlashPlayer() } ;
              SIZE     32, 32 ;
              ICON     oIcon003:handle  ;
              TOOLTIP  "Permite importar as tarefas de produção para desenvolvimento." 
              
   @ 150, 003 BUTTONEX cmd4 ;
              CAPTION  "" ;
              OF oToolBar ;
              ON CLICK { || hwg_MsgInfo() } ;
              SIZE     32, 32 ;
              ICON     oIcon004:handle  ;
              TOOLTIP  "Permite atualizar a situação de um sistema a partir da produção."

   @ 200, 003 BUTTONEX cmd5 ;
              CAPTION  "" ;
              OF oToolBar ;
              ON CLICK { || nOpcao := ::MsgOptions( "Selecione um botão para impressão", "Atenção", oIcon, "AVI\PRINTER.bmp", {"&Tela", "&Impressora", "&Abandonar"}, 3, 60), hwg_MsgInfo(Str(nOpcao))  } ;
              SIZE     32, 32 ;
              ICON     oIcon005:handle  ;
              TOOLTIP  "Permite colocar ou retirar sistema em manutenção." 

   @ 250, 003 BUTTONEX cmd6 ;
              CAPTION  "" ;
              OF oToolBar ;
              ON CLICK { || ::Sobre() } ;
              SIZE     32, 32 ;
              ICON     oIcon006:handle  ;
              TOOLTIP  "Informações sobre a versão do sistema." 

   @ 300, 003 BUTTONEX cmd7 ;
              CAPTION  "" ;
              OF oToolBar ;
              ON CLICK { || ViewReport("DEMO.PRG") } ;
              SIZE     32, 32 ;
              ICON     oIcon007:handle  ;
              TOOLTIP  "Informações sobre a versão do sistema." 
              
   nCl := hwg_GetDeskTopWidth() - 50 

   @ nCl, 003 BUTTONEX cmd8 ;
              CAPTION  "" ;
              OF oToolBar ;
              ON CLICK { || hwg_EndWindow() } ;
              SIZE     32, 32 ;
              ICON     oIcon999:handle  ;
              TOOLTIP  "Sair" 
              
   //Liga_Timer( oMainWindow, .T., 1, { || VerTecla() }, "oTimer" ) 
   
   ADD STATUS oStatus TO ::oMainWindow PARTS 0,0 FONT oFont4 STYLE BS_LEFT ON INIT {|This| ::Status( This ) }   

   ACTIVATE WINDOW ::oMainWindow MAXIMIZED
   
RETURN Nil

METHOD Status( This ) CLASS ClPrincipal
   This:SetIconPanel( 1, "AVI\IACHOICE2.ICO", 20, 20 )
   This:SetTextPanel( 1, Version() + " | " + hwg_Version() )
   This:SetTextPanel( 2, "" )
RETURN Nil

METHOD Liga_Timer( oJanela, lLiga, nTime, bBlock, oTimer ) CLASS ClPrincipal
   IF lLiga
      SET TIMER &oTimer. of oJanela VALUE nTime ACTION bBlock
   ELSE
      oJanela:&oTimer.:End()   
   ENDIF
RETURN Nil

METHOD VerTecla() CLASS ClPrincipal
   ::Liga_Timer( ::oMainWindow, .F., , , "oTimer" ) 
   IF hwg_GetKeyState( VK_ESCAPE ) < 0 
      IF hwg_MsgYesNo( "Sair do Cadastra", "Atenção" )
         hwg_ExitProcess()
      ENDIF
   ENDIF
   ::Liga_Timer( ::oMainWindow, .T., 1, { || ::VerTecla() }, "oTimer" ) 
RETURN -1

METHOD ChamaRotina( cRotina, oBtn ) CLASS ClPrincipal
THREAD STATIC nThread := Nil

   //EVAL( {|| &cRotina. } )
   
   IF nThread = Nil
      oCrtJan := Array(1,2)
      nThread := hb_ThreadStart( HB_BITOR( HB_THREAD_INHERIT_PUBLIC, ;
                                 HB_THREAD_INHERIT_PRIVATE, ;
                                 HB_THREAD_INHERIT_MEMVARS ), ;
                                 { || &cRotina. } ) 
   ELSE
      hwg_SetForegroundWindow( oCrtJan[1,2] )
      //SendMessage( oCrtJan[1,2], WM_SYSCOMMAND, SC_RESTORE, 0 )
   ENDIF
   ::WaitThread( nThread )
   nThread := Nil
                              
RETURN Nil

METHOD WaitThread( nThread ) CLASS ClPrincipal

   DO WHILE .T.
      IF hb_ThreadWait( nThread, 0.1, .T. ) == 1 
         EXIT
      ENDIF
      ::Evento()
   ENDDO

RETURN Nil  

METHOD Evento() CLASS ClPrincipal
   hwg_DoEvents()
RETURN .T.

METHOD Sobre() CLASS ClPrincipal

LOCAL oModDlg, oFontDlg, oFontLabel
LOCAL oBmp, oIcon := HIcon():AddFile("AVI\SOBRE.ICO")
LOCAL oSay1, nWidth, nHeight, nStyle

   PREPARE FONT oFontDlg NAME "MS Sans Serif" WIDTH 0 HEIGHT -13
   
   oFontLabel := HFont():Add( "Lucida Console", 8, -20, , 0 )
   
   WITH Object oBmp := HBitmap():AddFile( "AVI\GRADIENT.JPG",,, nWidth, nHeight )
      nWidth  := :nWidth
      nHeigth := :nHeight
   END
   
   nStyle  := WS_POPUP + WS_VISIBLE + WS_CAPTION + DS_CENTER
   
   nStyle := DS_CENTER + WS_SYSMENU + WS_VISIBLE 
   
   ::cURL := "http://www.youtube.com/v/58CZcCvwND4&hl=en&fs=1"
   ::cURL := "https://www.youtube.com/embed/nz-hm6CvSW8" 
   ::cURL := "http://www.rio.rj.gov.br/web/smf" 
   
   INIT DIALOG oModDlg TITLE "Sobre a versão do sistema" ;
        AT         0, 0  ;
        SIZE       800, 520 ;
        ICON       oIcon ;
        BACKGROUND BITMAP oBmp ;
        FONT       oFontDlg ;
        STYLE      nStyle ;
        ON INIT {|| oIE:=HHtml():New( oPanelIE ), oIE:nWidth:=oPanelIE:nWidth - 5, oIE:nHeight:=oPanelIE:nHeight, oIE:DisplayPage( ::cURL ) }         

   ::oModDlg := oModDlg
   
   ::Liga_Timer( ::oModDlg , .T., 1000, { || ::Banner() }, "oTimerBanner" )

   @ 010,030  SAY   oSay1 CAPTION "" ;
              SIZE  oModDlg:nWidth, 22 ;
              FONT  oFontLabel ;
              STYLE SS_LEFT ;
              BACKTRANSPARENT

   @ 010,070  SAY   oSay2 CAPTION "" ;
              SIZE  oModDlg:nWidth, 22 ;
              FONT  oFontLabel ;
              STYLE SS_LEFT ;
              BACKTRANSPARENT

   @ 010,110  SAY   oSay3 CAPTION "" ;
              SIZE  oModDlg:nWidth, 22 ;
              FONT  oFontLabel ;
              STYLE SS_LEFT ;
              BACKTRANSPARENT

   @ 010,150  SAY   oSay4 CAPTION "" ;
              SIZE  oModDlg:nWidth, 22 ;
              FONT  oFontLabel ;
              STYLE SS_LEFT ;
              BACKTRANSPARENT
              

//   @ 010,030  SAY   "Autor : " ;
//              SIZE  oModDlg:nWidth, 22 ;
//              FONT  oFontLabel ;
//              STYLE SS_LEFT ;
//              BACKTRANSPARENT
//
//   @ 000,030  SAY   ::cAutor ;
//              SIZE  oModDlg:nWidth - 15 , 22 ;
//              FONT  oFontLabel ;
//              STYLE SS_RIGHT ;
//              BACKTRANSPARENT
//              
//   @ 010,070  SAY   "Compilador : " ;
//              SIZE  oModDlg:nWidth, 22 ;
//              FONT  oFontLabel ;
//              STYLE SS_LEFT ;
//              BACKTRANSPARENT
//
//   @ 000,070   SAY   hb_Compiler() + " | " + Version()  ;
//              SIZE  oModDlg:nWidth - 15, 22 ;
//              FONT  oFontLabel ;
//              STYLE SS_RIGHT ;
//              BACKTRANSPARENT
//              
//   @ 010,110  SAY   "Versão HwGUI : " ;
//              SIZE  oModDlg:nWidth, 22 ;
//              FONT  oFontLabel ;
//              STYLE SS_LEFT ;
//              BACKTRANSPARENT
//
//   @ 000,110   SAY   hwg_Version() ;
//              SIZE  oModDlg:nWidth - 15, 22 ;
//              FONT  oFontLabel ;
//              STYLE SS_RIGHT ;
//              BACKTRANSPARENT
//              
//   @ 010,150   SAY  "Versão do Sistema : " ;
//              SIZE  oModDlg:nWidth, 22 ;
//              FONT  oFontLabel ;
//              STYLE SS_LEFT ;
//              BACKTRANSPARENT
//
//   @ 000,150   SAY  ::cDataExe ;
//              SIZE  oModDlg:nWidth - 15, 22 ;
//              FONT  oFontLabel ;
//              STYLE SS_RIGHT ;
//              BACKTRANSPARENT

   @ 0,230 PANEL oPanelIE SIZE oModDlg:nWidth,260 ON SIZE {|o,x, y| o:Move(,,x,y)}

   @ 0,190 PANEL oPanel SIZE oModDlg:nWidth,32 ON SIZE {|o,x, y| o:Move(,,x,y)} BACKCOLOR hwg_RGB(0,0,0)

   @ (oModDlg:nWidth - 32) / 2,5 ANIMATION oAnimation OF oPanel SIZE 32, 32 AUTOPLAY CENTER  FILE "AVI\INTERNET.AVI"

   ACTIVATE DIALOG oModDlg
   
   ::Liga_Timer( ::oModDlg, .F., , , "oTimerBanner" ) 
   
   oIcon:Release()

RETURN Nil

METHOD Banner() CLASS ClPrincipal
THREAD STATIC nOrder := 1, cVar := ""

   ::Liga_Timer( ::oModDlg, .F., , , "oTimerBanner" ) 

   IF nOrder = 4
      cVar := "Versão do Sistema : " + ::cDataExe
   ELSEIF nOrder = 3
      cVar := "Versão HwGUI      : " + hwg_Version()
   ELSEIF nOrder = 2
      cVar := "Compilador        : " + hb_Compiler() + " | " + Version()
    ELSEIF nOrder = 1
      cVar := "Autor             : " + ::cAutor
    ENDIF
   
   //::oModDlg:oSay1:Caption := ::oModDlg:oSay2:Caption
   //::oModDlg:oSay2:Caption := ::oModDlg:oSay3:Caption
   //::oModDlg:oSay3:Caption := ::oModDlg:oSay4:Caption
   //::oModDlg:oSay4:Caption := cVar

   ::oModDlg:oSay4:Caption := ::oModDlg:oSay3:Caption   
   ::oModDlg:oSay3:Caption := ::oModDlg:oSay2:Caption
   ::oModDlg:oSay2:Caption := ::oModDlg:oSay1:Caption
   ::oModDlg:oSay1:Caption := cVar
   
   ::Liga_Timer( ::oModDlg , .T., 1000, { || ::Banner() }, "oTimerBanner" )
   
   nOrder ++
   
   IF nOrder > 4
      nOrder := 1
   ENDIF
   
RETURN Nil

METHOD Grafico() CLASS ClPrincipal
THREAD STATIC nTipo := 1
 
   ::Liga_Timer( ::oMainWindow, .F., , , "oTimer" ) 
 
   aGraph := Array(1)

   aGraph[1] := {}
   
   IF nTipo = 1
      FOR i := 1 TO hb_Random(50) //-200 TO 200
         //Aadd( aGraph[1], { I, hwg_cos(i/10) } )
         Aadd( aGraph[1], { I, i*i } )
      NEXT
   ELSE
      FOR i := hb_Random(50) TO 1 STEP -1
         Aadd( aGraph[1], { i, i*i } )
      NEXT
   ENDIF
   
   @ 30,100 GRAPH oGraph DATA aGraph SIZE 500, 400 COLOR 65280
   
   oGraph:nType := 2
   
   nTipo ++
   
   IF nTipo > 2
      nTipo := 1
   ENDIF
         
   ::Liga_Timer( ::oMainWindow , .T., 10000, { || ::Grafico() }, "oTimer" )
   
RETURN Nil

METHOD SysWait( nWait ) CLASS ClPrincipal
LOCAL iTime := Seconds()

   nWait := hb_DefaultValue( nWait, 1 )

   DO WHILE Seconds() - iTime < nWait
      hwg_DoEvents()
   ENDDO

RETURN Nil

METHOD MsgOptions( cText, cTitle, oIcon, cImage, aOptions, nDefaultOption, nSeconds ) CLASS ClPrincipal
LOCAL nItem, nBtnWidth:=0, aBtn:=Array( Len( aOptions ) ), aImgInfo
LOCAL nBtnPosX:=10, nBtnPosY:=85
LOCAL oSay1, nWidth, nHeight, nStyle
   
   MEMVAR cOption
   
   cOption:="_"

   DEFAULT cText           TO "Selecione uma opção"
   DEFAULT cTitle          TO "Opções Disponíveis"
   DEFAULT oIcon           TO "Opcao.ico"
   DEFAULT cImage          TO ""
   DEFAULT nDefaultOption  TO 1
   DEFAULT nSeconds        TO 0

    WITH Object oBmp1 := HBitmap():AddFile( cImage,,, nWidth, nHeight )
      nWidth  := :nWidth
      nHeigth := :nHeight
   END
  
   _Font_Options := HFont():Add( "Tahoma", 0, -13, 550 ) //HFont():Add( "Tahoma", 9 )
   
   FOR EACH nItem IN aOptions
      aOptions[nItem:__EnumIndex] := AllTrim( aOptions[nItem:__EnumIndex] )
      nBtnWidth := Max( GetTextWidth(, aOptions[nItem:__EnumIndex], _Font_Options:handle), nBtnWidth )
   NEXT
      
   nBtnWidth += 5

   nStyle  := WS_POPUP + WS_VISIBLE + WS_CAPTION + DS_CENTER + WS_SYSMENU 
   
   oObjeto := ClPrincipal():New()
   

   INIT DIALOG _Options ;
        TITLE      cTitle ;
        AT         0, 0  ;
        SIZE       ( Len( aOptions ) * ( 10 + nBtnWidth ) ) + 10, 155 ;
        ICON       oIcon ;
        FONT       _Font_Options ;
        CLIPPER ;
        STYLE      nStyle 
        IF hb_FileExists( cImage ) 
           @ 10, 20 BITMAP Bitmap SHOW cImage STRETCH 0 SIZE nWidth, nHeight 
           @ 50, 30 SAY oLabel ;
                    CAPTION cText ;
                    FONT _Font_Options ;
                    SIZE _Options:nWidth - 55, 80 ;
                    COLOR hwg_RGB( 0, 0, 255 ) ;
                    STYLE ES_LEFT
        ELSE
           @ 10, 30  SAY oLabel ;
                     CAPTION cText ;
                     FONT _Font_Options ;
                     SIZE  _Options:nWidth - 55, 30 ;
                     STYLE SS_LEFT 
      ENDIF
                 
      FOR EACH nItem IN aOptions
         aBtn[nItem:__EnumIndex]:="_Btn_" + hb_NtoS( nItem:__EnumIndex )
         cOption_ := aBtn[nItem:__EnumIndex]
         @ nBtnPosX, _Options:nHeight - 35 BUTTONEX &cOption_. ;
                                           CAPTION  aOptions[nItem:__EnumIndex]  ;
                                           FONT _Font_Options ;
                                           ON CLICK { || cOption := oObjeto:PegaOpcao( &cOption_.:Name, @cOption ), ;
                                                         hwg_EndDialog(_Options:handle) } ;
                                           SIZE     nBtnWidth, 25 
         nBtnPosX += nBtnWidth + 10
      NEXT

      _Options:nInitFocus := &( aBtn[nDefaultOption] )
      
      IF nSeconds > 0
         ::Liga_Timer( _Options , .T., nSeconds * 1000, { || cOption := aOptions[nDefaultOption], hwg_EndDialog(_Options:handle) }, "oTimerOptions" )
      ENDIF
      
   ACTIVATE DIALOG _Options
  
RETURN aScan( aOptions, AllTrim( cOption ) )

METHOD PegaOpcao( cCaption, cOpcao ) CLASS ClPrincipal
   cVar := cCaption + ":Caption"
   cOpcao := &cVar.
RETURN cOpcao


METHOD FlashPlayer( oWin ) CLASS ClPrincipal
LOCAL oModDlg, oPanel, nWidth, nHeight, oBmp, oIcon := HIcon():AddFile("AVI\SOBRE.ICO")
PRIVATE oFlash

   WITH Object oBmp := HBitmap():AddFile( "AVI\GRADIENT.JPG",,, nWidth, nHeight )
      nWidth  := :nWidth
      nHeigth := :nHeight
   END
    
   nStyle   := DS_CENTER + WS_SYSMENU + WS_VISIBLE 

   oFontDlg := HFont():Add( "Tahoma", 8, -20, , 0 )
   
   INIT WINDOW oWin MDICHILD TITLE "FlashPlayer Exemplo" ;
        AT 0, 0 ;
        SIZE 550, 424 ;
        ICON oIcon ;
        BACKGROUND BITMAP oBmp STRETCH 0 ;
        STYLE WS_CHILD + WS_CAPTION + WS_SYSMENU + DS_SYSMODAL ;
        FONT oFontDlg ;
        ON INIT {|| oFlash := FlashPlayer( oPanel, hb_DirBase() + "AVI\CLOCK_231.SWF", 0, 0, 550, 424 ) }         
     
        @ 0,0 PANEL oPanel OF oWin SIZE 550,424 ON SIZE {|o,x, y| o:Move(,,x,y)}

   ACTIVATE WINDOW oWin CENTER

RETURN

CREATE CLASS ShockwaveFlash FROM HActiveX
CLASS VAR winclass INIT "ShockwaveFlash"
  METHOD New()
ENDCLASS


METHOD New(p1,p2,p3,p4,p5,p6) CLASS ShockwaveFlash
  ::Super:New(p1,p2,p3,p4,p5,p6)
RETURN

FUNCTION FlashPlayer( oWindow, cFlashFile, col, row, nHeight, nWidth )
LOCAL oFlash

    WITH Object oFlash := ShockwaveFlash():New( oWindow, "ShockwaveFlash.ShockwaveFlash.1", 0, 0, nHeight, nWidth )
       :LoadMovie( 0, cFlashFile )
    END
    
RETURN oFlash

INIT FUNCTION AppSetup()
  
  //ANNOUNCE hwg_ErrSys
  
  //ErrorBlock( { | oError | DefError( oError ) } )     
  
  REQUEST HB_LANG_PT
  REQUEST HB_CODEPAGE_PT850
  REQUEST HB_CODEPAGE_PTISO
  
  HB_LANGSELECT("PT")
  HB_CDPSELECT( "PTISO" )
   
  SET TYPEAHEAD TO 0
  SET INTENSITY ON
  SET SCOREBOARD OFF
  SET DELETED ON
  SET SAFETY OFF
  SET ESCAPE ON
  SET DATE FORMAT "DD/MM/YYYY"
  SET DELIMITERS TO
  SET EXCLUSIVE OFF
  SET WRAP ON
  SET EPOCH TO 1920
  SET OPTIMIZE ON
  SET AUTOPEN OFF
  SET DBFLOCKSCHEME TO DB_DBFLOCK_CLIPPER 
  SET MESSAGE TO MaxRow()-1 CENTER

  REQUEST DBFNTX
  REQUEST HB_MEMIO
  
  RddSetDefault("DBFNTX")
  
RETURN Nil 

FUNCTION HB_GTSYS()
   REQUEST HB_GT_WVG_DEFAULT
   //REQUEST HB_GT_WVT
   //REQUEST HB_GT_WGU
   //REQUEST HB_GT_WVG
RETURN Nil 

#pragma BEGINDUMP

#include <windows.h>
#include <hbapi.h>

static void s_doEvents( void )
{
   MSG msg;

   while( PeekMessage( &msg, ( HWND ) NULL, 0, 0, PM_REMOVE ) )
   {
      TranslateMessage( &msg );
      DispatchMessage( &msg );
   };
}

HB_FUNC( HBG_DOEVENTS )
{
   s_doEvents(  );
}
#pragma ENDDUMP