• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

ApolloPT

[Visual C++] (Problema) Timers

5 mensagens neste tópico

Olá a todos,

Ando a fazer um trabalho para uma disciplina de programação e deparei-me com um problema ao qual não arranjo explicação e espero aqui que algum de vocês me ajude pois já esgotei todas as minhas tentativas àcerca do assunto  :P!

Isto é, quero que o timer devolva um valor inteiro que possa ser usado dentro de um botão mais precisamente que o timer comece dentro ao clicar no botão e que gere uma imagem aleatória e que permita usar o valor da variavel aleatória dentro do botão fora do timer, pelo código que lhe meti era suposto ter feito isto tudo ( é a primeira vez que estou a usar timers mas está tudo no lugar só se falta alguma coisa! ), mas o que faz na realidade é que ao clicar-mos mostra a imagem mas a variavel que contém o valor que vai ser introduzido na estrutura de repetição ( if ) dentro do timer para escolher a imagem não deixa passar a variavel para fora mais precisamente dentro do botão a tempo real, isto é, só aparece a seguir o valor do clique anterior andado assim atrasado a mostrar o valor atribuido a variavel no clique anterior e a veriavel está declarada em private para todos os objectos timer e button terem acesso a essa variavel com o valor aleatório!

P.S. Se for necessário forneço o código para ajudar!

Aguardo resposta,

ApolloPT

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

P.S. Se for necessário forneço o código para ajudar!

Agradeço que o faças. Não consegui acompanhar a tua explicação, mas com código pode ser que consiga. :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites


#pragma endregion
private:
int alias, alias1, alias2;
private: System::Void Form1_Load(System::Object^  sender, System::EventArgs^  e) {

		 alias=0;
		 alias1=0;
		 alias2=0;

		 }
private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {

	timer1->Enabled=true;
	timer1->Start();

	timer2->Enabled=true;
	timer2->Start();

	timer3->Enabled=true;
	timer3->Start();

textBox4->Text=Convert::ToString(alias);
textBox5->Text=Convert::ToString(alias1);
textBox6->Text=Convert::ToString(alias2);
}
private: System::Void timer1_Tick(System::Object^  sender, System::EventArgs^  e) {


			DateTime n = DateTime::Now;
			Random^i=gcnew Random(n.Millisecond);

			alias = i->Next(10)+1;

			timer1->Enabled=false;

			if (alias==1){
				pictureBox1->Image=Drawing::Image::FromFile("C:\\projecto\\img\\ananas.png");

			}
			else if (alias==2){
				pictureBox1->Image=Drawing::Image::FromFile("C:\\projecto\\img\\banana.png");

			}
			else if (alias==3){
				pictureBox1->Image=Drawing::Image::FromFile("C:\\projecto\\img\\cenoura.png");

			}
			else if (alias==4){
				pictureBox1->Image=Drawing::Image::FromFile("C:\\projecto\\img\\cereja.png");

			}
			else if (alias==5){
				pictureBox1->Image=Drawing::Image::FromFile("C:\\projecto\\img\\couve.png");

			}
			else if (alias==6){
				pictureBox1->Image=Drawing::Image::FromFile("C:\\projecto\\img\\ervilhas.png");

			}
			else if (alias==7){
				pictureBox1->Image=Drawing::Image::FromFile("C:\\projecto\\img\\laranja.png");

			}
			else if (alias==8){
				pictureBox1->Image=Drawing::Image::FromFile("C:\\projecto\\img\\nabo.png");

			}
			else if (alias==9){
				pictureBox1->Image=Drawing::Image::FromFile("C:\\projecto\\img\\noz.png");

			}
			else if (alias==10){
				pictureBox1->Image=Drawing::Image::FromFile("C:\\projecto\\img\\uvas.png");

			}
			textBox1->Text=Convert::ToString(alias);


	 }
