Nevis 0 Denunciar post Postado Abril 14, 2009 Boa noite pessoal. Sou iniciante em delphi e estou fazendo um Jogo onde resumindo, terá 3 forms: Principal, JogadorXComputador e ComputadorXJogador e será dividido em níveis de perguntas: Fácil, Médio e Difícil. Na tela principal eu gostaria de colocar todas as opções como radio buttons(Jogador X Computador, Computador X Jogador, Fácil, Médio e Difícil), porém não consigo marcar mais de um radio button por vez. Teria como? Deixei de lado e troquei os radio buttons de JogadorXComputador e ComputadorXJogador por checkbox, porém estou tendo problemas na verificação do checked deles. Eu quero que quando selecionado o JogadorXComputador abra o form de JogadorXComputador e o mesmo vale para ComputadorXJogador. Também quero verificar se nenhum dos dois estão marcados aparecer a mensagem 'Selecione pelo menos um modo de jogo' e se as duas estiverem marcadas 'Selecione apenas um modo de jogo'. O código é o seguinte: procedure TfrmPrincipal.btnJogarClick(Sender: TObject); begin if chkJogador.Checked = false and chkComputador.Checked = false then SHowMessage('Escolha pelo menos um modo de jogo!') else if chkJogador.Checked = true and chkComputador.Checked = true then ShowMessage('Escolha somente um modo de jogo!'); end; begin if chkJogador.Checked = true then frmJogador.ShowModal else if chkComputador.Checked = true then frmComputador.ShowModal; end; end. Porém ele dá esse erro [Error] UnitPrincipal.pas(49): Undeclared identifier. 'chkJogador' logo após o segundo begin. Acredito que esse seja um erro de iniciante mesmo. Minha impressão é que o delphi diz que não declarei o chkJogador, mas eu acabei de tratar ele lá em cima... Não entendi o que significa esse erro. Poderiam fazer a gentileza de me ajudar? Obrigado desde já. Compartilhar este post Link para o post Compartilhar em outros sites
Chrnos 30 Denunciar post Postado Abril 14, 2009 Bom, vamos lá... quanto a sua primeira dúvida, radiobuttons são usados para forçar o usuário a escolher apenas uma opção válida da lista de opções que disponibilizou a ele... no caso, por ter duas opções distintas (Jogador X Computador, Computador X Jogador) e (Fácil, Médio e Difícil), você poderia por na sua tela dois radiogroups para por estas opções, e ai só precisaria testar o ItemIndex do componente para saber o que o usuário selecionou (começando sempre por 0 como o primeiro item do RadioGroup). Agora, já que está usando checkboxes, o teste é mais simples... contudo, você terá que testar ou programar cada checkbox para que as escolhas feitas não invalidem as outras. Por exemplo, você não pode permitir que o jogador marque todos os níveis de dificuldade para um jogo ao mesmo tempo não é? Neste caso, você teria que por no evento onclick do checkbox de seleção de nível de dificuldade um evento que desmarque as opções diferentes daquele nivel selecionado... isso para cada checkbox. Partindo da premissa que você já faça este controle, vamos ao seu segundo problema... seu erro está em ter posto um end; em lugar indevido... sua procedure deveria estar assim: procedure TfrmPrincipal.btnJogarClick(Sender: TObject); begin if chkJogador.Checked = false and chkComputador.Checked = false then begin ShowMessage('Escolha pelo menos um modo de jogo!'); exit; //Forçar a sair da rotina, ou vai executar os ifs após o else end else if chkJogador.Checked = true and chkComputador.Checked = true then begin ShowMessage('Escolha somente um modo de jogo!'); exit; //Forçar a sair da rotina, ou vai executar o teste abaixo end; if chkJogador.Checked = true then frmJogador.ShowModal else if chkComputador.Checked = true then frmComputador.ShowModal; end; []'s Compartilhar este post Link para o post Compartilhar em outros sites
Nevis 0 Denunciar post Postado Maio 9, 2009 Bom dia, chrnos, copiei o seu código e executei, está quase o que é necessário mas não o suficiente. O que eu gostaria é que quando nenhuma das duas checkbox estivessem marcadas, mostrar a mensagem "Escolher pelo menos um modo de jogo", quando as duas estiverem marcadas mostrar a mensagem "Escolher apenas um modo de jogo", e quando somente uma das check's estiverem marcadas mostrar seus respectivos formularios. O seu codigo valida quase todas as premissas, somente da erro quando eu marco somente a primeira opcao ele aparece a mensagem "Escolha pelo menos um modo"(que nao deveria aparecer, e sim mostrar o formulario direto) e não mostra o formulario. Tentei alterar a ordem das validações e também inserir um if dentro de outro mas complicou mais ainda. Poderia me ajudar novamente? Obrigado desde já. Compartilhar este post Link para o post Compartilhar em outros sites
Chrnos 30 Denunciar post Postado Maio 9, 2009 Não sei dizer agora o porque, mas o Delphi não validou corretamente o primeiro if sem por os testes entre parênteses... tente assim: procedure TForm1.Button1Click(Sender: TObject); begin if (chkJogador.Checked = false) and (chkComputador.Checked = false) then begin ShowMessage('Escolha pelo menos um modo de jogo!'); exit; //Forçar a sair da rotina, ou vai executar os ifs após o else end else if (chkJogador.Checked = true) and (chkComputador.Checked = true) then begin ShowMessage('Escolha somente um modo de jogo!'); exit; //Forçar a sair da rotina, ou vai executar o teste abaixo end; if chkJogador.Checked = true then showmessage('Jogador selecionado') // --frmJogador.ShowModal else if chkComputador.Checked = true then // frmComputador.ShowModal; showmessage('Computador selecionado') end; Compartilhar este post Link para o post Compartilhar em outros sites
Nevis 0 Denunciar post Postado Maio 19, 2009 Perfeito chrnos. Dava erro pela ausência dos parênteses. Foi a parte que estava mais me batendo. Obrigado. Compartilhar este post Link para o post Compartilhar em outros sites