Muitas vezes queremos exibir uma mensagem de aviso se o usuário quer realmente fechar o programa, isso quando é pressionado o botão fechar da janela (x):
Saída no Ubuntu 14.04
Algumas funções deste exemplo só estarão disponíveis a partir de 22-05-2015
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
//exemplo de como perguntar ao usuário se quer ou não //sair do programa. inclua 'igbr' funcao sair(janela) ig.botao_mostre_imagem( verdadeiro ); //mostrar icones nos botoes. dialog = ig.dialogo_mensagem( nulo , 'Atenção' , 'Sair do programa?' , ig.msg_questao , //tipo de mensagem ig.botao_sim_nao //tipos de botões ); x = ig.dialogo_execute( dialog ); ig.componente_destrua( dialog ); imprima(x); ret = x //com o novo comando ig.conecte_funcao (diferente do ig.conecte) // podemos retornar um valor bool direto para funcao call back C //sem precisar usar a funcao ig.def_retorno_evento(); //para sair é só retornar verdadeiro, se retornar falso o programa não é fechado. se ret == ig.ret_sim entao imprima 'sim'; retorne falso; senaose ret == ig.ret_nao entao imprima 'Nao' ; retorne verdadeiro; senaose ret == ig.ret_cancelar entao imprima 'cancelar' ; retorne verdadeiro senaose ret == ig.ret_fechar entao imprima 'fechar' ; retorne verdadeiro fim //fim se fim //fim funcao jan = ig.janela'minha janelinha' //nova funcao: ig.conecte_permutado( jan , ig['destruido'] , ig.fimjanela , nulo ); //nova funcao: ig.conecte_funcao( jan , ig.evento_delete , sair , nulo ) ig.componente_mostre( jan); ig.fimprograma(); |
O segredo é conectar o evento ig.evento_delete na janela, use a função nova ig.conecte_funcao (disponível na atualização a partir de 22-05-2015). Sua sintaxe é : ( componente_conectado , tipo_evento , funcao , userdata ); e na função call back (conectada) retorne verdadeiro caso queira que o programa feche ou falso para cancelar e retornar.
Se usar a função ig.conecte deverá usar na callback a funcao ig.def_retorno_evento( falso / verdadeiro );
Obs.:
Veja que não passamos mais o terceiro argumento como string, é o nome da função mesmo, e o quarto argumento é o userdata, qualquer dado que o usuário queira mandar para a função call back, só é possível mandar um userdata, caso queira mandar vários dados use uma tabela e mande a tabela, se não tiver nada para mandar use nulo como argumento.
Novidades:
1 |
ig.conecte_permutado( jan , ig['destruido'] , ig.fimjanela , nulo ); |
Esta função conecta o evento de um componente a uma função call back, e passa o quarto parâmetro como argumento da função call back.
No exemplo acima conectamos o evento fechar(ig.destruido) da janela na função ig.fimjanela que não precisa de argumento por isso o quarto parâmetro da função conecte_permutado foi nulo.
Outro exemplo, conectar o evento clique do botão à função imprima:
1 |
ig.conecte_permutado( bt_exemplo , ig['clique'] , imprima , "Ola Mundo" ); |
E toda vez que clicar no botão a quarto parâmetro (“Ola Mundo”) será passado como argumento para função imprima.
O mesmo que: imprima(“Ola Mundo”);
1 |
ig.conecte_funcao( jan , ig.evento_delete , sair , nulo ) |
conectamos aqui o evento de destruir a janela (fechá-la) à função sair, e como não queremos passar nenhum argumento extra, o quarto parâmetro ficou nulo.
Lembre-se:
ig.conecte = função antiga que executa uma string como terceiro parâmetro.
Atualização:
ig.conecte_permutado = nova função ( a partir de 22-05-2015 ) que executa uma função com o quarto parâmetro como argumento.
ig.conecte_funcao = nova funcao para conectar funções, e passa seu quarto parâmetro como argumento extra da função call back.
————————————————————————————————————————
Veja os tipos de mensagens, botões e retornos possíveis:
//—————————————— tipo de botões para dialogo
ig.botao_ok; ig.botao_sim_nao; ig.botao_cancelar; ig.botao_fechar; ig.botao_nulo; ig.botao_ok_cancelar.
// ——————— tipos de retornos de diálogos
ig.ret_ok; ig.ret_aplicar; ig.ret_cancelar; ig.ret_aceitar; ig.ret_fechar; ig.ret_delete_evento; ig.ret_ajuda;
ig.ret_nao; ig.ret_nulo; ig.ret_rejeitar; ig.ret_sim;
//——————————-tipos de mensagens
ig.msg_informacao; ig.msg_aviso; ig.msg_outro; ig.msg_erro; ig.msg_questao;
Infelizmente, só vou poder postar a atualização dia 22-05-2015, devido ao emprego que toma muito tempo.
Qualquer dúvida deixe seu comentário aqui, ou vá ao fórum prisma clicando aqui.