Ir para conteúdo

POWERED BY:

Arquivado

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

williamfoose

Dar um fade out na janela.

Recommended Posts

Vou aproveitar o tópico para postar minha 2 duvidas.

 

Sou iniciante em c++ e estou indo bem pq eu ja sabia bastante de php. Estão ta um pouco facil para mim.

 

Bom. Só para estudar mesmo. Fis uma janela. Nessa janela. Quando alguem clikasse no botão, eu queria que ela fechasse.

 

Bom ela fecha xD.

 

Ae fis um efeito para ela dar um fade out até sumir, e quando sumir. Fechasse a janela

 

Minha primeira duvida é.

 

	private: System::Void sairToolStripMenuItem_Click(System::Object^  sender, System::EventArgs^  e) {
				 for(int i = 9; i >= 0; i--){
					this->Opacity = 0.i;
					Sleep(50);
				 }
				 this->Close();
			 }

Esse codigo estou usando para fechar a janela. Ae coloquei o for para fazer a janela ir sumindo devagarinho.

Só que para ele sumir preciso interagir o valor do for, no opacity. Gostaria de saber como fazer isso.

 

No php seria facil. Apenas um $opacity = "0." . $i;

 

se é que você's me entendem.

 

Minha segunda duvida é. Como faço para quando eu clikar num botão. Ele abrir uma nova janela.

 

Criei um novo formulario chamado about.h e gostaria que abrisse quando eu clikasse no botão.

 

Se algume solber pelo menos uma das perguntas ae eu agradeceria muito.

 

Des de ja agrdeço a todos que estão lendo o tópico.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para a primeira dúvida, você pode usar uma simples operação matemática:

$this->Opacity = i / 10;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Teu primeiro problema é exclusivamente matemática...

0.5 é o mesmo que 5/10,

0.003 é o mesmo que 3/1000,

0.45 é o mesmo que 45/100,

E assim vamos...

logo, o seu "0." . $i, que na minha opinião é uma gambiarra das grossas :P , pode ser traduzido para: i/10

 

Meu conselho, ja que você é iniciante, é primeiro pegar as bases da programação em C/C++ com o console mesmo... só depois partir para interfaces gráficas.

 

------------------

EDIT:

Não vi que o José Enésio ja tinha respondido...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tentei aqui e ficou assim.

 

private: System::Void sairToolStripMenuItem_Click(System::Object^  sender, System::EventArgs^  e) {
				 for(int i = 9; i >= 0; i--){
					 this->Opacity = i/10;
					 Sleep(50);
				 }
				 this->Close();
			 }

Mais ele n funcionou direito. Quando cliquei em fechar, ele ficou todo invisivel. Sem nenhum fade.

Só colocando mesmo

 

this->Opacity = 0.5;
por exemplo para dar certo mesmo. :/

 

