{"id":3055,"date":"2017-06-14T17:17:37","date_gmt":"2017-06-14T21:17:37","guid":{"rendered":"http:\/\/linguagemprisma.br4.biz\/blog\/?page_id=3055"},"modified":"2018-03-17T20:21:52","modified_gmt":"2018-03-18T00:21:52","slug":"tutorial-interface-grafica-ig-prisma-parte-iv","status":"publish","type":"page","link":"https:\/\/linguagemprisma.br4.biz\/blog\/tutorial-interface-grafica-ig-prisma-parte-iv\/","title":{"rendered":"Tutorial interface gr\u00e1fica IG prisma &#8211; parte IV"},"content":{"rendered":"<h2 style=\"text-align: left;\">p\u00e1ginas: <a href=\"https:\/\/linguagemprisma.br4.biz\/blog\/tutorial-interface-grafica-igprisma\/\">1<\/a> &#8211; <a href=\"https:\/\/linguagemprisma.br4.biz\/blog\/tutorial-interface-grafica-igprisma-ii-parte\/\">2<\/a> &#8211; <a href=\"https:\/\/linguagemprisma.br4.biz\/blog\/componentes-graficos\/\">3<\/a>\u00a0&#8211; <strong>&lt;<a href=\"https:\/\/linguagemprisma.br4.biz\/blog\/tutorial-interface-grafica-ig-prisma-parte-iv\/\">4<\/a>&gt;<\/strong><\/h2>\n<p>&nbsp;<\/p>\n<hr \/>\n<h1><\/h1>\n<h1>Bot\u00f5es de m\u00faltipla escolha<\/h1>\n<p>&nbsp;<\/p>\n<h1>1 &#8211; Bot\u00e3o r\u00e1dio<\/h1>\n<p>Este bot\u00e3o \u00e9 usado em grupos onde \u00e9 necess\u00e1rio o usu\u00e1rio escolher uma op\u00e7\u00e3o dentre v\u00e1rias, veja:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3057\" src=\"https:\/\/linguagemprisma.br4.biz\/blog\/wp-content\/uploads\/2017\/06\/botao_radio1.png\" alt=\"botao_radio1\" width=\"222\" height=\"229\" \/><\/p>\n<p>Salve como bt_radio.prisma<\/p>\n<pre class=\"lang:prisma decode:true\">\/\/exemplo de botoes de multipla opcao (radio buttons)\r\n\/\/note que se preferir nao precisa usar uma funcao principal().\r\n\r\ninclua'igbr' \/\/importando as funcao da biblioteca grafica.\r\n\r\nlocal bt_ok_func; \/\/definindo a fun\u00e7\u00e3o call back como local.\r\nfuncao principal()\r\n\r\n local jan = ig.janela('Escolha uma op\u00e7\u00e3o',220,200);\r\n \r\n ig.conecte_funcao(jan,ig.destruido,ig.fimjanela);\r\n local cv = ig.caixavertical();\r\n ig.ad(jan,cv);\r\n local pergunta = ig.rotulo'Escolha uma op\u00e7\u00e3o:'\r\n ig.caixa_ad(cv, pergunta, falso,falso,0);\r\n ig.caixa_ad(cv,ig.separadorhorizontal(),falso,falso,5);\r\n\r\n \/\/criando os bot\u00f5es:\r\n local a = ig.botao_radio('Primeira op\u00e7\u00e3o');\/\/este \u00e9 o bot\u00e3o base, os outros ser\u00e3o ligados a este.\r\n local b = ig.botao_radio(a,'Segunda op\u00e7\u00e3o'); \r\n local c = ig.botao_radio(a,'Terceira op\u00e7\u00e3o');\r\n \/\/conectando os bot\u00f5es na fun\u00e7\u00e3o bt_func:\r\n ig.conecte_funcao(a,ig.marcado,bt_func,jan);\r\n ig.conecte_funcao(b,ig.marcado,bt_func,jan);\r\n ig.conecte_funcao(c,ig.marcado,bt_func,jan);\r\n \/\/poderia ser uma fun\u00e7\u00e3o diferente para cada bot\u00e3o sem problema.\r\n \r\n \/\/colocando os bot\u00f5es na caixa vertical:\r\n ig.caixa_ad(cv,a,falso,falso,1);\r\n ig.caixa_ad(cv,b,falso,falso,1);\r\n ig.caixa_ad(cv,c,falso,falso,1);\r\n \r\n \r\n ig.componente_mostre_todos(jan);\r\n ig.fimprograma()\r\n retorne 0;\r\nfim \/\/fim principal()\r\n\r\n\/\/funcao call back\r\nfuncao bt_func(bt,jan)\r\n  local txt = ig.botao_obt_rotulo(bt):minuscula();\/\/passa a string para minuscula.  \r\n   se ig.botao_seletor_obt_ativo(bt) == verdadeiro entao\r\n      imprima('Aten\u00e7\u00e3o', 'Voc\u00ea escolheu a ' .. txt); \r\n      ig.msg(jan,'Aten\u00e7\u00e3o', 'Voc\u00ea escolheu a ' .. txt);       \r\n   fim \/\/fim se\r\nfim\r\n\r\n<\/pre>\n<p>(O que j\u00e1 foi explicado anteriormente n\u00e3o ser\u00e1 mencionado aqui)<\/p>\n<p>Vamos aos novos comandos:<\/p>\n<pre class=\"lang:prisma decode:true\">ig.separadorhorizontal()<\/pre>\n<p>A fun\u00e7\u00e3o acima cria um novo separador: uma linha de divis\u00e3o horizontal;<\/p>\n<pre class=\"lang:prisma decode:true\"> ig.caixa_ad(cv,ig.separadorhorizontal(),falso,falso,5);<\/pre>\n<p>Veja, no trecho acima, que nem usamos vari\u00e1vel, passamos a fun\u00e7\u00e3o que cria o separador diretamente como par\u00e2metro da fun\u00e7\u00e3o ig.caixa_ad. Na verdade Prisma executa a fun\u00e7\u00e3o, criando o separador, e s\u00f3 depois passa-o como par\u00e2metro.<\/p>\n<p>Obs.: Existe tamb\u00e9m o separador vertical: ig.separadorvertical();<\/p>\n<pre class=\"lang:prisma decode:true\">local a = ig.botao_radio('Primeira op\u00e7\u00e3o');<\/pre>\n<p>Esta fun\u00e7\u00e3o cria o bot\u00e3o r\u00e1dio e retorna o ponteiro para a vari\u00e1vel. Veja que o primeiro bot\u00e3o r\u00e1dio criado s\u00f3 texto do r\u00f3tulo como par\u00e2metro.<\/p>\n<p>Este \u00e9 o bot\u00e3o r\u00e1dio base, os outros ser\u00e3o ligados a ele, passando-o como primeiro par\u00e2metro antes do r\u00f3tulo, veja:<\/p>\n<pre class=\"lang:prisma decode:true\"> local b = ig.botao_radio(a,'Segunda op\u00e7\u00e3o'); \r\n local c = ig.botao_radio(a,'Terceira op\u00e7\u00e3o');<\/pre>\n<p>Note que o bot\u00e3o base &#8216;a&#8217; foi passado como primeiro par\u00e2metro para os bot\u00f5es &#8216;b&#8217; e &#8216;c&#8217;. Se tiv\u00e9ssemos 100 bot\u00f5es r\u00e1dio, todos os demais passariam o primeiro bot\u00e3o como primeiro par\u00e2metro.<\/p>\n<p><strong>Par\u00e2metros:<\/strong><\/p>\n<ol>\n<li>Texto do bot\u00e3o caso seja o primeiro bot\u00e3o r\u00e1dio criado ou o bot\u00e3o base caso seja do segundo bot\u00e3o em diante.<\/li>\n<li>nulo caso seja o primeiro bot\u00e3o r\u00e1dio ou texto do bot\u00e3o caso seja do segundo em diante.<\/li>\n<\/ol>\n<p><strong>Retorno: bot\u00e3o r\u00e1dio (ponteiro do bot\u00e3o armazenado em vari\u00e1vel Prisma);<\/strong><\/p>\n<p>&nbsp;<\/p>\n<pre class=\"lang:prisma decode:true\">ig.conecte_funcao(a,ig.marcado,bt_func,jan);<\/pre>\n<p>Aqui n\u00f3s conectamos uma fun\u00e7\u00e3o ao evento ig.marcado do bot\u00e3o r\u00e1dio. Deste modo, sempre que este bot\u00e3o for marcado ele executar\u00e1 a fun\u00e7\u00e3o bt_func passando o pr\u00f3prio bot\u00e3o como 1\u00ba argumento e o dado extra como segundo, no caso a janela.<\/p>\n<p>Obs.: poder\u00edamos usar o evento ig.clique tamb\u00e9m. A diferen\u00e7a \u00e9 que no ig.clique a fun\u00e7\u00e3o call back seria executada a cada clique no bot\u00e3o marcado, j\u00e1 no evento ig.marcado a fun\u00e7\u00e3o seria executada apenas uma vez, s\u00f3 podendo ser executada novamente se o bot\u00e3o for desmarcado e depois marcado novamente. Fa\u00e7a o teste, mude uma conex\u00e3o de ig.marcado para ig.clique e veja o resultado.<\/p>\n<hr \/>\n<p>Dentro da callback (lembre-se que call backs s\u00e3o as fun\u00e7\u00f5es conectadas aos componentes ig);<\/p>\n<pre class=\"lang:prisma decode:true\">funcao bt_func(bt,jan)<\/pre>\n<p>Aqui \u00e9 a abertura da fun\u00e7\u00e3o callback bt_func;<\/p>\n<pre class=\"lang:prisma decode:true\">local txt = ig.botao_obt_rotulo(bt):minuscula();<\/pre>\n<p>Pegamos o texto do r\u00f3tulo do bot\u00e3o r\u00e1dio, e em um mesmo comando convertemos em minuscula a string. Prisma executa a primeira fun\u00e7\u00e3o e passa o resultado para a segunda fun\u00e7\u00e3o que tamb\u00e9m \u00e9 executada e seu resultado final \u00e9 gravado na vari\u00e1vel txt.<\/p>\n<p>N\u00e3o se preocupe se o trecho acima ficou meio confuso, apenas saiba que ele faz a mesma coisa que este trecho abaixo, veja:<\/p>\n<pre class=\"lang:prisma decode:true\">local txt = ig.botao_obt_rotulo(bt)\r\ntxt = txt:minuscula();<\/pre>\n<p>Ou ainda:<\/p>\n<pre class=\"lang:prisma decode:true\">local txt = string.minuscula(ig.botao_obt_rotulo(bt));<\/pre>\n<hr \/>\n<p>&nbsp;<\/p>\n<pre class=\"lang:prisma decode:true\">ig.botao_seletor_obt_ativo(bt)<\/pre>\n<p>Esta fun\u00e7\u00e3o retorna falso se o bot\u00e3o estiver desmarcado ou verdadeiro caso esteja marcado.<\/p>\n<p><strong>Par\u00e2metros:<\/strong><\/p>\n<ol>\n<li>bot\u00e3o r\u00e1dio criado anteriormente.<\/li>\n<\/ol>\n<p><strong>retorno: <\/strong><\/p>\n<ol>\n<li><strong>verdadeiro ou falso.<\/strong><\/li>\n<\/ol>\n<p><em>Obs.: note que a fun\u00e7\u00e3o \u00e9 botao_seletor_obt_ativo e n\u00e3o botao_radio_obt_ativo. Isso \u00e9 porque h\u00e1 v\u00e1rios tipos de bot\u00f5es seletores, o bot\u00e3o r\u00e1dio \u00e9 um deles, e ao inv\u00e9s de criar fun\u00e7\u00f5es para cada tipo de bot\u00e3o r\u00e1dio, criamos uma mesma fun\u00e7\u00e3o que serve para todos eles. J\u00e1 que a fun\u00e7\u00e3o \u00e9 a mesma para todos os tipos.<\/em><\/p>\n<pre class=\"lang:prisma decode:true\">   se ig.botao_seletor_obt_ativo(bt) == verdadeiro entao\r\n      imprima('Aten\u00e7\u00e3o', 'Voc\u00ea escolheu a ' .. txt); \r\n      ig.msg(jan,'Aten\u00e7\u00e3o', 'Voc\u00ea escolheu a ' .. txt);       \r\n   fim \/\/fim se<\/pre>\n<p>Acima, temos o la\u00e7o condicional &#8216;se&#8217; para exibir a devida mensagem do bot\u00e3o marcado.<\/p>\n<p>O resultado \u00e9 este:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3060\" src=\"https:\/\/linguagemprisma.br4.biz\/blog\/wp-content\/uploads\/2017\/06\/bt_radio2.png\" alt=\"bt_radio2\" width=\"278\" height=\"155\" \/><\/p>\n<hr \/>\n<p>&nbsp;<\/p>\n<h1>Outro exemplo de bot\u00e3o r\u00e1dio<\/h1>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3061\" src=\"https:\/\/linguagemprisma.br4.biz\/blog\/wp-content\/uploads\/2017\/06\/botao_radio02.png\" alt=\"botao_radio02\" width=\"242\" height=\"229\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>Salve como bt_radio2.prisma<\/p>\n<pre class=\"lang:prisma decode:true \">\/\/exemplo de botoes de multipla opcao (radio buttons)\r\n\/\/note que se preferir nao precisa usar uma funcao principal().\r\n\r\ninclua'igbr' \/\/importando as funcao da biblioteca grafica.\r\n\r\nlocal bt_ok_func; \/\/definindo a fun\u00e7\u00e3o call back como local.\r\nfuncao principal()\r\n\r\n local jan = ig.janela('Escolha uma op\u00e7\u00e3o', 240 , 190);\r\n ig.janela_def_posicao(jan,ig.JANELA_POS_CENTRO);\r\n ig.caixa_def_borda_largura(jan,10);\r\n ig.conecte_funcao(jan,ig.destruido,ig.fimjanela);\r\n local cv = ig.caixavertical();\r\n ig.ad(jan,cv);\r\n local pergunta = ig.rotulo'Quanto \u00e9 9 x 7?'\r\n ig.componente_modifique_fonte(pergunta,'Arial',ig.NEGRITO,22);\r\n ig.caixa_ad(cv, pergunta, falso,falso,0);\r\n ig.caixa_ad(cv,ig.separadorhorizontal(),falso,falso,5);\r\n\r\n \/\/criando os bot\u00f5es:\r\n local a = ig.botao_radio(' 54');\/\/este \u00e9 o bot\u00e3o base, os outros ser\u00e3o ligados a este.\r\n local b = ig.botao_radio(a,' 48'); \r\n local c = ig.botao_radio(a,' 72');\r\n local d = ig.botao_radio(a,' 63');\r\n \r\n ig.botao_seletor_def_ativo(a,falso);\r\n \r\n ig.caixa_ad(cv,a,falso,falso,1);\r\n ig.caixa_ad(cv,b,falso,falso,1);\r\n ig.caixa_ad(cv,c,falso,falso,1);\r\n ig.caixa_ad(cv,d,falso,falso,1);\r\n \r\n local bt_ok = ig.botao_estoque(ig.ESTOQUE_OK);\r\n ig.caixa_ad(cv,bt_ok,falso,falso,1);\r\n local dados = {jan=jan,a=a,b=b,c=c,d=d}; \/\/criando uma tabela com todos os botoes radios e a janela\r\n \/\/para passarmos como argumento extra para callback\r\n ig.conecte_funcao(bt_ok,ig.clique,bt_ok_func, dados); \r\n \r\n ig.componente_mostre_todos(jan);\r\n ig.fimprograma()\r\n retorne 0;\r\nfim \/\/fim principal()\r\n\r\n\/\/funcao call back\r\nfuncao bt_ok_func(bt,dados)\r\n  \/\/a resposta certa \u00e9 a 'd'\r\n  se ig.botao_seletor_obt_ativo(dados.d) entao\r\n    ig.msg(dados.jan,'Parab\u00e9ns',\"Resposta correta!!!\");\r\n  senao\r\n    ig.msg(dados.jan,'Aten\u00e7\u00e3o',\"#################\\nResposta errada!\\n#################\");\r\n  fim\r\nfim\r\n\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>N\u00e3o h\u00e1 novidades neste outro exemplo, expliquei tudo no primeiro, apenas execute-o e veja o resultado, mude os valores para compreender melhor o seu funcionamento.<\/p>\n<p>&nbsp;<\/p>\n<h1><span style=\"color: #ff0000;\">Continua&#8230;<\/span><\/h1>\n<h2 style=\"text-align: left;\">p\u00e1ginas: <a href=\"https:\/\/linguagemprisma.br4.biz\/blog\/tutorial-interface-grafica-igprisma\/\">1<\/a> &#8211; <a href=\"https:\/\/linguagemprisma.br4.biz\/blog\/tutorial-interface-grafica-igprisma-ii-parte\/\">2<\/a> &#8211; <a href=\"https:\/\/linguagemprisma.br4.biz\/blog\/componentes-graficos\/\">3<\/a>\u00a0&#8211; <strong>&lt;<a href=\"https:\/\/linguagemprisma.br4.biz\/blog\/tutorial-interface-grafica-ig-prisma-parte-iv\/\">4<\/a>&gt;<\/strong><\/h2>\n","protected":false},"excerpt":{"rendered":"<p>p\u00e1ginas: 1 &#8211; 2 &#8211; 3\u00a0&#8211; &lt;4&gt; &nbsp; Bot\u00f5es de m\u00faltipla escolha &nbsp; 1 &#8211; Bot\u00e3o r\u00e1dio Este bot\u00e3o \u00e9 usado em grupos onde \u00e9 necess\u00e1rio o usu\u00e1rio escolher uma op\u00e7\u00e3o dentre v\u00e1rias, veja: Salve como bt_radio.prisma \/\/exemplo de botoes de multipla opcao (radio buttons) \/\/note que se preferir nao precisa usar uma funcao principal()&#8230;.<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"tpl-full-width.php","meta":{"footnotes":""},"class_list":["post-3055","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/pages\/3055","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/comments?post=3055"}],"version-history":[{"count":5,"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/pages\/3055\/revisions"}],"predecessor-version":[{"id":3207,"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/pages\/3055\/revisions\/3207"}],"wp:attachment":[{"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/media?parent=3055"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}