Ir para conteúdo
Fórum Script Brasil
  • 0

Ambiente Gráfico


Guest --Leonardo --

Pergunta

Guest --Leonardo --

Ola a todos! Tenho um trabalho de fazer menu gráfico, mas surgiu um obstáculo e espero que me ajudem a resolve-lo.

Uso Borland C++ 5.02 e fiz o senguinte código:

#include <conio.h>
#include <graphics.h>
#include <stdio.h>    // Inclusão de bibliotecas
#include <stdlib.h>
#include <iostream.h>

void funcao1();
void funcao2(); // declarei estas funções mas ainda não as implementei, primeiro tentei fazer o menu que é o objetivo do trabalho
void sair();

void main()
{
   char menu[]=".:: Menu Principal ::.", ch;
   char entrada;
   int valor, tamanho_letra, centralizar;

   int gdriver = DETECT, gmode, errorcode; // faz a auto-detecção do adaptador grafico, modo grafico
   initgraph(&gdriver, &gmode, "bgi\\");   // inicia o ambiente grafico

   errorcode = graphresult(); // recebe o resultado do ambiente grafico para verificação de erros
   if (errorcode != grOk) {  // em caso de erro, o programa é finalizado
      printf("Graphics error: %s\n", grapherrormsg(errorcode));

      printf("Press any key to halt:");
      getch();
      exit(1);
   }


   valor = textwidth(menu); // valor recebe o tamanho da string menu
   tamanho_letra = textheight("H"); // tamanho_letra recebe, como deve ser obvio, o tamanho de uma letra maiúscula

   centralizar = (getmaxx() - valor)/2;
   setfillstyle(1,2);
   bar(0,0,getmaxx(),6+tamanho_letra);
   outtextxy(centralizar, 6, menu); // Escreve menu na tela

   outtextxy(30,30, "1: Funcao 1");
   outtextxy(30,35+tamanho_letra, "2: Funcao 2");
   outtextxy(30,40+(2*tamanho_letra), "3: Sair");

   while(1) // Um laço infinito
   {
      ch = getche(); // ch recebe a opção digitada pelo usuário
      if(ch == '1') // se ch for igual a 1, a opção 1 é selecionada e as demais ficam normais
      {
           setfillstyle(1,10);
         bar(0,28,getmaxx(),32+tamanho_letra);
         setcolor(BLACK);
         outtextxy(30,30, "1: Funcao 1");

         setfillstyle(1,0);
         bar(0,33+tamanho_letra,getmaxx(),37+(2*tamanho_letra));
         setcolor(WHITE);
         outtextxy(30,35+tamanho_letra, "2: Funcao 2");

         setfillstyle(1,0);
         bar(0,38+(2*tamanho_letra),getmaxx(),42+(3*tamanho_letra));
         setcolor(WHITE);
         outtextxy(30,40+(2*tamanho_letra), "3: Sair");

         //entrada = getche();
         //if(entrada == 'ENTER')
             //{funcao1();}
      }

      else if(ch == '2') // se ch for igual a 2, a opção 2 é selecionada e as demais ficam normais
      {
           setfillstyle(1,0);
         bar(0,28,getmaxx(),32+tamanho_letra);
         setcolor(WHITE);
         outtextxy(30,30, "1: Funcao 1");

         setfillstyle(1,10);
         bar(0,33+tamanho_letra,getmaxx(),37+(2*tamanho_letra));
         setcolor(BLACK);
         outtextxy(30,35+tamanho_letra, "2: Funcao 2");

         setfillstyle(1,0);
         bar(0,38+(2*tamanho_letra),getmaxx(),42+(3*tamanho_letra));
         setcolor(WHITE);
         outtextxy(30,40+(2*tamanho_letra), "3: Sair");

         //entrada = getche();
         //if(entrada == 'ENTER') // Isso está errado, é aqui que gostaria de fazer a detecção do ENTER
             //{funcao2();}
      }

      else if(ch == '3') // se ch for igual a 3, a opção 3 é selecionada e as demais ficam normais
      {
           setfillstyle(1,0);
         bar(0,28,getmaxx(),32+tamanho_letra);
         setcolor(WHITE);
         outtextxy(30,30, "1: Funcao 1");

         setfillstyle(1,0);
         bar(0,33+tamanho_letra,getmaxx(),37+(2*tamanho_letra));
         setcolor(WHITE);
         outtextxy(30,35+tamanho_letra, "2: Funcao 2");

         setfillstyle(1,10);
         bar(0,38+(2*tamanho_letra),getmaxx(),42+(3*tamanho_letra));
         setcolor(BLACK);
         outtextxy(30,40+(2*tamanho_letra), "3: Sair");

         //entrada = getche();
         //if(entrada == 'ENTER')
             //{sair();}

          getch();
         closegraph();
      }
  }
}

Ele detecta quando o usuário digita os numeros: 1, 2 e 3. Mas como posso fazer a detecção do enter para acessar as funções?

Pensei na tabela ASCII como solução, mas não entendi como utiliza-la.

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0
Guest --Leonardo --

Consegui fazer a detecção do ENTER...

Na tabela ASCII, enter é representado por 13.

como getche() retorna um inteiro, entrada deve ser declarada como int e não como char como eu fiz!

Então fica:

...
entrada = getche();
if(entrada == 13)
      {funcao1();}
...

Mas agora tem outro problema, quando acessa a funcao1(), esta não está sendo executada corretamente. Aparece um erro da biblioteca BGI.

Link para o comentário
Compartilhar em outros sites

  • 0
Mas agora tem outro problema, quando acessa a funcao1(), esta não está sendo executada corretamente. Aparece um erro da biblioteca BGI.

Seria interessante que você colocasse a mensagem de erro original e o código que é executado na função1. Do contrário, fica difícil alguém dar um palpite. ;)

Abraços

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...