Muitas vezes, uma boa opção é dividir um programa em módulos (biblitotecas/libs) que podem ser acessadas por qualquer outro programa prisma. Isso diminui a complexidade de um grande projeto. Módulos ou bibliotecas são arquivos que contém funções para ser compartilhadas pelos programas que as chamam. Os módulos podem ser acessados com o comando inclua’nome’;…
Continue readingMonth: maio 2015
Leitura e Escrita em Arquivos
Veja que é muito simples abrir, ler ou escrever em um arquivo. Vamos usar a biblioteca padrão de entrada e saída ‘es’. Primeiro a leitura linha a linha (troque o nome do arquivo por um de seu computador);
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
matriz = { }; i = 0; arquivo = es.abra( "caminho_nome_arquivo.extensao" , "leitura" ); //abre em modo leitura enquanto verdadeiro inicio //laco enquanto infinito i = i + 1; matriz[cont] = arquivo:leia(); se matriz[cont] == nulo entao quebre fim //interrompe o laco enquanto fim //fim enquanto arquivo:feche() ; //nao esqueca de fechar o objeto aberto, ok. para i = 1 , #matriz inicio //para i igual a 1 repita até o tamanho da matriz imprima ( matriz[i] ); fim //fim para |
Se você quiser ler todo o arquivo em uma única variável basta fazer o seguinte:…
Continue readingDiálogo mensagem de erro
Simples exemplo de dialogo para exibir uma mensagem de erro, veja: Saída em Ubuntu 14.04
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 |
// dialogo erro exemplo inclua'igbr'; funcao mostre_erro( comp , janela) //na call back mesmo sem usar é necessário definir os parametros componente e userdata para evitar erros //criando o diálogo mensagem; dialogo = ig.dialogo_mensagem( janela , //componente pai 'Erro', //titulo 'erro ao carregar arquivo' , //texto ig.msg_erro , //tipo de mensagem --> erro ig.botao_ok //tipo de botao --> ok ); x = ig.dialogo_execute( dialogo ); ig.componente_destrua( dialogo ); fim janela = ig.janela('msg erro' , 300 , 200 ); //criando a janela ig.janela_def_posicao ( janela , ig.janela_pos_mouse ); //posicionando a janela onde estiver o mouse fixo = ig.fixo( ); //criando uma caixa fixa ig.ad( janela , fixo); //colocando a caixa na janela botao = ig.botao_estoque( 'ok' ); //criando o botao ok ig.fixo_ad( fixo , botao , 10 , 20 ); // colocando o botao ok na caixa fixa na posicao coluna 10 por linha 20 ig.conecte_funcao ( botao , ig.clique , mostre_erro , janela ); //conectando a funcao mostre_erro no clique do botao ig.componente_mostre_todos(janela); //mostrando a janela e seus componentes filhos ig.janela_destrua(janela); //comando necessário para fechar adequadamente // a janela, nunca o esqueca, só para janela principal ig.fimprograma(); //este comando sempre tem que estar no final do programa, //ele inicia o laco de eventos. |
O programa é bem simples e fácil, mas qualquer dúvida deixe nos comentários ou vá ao fórum.
Continue readingArgumentos externos ao programa (argv do C, args do Java);
Muitos programas podem receber argumentos ao serem executados, ‘strings’ ou números. Ex.: ao executar no terminal ou no sis.execute ‘comando’ do Prisma o comando a seguir: firefox http://linguagemprisma.net O navegador será aberto na página linguagemprisma.net, pois foi passado para ele esse argumento na sua chamada. Isso acontece com inúmeros programas, como editores, gravadores,…
Continue readingDeseja fechar programa?
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…
Continue readingDialogo simples para abrir arquivos
Esse é um modo de fazer um dialogo para selecionar arquivos bem simples, o comando é ig.dialogo_abrir(); Segue o código comentado:
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 |
inclua 'igbr' janela = ig.janela'Teste Dialogo abrir'; ig.janela_def_tamanho_padrao( janela , 400 , 200 ); ig.janela_def_posicao( janela , ig.janela_pos_centro ); ig.botao_mostre_imagem(verdadeiro); //mostra as imagens em botoes botao = ig.botao_estoque( ig.estoque'open' ); //criando um botao a partir do estoque ig.ad ( janela , botao ); funcao abrir_arquivo() result = ig.dialogo_abrir(); //dialogo de selecao de arquivo se result == ig.ret_cancelar entao //testando o resultdo ig.msg(janela , 'Dialogo' , 'cancelado' ); senaose result == ig.ret_fechar entao ig.msg(janela , 'Dialogo' , 'fechado' ); senao ig.msg( janela , 'Aquivo' , result ); fim //fim se fim //fim funcao ig.conecte( botao , ig.clique , 'abrir_arquivo()' ); ig.janela_destrua(janela); ig.componente_mostre_todos( janela ); ig.fimprograma(); |
Veja a sintaxe: result = ig.dialogo_abrir(); O retorno pode ser ig.ret_cancelar, ig.ret_fechar ou o (s) arquivo (s) aberto (s); Troque este comando para: ig.dialogo_salvar() ou ig.dialogo_pasta(); E veja os resultados….
Continue readingEditor de código fonte simples
Neste exemplo você verá como usar o comando ig.codigo_area_com_buffer para criar um simples editor. Simples mas você poderá acrescentar detalhes como diálogos abrir e salvar arquivos, abas etc. dependendo da criatividade. Segue o código comentado, bons estudos:
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 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
// editor 1 inclua 'igbr' // incluindo a biblioteca gráfica igbr funcao abrir_arquivo( sBuf , filename ) //funcao que abre o arquivo, transfere para uma string e insere na area de texto do editor se sBuf == nulo entao retorne falso fim //sBuf é o buffer uma espécie de container invisível para todo o texto. É através do buffer que mudamos o texto se filename == nulo entao retorne falso fim // filename é o nome do arquivo passado como argumento. se ig.codigo_buffer_sim( sBuf ) == falso entao retorne falso fim //funcao retorna verdadeiro se a variável for um buffer válido local lm = ig.objeto_obt_dado( sBuf , 'gerenciador-linguagem' ); //obtendo o dado que foi passado ao buffer pelo comando ig.objeto_def_dado // ig.codigo_linguagem_def_pasta( lm, "lang/language-specs" ); //use esta funcao caso os arquivos de configuracao dos fontes estejam em pasta diferente linguagem = ig.codigo_gerenciador_linguagem_obt_linguagem (lm, "prismabr"); //criando o colorizador, o primeiro parametro é o gerenciador de linguagem, o segundo é o nome do id do arquivo de configuração, no nosso caso é de prisma br imprima( string.formate( "Language: [%s]\n", ig.codigo_linguagem_obt_nome(linguagem) //usando a funcao para obter o nome da linguagem do arquivo de configuração. ) ); se linguagem == nulo entao //caso não encontre o arquivo válido de linguagem retorna erro imprima( string.formate( "Nenhuma linguagem encontrada para este tipo: `%s'\n", "text/x-csrc") ); senao // this is highlighter para C definied above ig.codigo_buffer_def_linguagem( sBuf, linguagem); // caso encontre, defina como padrao de colorização dos comandos fim //processo de abertura, leitura e carregamento do texto do arquivo fonte no editor file = es.abra(filename , 'leitura' ); //funcao prisma que abre um arquivo, 'modo leitura' se file == nulo entao text = "imprima('Ola mundo em Prisma!')";//se não abrir o arquivo o texto será esse senao text = file:leia('*t' ); // "*t" faz com que leia todo o texto do arquivo de uma só vez e armazene na variavel text file:feche(); //fechando o arquivo para disponibilizar o texto. fim ig.texto_buffer_def_texto ( sBuf, text , #text ); //colocando o texto no buffer, parametros: buffer , texto , tamanho do texto; ig.texto_area_def_buffer( codigo_area, sBuf); //enfim colocando o buffer com o texto no editor, o texto ficará visível no editor. fim //fim da funcao abrir_arquivo ///criando a janela e os componentes: janela = ig.janela("Example ig source view", 660 , 500); //criando a janela com titulo, largura e altura ig.janela_destrua( janela ); //nunca esqueca esse comando, ele faz com que o programa feche quando a janela é fechada, se seu programa tiver várias janela, só faça isso com a janela principal, senão ao fechar uma janela secundária o programa será fechado junto. ig.caixa_def_borda_largura( janela , 15 ); //a largura da borda interna da janela. jan_rolagem = ig.janela_rolagem( nulo , nulo ); //criando uma caixa de rolagem, chamada janela rolagem em igbr ig.janela_rolagem_def_policiamento( jan_rolagem, ig.polic_automatico , ig.polic_automatico ); //policiamento das barras de rolagem, tudo automatico. lm = ig.codigo_gerenciador_linguagem(); //criando o gerenciador de linguagem para criar a coloração dos comandos buffer = ig.codigo_buffer (); //criando o buffer, é necessário pois colocamos e modificamos o texto no buffer, e ele é posto no editor // ig.objet_ref(lm); ig.objeto_def_dado( buffer, 'gerenciador-linguagem' , lm ); //esta funcao serve para armazenar um dado em um componente, //o primeiro parametro é o componente, o segundo é o apelido para resgatar o dado, e o terceiro é o dado. codigo_area = ig.codigo_area_com_buffer( buffer ); //criando a area do código ig.codigo_area_def_mostre_numero_linhas( codigo_area, verdadeiro); //criando uma descricao de fonte para definir a fonte do editor font_dec = ig.fonte_descricao_string( "Courier 10 Pitch", ig.regular, 12 ); //sempre na sequencia nomefonte, modo[italico,negrito ou regular] , por último sempre o tamanho. ig.componente_modifique_fonte( codigo_area, font_dec ); //modificando a fonte com a descrição criada acima ig.ad( jan_rolagem, codigo_area); //adicionando o editor (codigo area ) na caixa de rolagem ig.ad( janela, jan_rolagem); //adicionando caixa de rolagem na janela. ig.componente_mostre_todos( janela ); //mostrando a janela e seus componentes abrir_arquivo( buffer, 'editor.prisma'); //passando o buffer e o nome do arquivo a ser aberto no editor ig.fimprograma(); //inicia o laco de eventos, deve ser sempre o ultimo comando do programa |
Copie, salve como editor.prisma, execute com o Geany ou Prismacod e ele abrirá seu próprio código….
Continue readingAbas com botão ‘fechar aba’
Novo exemplo de como usar abas, mas desta vez com botão fechar na orelha da aba:
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 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 |
//abas , chamado de notebooks em gtk, e suas pages //by Adalberto inclua'igbr' janela = ig.janela 'Exemplo de Abas em ig'; ig.conecte( janela , ig [ 'destruido' ] , 'ig.fimjanela ( )' ); //nunca se esqueça desse comando ig.janela_def_tamanho_padrao ( janela , 400 , 200 ); //definindo um tamanho padrao para a janela ig.janela_def_posicao( janela , ig.jan_pos_mouse ); //coordenada da janela no monitor //não confunda com a função ig.janela_def_posicao //criando as abas: abas = ig.abas ( ); //definindo a posicao das abas (orelhas) /** os seguintes argumentos são aceitos: ig.pos_superior ; ig.pos_inferior ; ig.pos_esquerda ; ig.pos_direita . // ** ig.abas_def_aba_posicao ( abas , ig.pos_superior ); //colocando as abas na janela ig.ad ( janela , abas ); caixav = ig.caixavertical(falso , 0 ); //caixa vertical para o corpo da aba caixah = ig.caixahorizontal(falso , 0 ); //caixa horiz. para a orelha da aba; rot = ig.rotulo('Minha Primeira Aba'); ig.caixa_ad( caixah , rot , verdadeiro , verdadeiro, 0 ); bt = ig.botao'X'; ig.ad( caixah , bt ); funcao fecheaba (ab ) id_pag = ig.abas_obt_pagina_atual(ab) ig.abas_pagina_remova( abas , id_pag ); fim ig.conecte( bt , ig.clique , 'fecheaba(abas)' ); ig.componente_mostre_todos(caixah); //necessário mostrar a caixa para ser visível na orelha ig.abas_anexe ( abas , caixav , caixah ); //anexando abas caixav2 = ig.caixavertical(falso , 0 ); caixah = ig.caixahorizontal(falso , 0 ); //caixa horiz. para a orelha da aba; rot = ig.rotulo('Minha Segunda Aba'); ig.caixa_ad( caixah , rot , verdadeiro , verdadeiro, 0 ); bt = ig.botao'X'; ig.ad( caixah , bt ); ig.conecte( bt , ig.clique , 'fecheaba (abas)' ); ig.componente_mostre_todos(caixah); //necessário mostrar a caixa para ser visível na orelha ig.abas_anexe ( abas , caixav2 , caixah ); botao = ig.botao'ok' ; ig.componente_def_dica_markup ( botao , '<b>this button</b><i> shows one msg</i>'); ig.conecte ( botao , ig [ 'clique' ] , 'ig.msg(janela , "titulo" , "Esta é uma mensagem" )' ); txt = ig.texto_area ( ); ig.componente_def_dica_texto ( txt , 'Ola, esta é uma área de texto, digite algo nela'); buff = ig.texto_area_obt_buffer ( txt ); conteudo_texto = 'Ola texto area aqui' ig.texto_buffer_def_texto ( buff , conteudo_texto , #conteudo_texto ); ig.texto_area_def_texto( txt , 'Ola todo mundo'); ig.caixa_ad ( caixav , botao , falso , falso , 2 ); //colocando o botao na caixa vertical //os parâmetros da função acima já foi explicado anteriormente ig.caixa_ad ( caixav , txt , verdadeiro , verdadeiro , 2 ) ; //colocamos verdadeiro pois queremos que a area de texto ocupe o restante da caixa bt_oculte_aba = ig.botao( 'esconder abas'); ig.componente_def_dica_texto ( bt_oculte_aba , 'este botao oculta ou mostra as abas' ); ig.ad ( caixav2 , bt_oculte_aba ) ; //colocando o botao na caixa 2 que está na segunda pagina das abas funcao mostre_abas ( botao , abas ) local txt_bt = ig.botao_obt_rotulo( botao ); se txt_bt == 'esconder abas' entao txt_bt = 'mostrar abas' senao txt_bt = 'esconder abas' fim ig.botao_def_rotulo( botao , txt_bt ); aval =falso; bval = falso; se ig.abas_obt_aba_visivel ( abas ) == falso entao aval = verdadeiro fim se ig.abas_obt_borda_visivel ( abas ) == falso entao bval = verdadeiro; fim ig.abas_def_aba_visivel ( abas , aval ); ig.abas_def_borda_visivel ( abas , bval ); fim //fim funcao ig.conecte( bt_oculte_aba , ig ['clique'] , 'mostre_abas ( %s , abas ) ' ); //conectando a funcao ao botao // o %s é o proprio botao conectado sendo passado como argumento. ig.componente_mostre_todos( janela ); ig.fimprograma(); |
veja outras funções úteis para manipular as abas entenda notebook como a caixa onde são anexada as abas, em portugues traduzi como abas, mas ficou estranho dizer colocar uma aba dentro da aba; entao chamaremos…
Continue reading