Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Nevis

[Resolvido] Manipulação de Check Box + Radio Button

Recommended Posts

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

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.