private: System::Void timer2_Tick(System::Object^  sender, System::EventArgs^  e) {

		 DateTime n = DateTime::Now;
			Random^i=gcnew Random(n.Millisecond);

			alias1 = i->Next(10)+1;

			timer2->Enabled=false;
			if (alias1==1){
				pictureBox2->Image=Drawing::Image::FromFile("C:\\projecto\\img\\uvas.png");

			}
			else if (alias1==2){
				pictureBox2->Image=Drawing::Image::FromFile("C:\\projecto\\img\\noz.png");

			}
			else if (alias1==3){
				pictureBox2->Image=Drawing::Image::FromFile("C:\\projecto\\img\\nabo.png");

			}
			else if (alias1==4){
				pictureBox2->Image=Drawing::Image::FromFile("C:\\projecto\\img\\laranja.png");

			}
			else if (alias1==5){
				pictureBox2->Image=Drawing::Image::FromFile("C:\\projecto\\img\\ervilhas.png");

			}
			else if (alias1==6){
				pictureBox2->Image=Drawing::Image::FromFile("C:\\projecto\\img\\couve.png");

			}
			else if (alias1==7){
				pictureBox2->Image=Drawing::Image::FromFile("C:\\projecto\\img\\cereja.png");

			}
			else if (alias1==8){
				pictureBox2->Image=Drawing::Image::FromFile("C:\\projecto\\img\\cenoura.png");

			}
			else if (alias1==9){
				pictureBox2->Image=Drawing::Image::FromFile("C:\\projecto\\img\\banana.png");

			}
			else if (alias1==10){
				pictureBox2->Image=Drawing::Image::FromFile("C:\\projecto\\img\\ananas.png");

			}



textBox2->Text=Convert::ToString(alias1);


	 }
private: System::Void timer3_Tick(System::Object^  sender, System::EventArgs^  e) {

		        DateTime n = DateTime::Now;
			Random^i=gcnew Random(n.Millisecond);
			alias2 = i->Next(10)+1;
			timer3->Enabled=false;

			if (alias2==1){
				pictureBox3->Image=Drawing::Image::FromFile("C:\\projecto\\img\\banana.png");

			}
			else if (alias2==2){
				pictureBox3->Image=Drawing::Image::FromFile("C:\\projecto\\img\\ananas.png");

			}
			else if (alias2==3){
				pictureBox3->Image=Drawing::Image::FromFile("C:\\projecto\\img\\cereja.png");

			}
			else if (alias2==4){
				pictureBox3->Image=Drawing::Image::FromFile("C:\\projecto\\img\\couve.png");

			}
			else if (alias2==5){
				pictureBox3->Image=Drawing::Image::FromFile("C:\\projecto\\img\\ervilhas.png");

			}
			else if (alias2==6){
				pictureBox3->Image=Drawing::Image::FromFile("C:\\projecto\\img\\laranja.png");

			}
			else if (alias2==7){
				pictureBox3->Image=Drawing::Image::FromFile("C:\\projecto\\img\\nabo.png");

			}
			else if (alias2==8){
				pictureBox3->Image=Drawing::Image::FromFile("C:\\projecto\\img\\noz.png");

			}
			else if (alias2==9){
				pictureBox3->Image=Drawing::Image::FromFile("C:\\projecto\\img\\uvas.png");

			}
			else if (alias2==10){
				pictureBox3->Image=Drawing::Image::FromFile("C:\\projecto\\img\\cenoura.png");

			}

textBox3->Text=Convert::ToString(alias2);

	 }

Só meti uma parte do código que foi "cirurgicamente" modificado para ficar mais simples e rápido de se entender porque o problema está detectado mas "cura" é que está em falta  :P!

Quando é executado aparece o seguindo nos objectos:

textBox1: <número random>

textBox2: <número random>

textBox3: <número random>

textBox4: 0

textBox5: 0

textBox6: 0

E aqui fica a pergunta porque não aparece os mesmos valores das primeiras 3 textBox's nas 3 últimas?!

P.S. Pareceu-me ter ficado tudo em ordem mas se no debug der algum erro tramado avisem por aqui!

E Dark desculpa não ter posto o tópico no lugar certo mas quando dei pelo erro já era tarde  :-[

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Com os timers não consegui meter a variavél a sair mas penso que o problema tenha sido por causa do desligar o timer a meio do do seu objecto em si!

Mas como forma alternativa retirei o código todo dos timers e meti dentro do botão e só declarei uma vez a variavel n e i e o problema ficou resolvido!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Oh que raio se passa comigo? Começo a responder aos tópicos e depois não vejo quando respondem.

Desculpa lá :bored: Ainda bem que conseguiste!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora