Estou tendo dificuldade de fazer um tipo de menu com o controle ButtonEx e quando eu clico na opção dá a seguinte mensagem de erro:
Application: C:\Paulo_Sistema\SisComprev22\teste.exe
Date: 23/10/2015 Time: 07:19:52
Time from start: 0 days 0 hours 0 mins 6 secs
Error MGERROR/0 Window: Parent is not defined. Program terminated.
Called from MSGMINIGUIERROR(94)
Called from _DEFINEOWNERBUTTON(492)
Called from SISTEMA:BOTOESOPCOES(473)
Called from SISTEMA:DOACTION(383)
Called from (b)SISTEMA_JANELAPRINCIPAL(209)
Called from _DOCONTROLEVENTPROCEDURE(1672)
Called from EVENTS(1569)
Called from DOMESSAGELOOP(0)
Called from _ACTIVATEWINDOW(1390)
Called from DOMETHOD(4686)
Called from SISTEMA:JANELAPRINCIPAL(345)
Called from SISTEMA:INICIALIZAAMBIENTE(1428)
Called from MAIN(21)
Rotina principal que chama a função que está dando erro:
VAR aCaptions AS ARRAY INIT { 'Conversão' , 'Cadastros' , 'Utilitários' , 'SaÃda' }
VAR aImagens AS ARRAY INIT { "Info.bmp" , "Estimate.bmp" , "Repair.bmp" , ;
"Exit.bmp" , "Info2.bmp" , "Estimate2.bmp" , ;
"Repair2.bmp","Exit2.bmp" }
VAR aOpCoversao AS ARRAY INIT { 'Conversão de Datas' , 'Somatória (Anos, Meses e Dias)' , ;
'Voltar' }
LOCAL i , cObjeto , nPos := 40 , cForm := 'JanelaPrincipal'
DEFINE WINDOW &cForm ;
AT 0 , 0 WIDTH ::nWidth(800) HEIGHT ::nHeight(600) ;
TITLE JANELA_PRINCIPAL_SISTEMA ;
MAIN ;
TOPMOST ;
NOSIZE ;
NOSYSMENU ;
NOCAPTION ;
ON INIT { || ::CriaArquivoIni() , DoMethod( cForm , 'ImageBk' , 'Setfocus' ) }
...
FOR i := 1 TO LEN( ::aCaptions )
cObject := "Button_" + STR( i , 1 )
DEFINE BUTTONEX &cObject
ROW ::nWidth(nPos)
COL ::nHeight(20)
WIDTH ::nWidth(314)
HEIGHT ::nHeight(72)
PICTURE ::aImagens [i]
CAPTION ::aCaptions [i]
ACTION ::DoAction( VAL( RIGHT( this.name , 1 ) ) , GetProperty( cForm , this.name , "Caption" ) )
VERTICAL .F.
LEFTTEXT .F.
FLAT .F.
FONTNAME FONT_BOTAO
FONTSIZE FONT_TAM_BOTAO
FONTBOLD .T.
FONTCOLOR VERDEAGUA
BACKCOLOR VERDESAPO
UPPERTEXT .F.
NOHOTLIGHT .F.
NOXPSTYLE .T.
HANDCURSOR .T.
ONMOUSEHOVER ( SetProperty( cForm , this.name , "BackColor" , VERDEDURO ) , ;
SetProperty( cForm , this.name , "FontColor" , WHITE ) , ::ChangeImage( this.name ) )
ONMOUSELEAVE ( SetProperty( cForm , this.name , "BackColor" , VERDESAPO ) , ;
SetProperty( cForm , this.name , "FontColor" , VERDEAGUA ) , ::RestoreImage() )
END BUTTONEX
nPos += 73
NEXT
*-----------------------------------------------------------------------------*
METHOD DoAction( nMode , cAction ) CLASS Sistema
LOCAL cForm := 'JanelaPrincipal'
SWITCH nMode
CASE 1
::BotoesOpcoes( nMode ) // Está opção que está com erro
EXIT
CASE 2
exit
CASE 3
exit
CASE 4
thiswindow.release
END SWITCH
IF nMode < 4
MSGINFO( cAction , 'Action ' + hb_ntos( nMode ) )
ENDIF
DoMethod( cForm , 'ImageBk' , 'Setfocus' )
RETURN NIL
*-----------------------------------------------------------------------------*
METHOD ChangeImage( cCtrl ) CLASS Sistema
LOCAL nImage := VAL( RIGHT( cCtrl , 1 ) ) , cForm := 'JanelaPrincipal'
IF ! ::lChangeImage
::aImageBak[1] := GetProperty( cForm , cCtrl , "Picture" )
::aImageBak[2] := cCtrl
::lChangeImage := .T.
ENDIF
SetProperty( cForm , ::aImageBak[2] , "Picture" , ::aImagens[nImage + 4] )
RETURN NIL
*-----------------------------------------------------------------------------*
METHOD RestoreImage() CLASS Sistema
LOCAL cName := ::aImageBak[1] , cCtrl := ::aImageBak[2]
LOCAL cForm := 'JanelaPrincipal'
SetProperty( cForm, cCtrl, "Picture", cName )
::lChangeImage := .F.
RETURN NIL
Parte do meu código que está dando erro:
METHOD BotoesOpcoes( nOpcao ) CLASS Sistema
LOCAL i , cBotao , nPos := 40
FOR i := 1 TO LEN( ::aOpCoversao )
DEFINE BUTTONEX &cBotao
ROW ::nWidth(nPos)
COL ::nHeight(340)
WIDTH ::nWidth(314)
HEIGHT ::nHeight(72)
CAPTION ::aOpCoversao[i]
ACTION {|| ::RotinaConversao( i ) }
VERTICAL .F.
LEFTTEXT .F.
FLAT .F.
FONTNAME FONT_BOTAO
FONTSIZE FONT_TAM_BOTAO
FONTBOLD .T.
FONTCOLOR VERDEAGUA
BACKCOLOR VERDESAPO
UPPERTEXT .F.
NOHOTLIGHT .F.
NOXPSTYLE .T.
HANDCURSOR .T.
ONMOUSEHOVER ( SetProperty( cForm , this.name , "BackColor" , VERDEDURO ) , ;
SetProperty( cForm , this.name , "FontColor" , WHITE ) )
ONMOUSELEAVE ( SetProperty( cForm , this.name , "BackColor" , VERDESAPO ) , ;
SetProperty( cForm , this.name , "FontColor" , VERDEAGUA ) )
END BUTTONEX
nPos += 73
NEXT
RETURN NIL
*-----------------------------------------------------------------------------*
METHOD RotinaConversao( nValor ) CLASS Sistema
SWITCH nValor
CASE 1
MSG_INFO( 'Opção 1' )
EXIT
CASE 2
MSG_INFO( 'Opção 2' )
EXIT
END SWITCH
RETURN NIL
Quem puder me ajudar ficarei grato.
[]'s
Paulo - JacareÃ/SP