Ou existe algum outro jeito e eu n sei ;(

Compartilhar este post


Link para o post
Compartilhar em outros sites

A função Sleep() faz parte da winAPI, e o parametro é dado em MILIsegundos...

C e suas derivadas são case-sensitive. Portanto, Sleep() não é sleep().

As duas funções existem...

Sleep(5000); //pausa por 5 segundos, ou 5000 milisegundos
sleep(5); //pausa por 5 segundos.

você está fazendo uma pausa de 50 milisegundos, isto são 0.05 segundos. Realmente a janela irá ficar invisível bem rápido! xD

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que não. Veja só.

 

private: System::Void sairToolStripMenuItem_Click(System::Object^  sender, System::EventArgs^  e) {
				 for(int i = 9; i >= 0; i--){
					 this->Opacity = i/10;
					 Sleep(500);
				 }
				 this->Close();
			 }

Pausa de 500 milisegundos. Quer dizer meio segundo. Então 2 dá 1 segundo, 4 dá 2 segundos, 6 dá 3 segundos, 8 dá 4 segundos. Então vamos lá.

 

Os 100% de fade deve dar uns 4.25 segundos.

 

Então 4.25 segundos são muita coisa xD.

 

O problema e que quando cliko em fechar ele fika na hora, invisivel. Como se fosse Opacity 0.0.

 

Mesmo com ele invisivel, leva os 4.25 segundos para ele fechar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ahhh!!!

Mas agora você mudou o argumento do Sleep, de 50 para 500!

E se ainda assim não deu certo, podemos então mudar o diagnostico... xD

 

O que você está usando para criar a janela?

wx, win32 API, etc...

Eu não entendo muito de programação a nível gráfico, usei a Qt por algum tempo, mas se você der mais detalhes do seu código ficará mais fácil.

 

http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu também cara, sou muito novo no C++ nem sei como esplicar isso direito :(

 

Bom. Me corrija se eu estiver errado xD.

 

Estou usando o Visual C++ 2008 Express Edition

 

Fis um novo formulario.

 

Com o nome de Form1.h que está aqui.

 

O meu codigo todo até agora, está assim.

 

#include <windows.h>
#include <iostream>
#include <iomanip>
#include <string>

#pragma once


namespace BrasilOnline {

	using namespace System;
	using namespace System::ComponentModel;
	using namespace System::Collections;
	using namespace System::Windows::Forms;
	using namespace System::Data;
	using namespace System::Drawing;

	/// <summary>
	/// Summary for Form1
	///
	/// WARNING: If you change the name of this class, you will need to change the
	///          'Resource File Name' property for the managed resource compiler tool
	///          associated with all .resx files this class depends on.  Otherwise,
	///          the designers will not be able to interact properly with localized
	///          resources associated with this form.
	/// </summary>
	public ref class Form1 : public System::Windows::Forms::Form
	{
	public:
		Form1(void)
		{
			InitializeComponent();
			//
			//TODO: Add the constructor code here
			//
		}

	protected:
		/// <summary>
		/// Clean up any resources being used.
		/// </summary>
		~Form1()
		{
			if (components)
			{
				delete components;
			}
		}
	private: System::Windows::Forms::MenuStrip^  menuStrip1;
	protected: 
	private: System::Windows::Forms::ToolStripMenuItem^  arquivoToolStripMenuItem;
	private: System::Windows::Forms::ToolStripMenuItem^  sairToolStripMenuItem;
	private: System::Windows::Forms::ToolStripMenuItem^  ajudaToolStripMenuItem;
	private: System::Windows::Forms::ToolStripMenuItem^  aboutBrasilOnlineToolStripMenuItem;

	protected: 

	private: System::ComponentModel::IContainer^  components;

	private:
		/// <summary>
		/// Required designer variable.
		/// </summary>


#pragma region Windows Form Designer generated code
		/// <summary>
		/// Required method for Designer support - do not modify
		/// the contents of this method with the code editor.
		/// </summary>
		void InitializeComponent(void)
		{
			this->menuStrip1 = (gcnew System::Windows::Forms::MenuStrip());
			this->arquivoToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
			this->sairToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
			this->ajudaToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
			this->aboutBrasilOnlineToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
			this->menuStrip1->SuspendLayout();
			this->SuspendLayout();
			// 
			// menuStrip1
			// 
			this->menuStrip1->Items->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^  >(2) {this->arquivoToolStripMenuItem, 
				this->ajudaToolStripMenuItem});
			this->menuStrip1->Location = System::Drawing::Point(0, 0);
			this->menuStrip1->Name = L"menuStrip1";
			this->menuStrip1->Size = System::Drawing::Size(768, 24);
			this->menuStrip1->TabIndex = 0;
			this->menuStrip1->Text = L"menuStrip1";
			// 
			// arquivoToolStripMenuItem
			// 
			this->arquivoToolStripMenuItem->DropDownItems->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^  >(1) {this->sairToolStripMenuItem});
			this->arquivoToolStripMenuItem->Name = L"arquivoToolStripMenuItem";
			this->arquivoToolStripMenuItem->Size = System::Drawing::Size(61, 20);
			this->arquivoToolStripMenuItem->Text = L"Arquivo";
			// 
			// sairToolStripMenuItem
			// 
			this->sairToolStripMenuItem->Name = L"sairToolStripMenuItem";
			this->sairToolStripMenuItem->Size = System::Drawing::Size(93, 22);
			this->sairToolStripMenuItem->Text = L"Sair";
			this->sairToolStripMenuItem->Click += gcnew System::EventHandler(this, &Form1::sairToolStripMenuItem_Click);
			// 
			// ajudaToolStripMenuItem
			// 
			this->ajudaToolStripMenuItem->DropDownItems->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^  >(1) {this->aboutBrasilOnlineToolStripMenuItem});
			this->ajudaToolStripMenuItem->Name = L"ajudaToolStripMenuItem";
			this->ajudaToolStripMenuItem->Size = System::Drawing::Size(50, 20);
			this->ajudaToolStripMenuItem->Text = L"Ajuda";
			// 
			// aboutBrasilOnlineToolStripMenuItem
			// 
			this->aboutBrasilOnlineToolStripMenuItem->Name = L"aboutBrasilOnlineToolStripMenuItem";
			this->aboutBrasilOnlineToolStripMenuItem->Size = System::Drawing::Size(176, 22);
			this->aboutBrasilOnlineToolStripMenuItem->Text = L"About Brasil Online";
			this->aboutBrasilOnlineToolStripMenuItem->Click += gcnew System::EventHandler(this, &Form1::aboutBrasilOnlineToolStripMenuItem_Click);
			// 
			// Form1
			// 
			this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
			this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
			this->ClientSize = System::Drawing::Size(768, 487);
			this->Controls->Add(this->menuStrip1);
			this->MainMenuStrip = this->menuStrip1;
			this->Name = L"Form1";
			this->Opacity = 1.0;
			this->Text = L"Brasil Online";
			this->menuStrip1->ResumeLayout(false);
			this->menuStrip1->PerformLayout();
			this->ResumeLayout(false);
			this->PerformLayout();

		}
#pragma endregion
	private: System::Void sairToolStripMenuItem_Click(System::Object^  sender, System::EventArgs^  e) {
				 for(int i = 9; i >= 0; i--){
					 this->Opacity = i/10;
					 Sleep(500);
				 }
				 this->Close();
			 }
	private: System::Void aboutBrasilOnlineToolStripMenuItem_Click(System::Object^  sender, System::EventArgs^  e) {
			// area onde vou colocar o codigo para abrir o about.h que será informações do script	 
			 }
	};
}

Acho que é isso :/

 

Ali no sleep coloquei 500 para dar um bom tempo. Mais n funfa mesmo. :/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então você ta usando recursos da API do windows.

E se você tirasse aquele "Sleep" dali, e aumentasse o número de iterações do loop??

for (i=900000; i<=0; i--)
    this->Opacity = i/1000000;

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.