Colocar Resposta 
 
Avaliação do Tópico:
  • 0 votos - 0 Média
  • 1
  • 2
  • 3
  • 4
  • 5
Projecto de meteorologia---C#---
12-02-2011, 01:02 (Esta mensagem foi modificada pela última vez a: 12-02-2011 03:16 por ark15.)
Mensagem: #11
RE: Projecto de meteorologia---C#---
(11-02-2011 17:06)Mr_Postura Escreveu:  
(11-02-2011 16:41)ark15 Escreveu:  Já programas-te em C# alguma vez ?

LOOOL ya secalhar sou eu que sou muito burro mas a minha sotra tambem nao encontra o codigo...

Então pergunta a tua professora se alguma vez deu C#.
Se tiveres disposto, posso te explicar tim tim por tim tim como aquilo funciona! Mas não primeiro, muda a atitude! Todos temos dificuldades, e todos estamos em constante aprendizagem logo todos temos duvidas e etc!
Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
12-02-2011, 01:52
Mensagem: #12
RE: Projecto de meteorologia---C#---
(12-02-2011 01:02)ark15 Escreveu:  
(11-02-2011 17:06)Mr_Postura Escreveu:  
(11-02-2011 16:41)ark15 Escreveu:  Já programas-te em C# alguma vez ?

LOOOL ya secalhar sou eu que sou muito burro mas a minha sotra tambem nao encontra o codigo...

Então pergunta a tua professora se alguma vez deu C#.
Se tiveres disposto, posso te explicar tim tim por tim tim como aquilo funciona! Mas não primeiro, muda a atitude! Todos temos dificuldades, e todos estamos em constante aprendizagem logo tomos temos duvidas e etc!



A minha atitude foi consoante a resposta que me deram em ironia, se estou a fazer um projecto secalhar e obvio que ja dei c# nao?

Sim agradecia que se pudesses me explicasses
Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
12-02-2011, 02:49 (Esta mensagem foi modificada pela última vez a: 12-02-2011 02:53 por dininis.)
Mensagem: #13
RE: Projecto de meteorologia---C#---
o nome adequa-se à atitude heheheh
mr. postura... se queres que te ajudem pede com calma.. parece que tas a falar como se alguem te devesse alguma coisa aqui...

só um conselho... agora tu eq sabes oq dizes... se continuares assim, se fosse eu cagava-me em ti que te amanhaces... sê simpatico paah Big Grin

PS: nao vi mal nenhum na pergunta que te fizeram.. se alguem te perguntar "lembras-te daquilo?" tao-te a chamar burro? aqui passa-se igual... por vezes podemos ver mal onde ele nao existe...
de certeza que esse trabalho deve ser importante... mas vai com calma que chegas la... ninguem nasce ensinado Wink
Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
12-02-2011, 11:43
Mensagem: #14
RE: Projecto de meteorologia---C#---
Peço desculpa entao, devo ter interpretado mal a pergunta do user Confused

Se alguem me puder ajudar agradecia imenso.
Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
12-02-2011, 13:28
Mensagem: #15
RE: Projecto de meteorologia---C#---
Ora bem,

Para não haver mais problemas vou passar a explicar o que se encontra nesse projecto. Pelos vistos estou a lidar com alguém que se encontra no inicio dos inicios da programação em C# e por consequente este encontra-se a trabalhar/aprender com alguém, que ainda por cima é professora, que pelos vistos não entende nada do assunto ao afirmar que não encontra o código, enfim...

O projecto que eu te enviei é todo ele feito em Visual Studio 2010, para o caso de precisares de abrir o projecto e compilares para tu e a tua "sotra" conseguirem visualizar o assunto.

Existe dois ficheiros chamados de "NewsTicker.cs" e "NewsTicker.Designer.cs" que no seu conjunto forma aquilo que nós, programadores de .NET, chamamos User Controls (mais informação aqui http://www.dotnet-guide.com/usercontrol11.html) e que neste caso eu usei para criar um objecto composto, neste caso uma evolução do objecto Painel (Panel).

Código:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace PPLWareTicker
{
    public partial class NewsTicker : Panel
    {
        private Timer mScroller;    // Scroll timer
        private int mOffset;        // Offset of scrolled text
        private string mText;       // Text to scroll
        private Size mPixels;       // Width of text in pixels
        private Bitmap mBuffer;     // Double-buffering buffer

        public NewsTicker()
        {
            mScroller = new Timer();
            mScroller.Interval = 1;
            mScroller.Enabled = false;
            mScroller.Tick += DoScroll;
        }

        [Browsable(true)]
        public override string Text
        {
            get { return mText; }
            set
            {
                mText = value;
                mScroller.Enabled = mText.Length > 0;
                mPixels = TextRenderer.MeasureText(mText, this.Font);
                mOffset = this.Width;
            }
        }

        private void DoScroll(object sender, EventArgs e)
        {
            // Adjust offset and paint
            mOffset -= 1;
            if (mOffset < -mPixels.Width) mOffset = this.Width;
            Invalidate();
        }
        protected override void OnPaintBackground(PaintEventArgs e)
        {
            // Do nothing
        }
        protected override void OnPaint(PaintEventArgs e)
        {
            if (mBuffer == null || mBuffer.Width != this.Width || mBuffer.Height != this.Height)
                mBuffer = new Bitmap(this.Width, this.Height);
            Graphics gr = Graphics.FromImage(mBuffer);
            Brush bbr = new SolidBrush(this.BackColor);
            Brush fbr = new SolidBrush(this.ForeColor);
            gr.FillRectangle(bbr, new Rectangle(0, 0, this.Width, this.Height));
            gr.DrawString(mText, this.Font, fbr, mOffset, 0);
            e.Graphics.DrawImage(mBuffer, 0, 0);
            bbr.Dispose();
            fbr.Dispose();
            gr.Dispose();
        }
    }
}

Este é o código do Ticker!

Para não haver dúvidas vou passar a explicar o que significa cada uma das linhas.

Código:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;

Este pequeno bloco de texto são directivas/referências/bibliotecas que te permitem o acesso a componentes "pré-fabricados".

Código:
namespace PPLWareTicker

Este bloco mostra a criação simples de um Alias que mais tarde algures no projecto vai ser invocado como uma directiva/referência/biblioteca.

Código:
public partial class NewsTicker : Panel

Neste bloco é onde eu digo que vou criar um novo objecto chamado de "NewsTicker" que é derivado do objecto "Panel", isto é, vai conter todas as propriedades do "Panel" e mais algumas ou simplesmente as do "Panel" mas melhoradas.

Código:
private Timer mScroller;    // Scroll timer
private int mOffset;        // Offset of scrolled text
private string mText;       // Text to scroll
private Size mPixels;       // Width of text in pixels
private Bitmap mBuffer;     // Double-buffering buffer

Neste ponto eu estou a instanciar as variáveis globais que vou necessitar para colocar o Ticker a funcionar. O mScroller é um variável do tipo Timer (Tempo) que vai estipular a velocidade do Scroller (Texto que vai correr).

O mOffset é uma variável do tipo inteiro, que é onde coloco o tamanho, em largura, do objecto NewsTicker para saber qual o tamanho do Scroller para saber quando é que este tem de começar e quando é que vai acabar para voltar a começar.

O mText é uma variável do tipo string, que é onde eu indico qual o texto a apresentar.

O mPixels é o variável do tipo Size, que é onde eu declaro o tamanho em pixeis que o texto vai ocupar no ecrã, podendo sair fora do objecto NewsTicker.

O mBuffer é uma variável do tipo Bitmap, onde eu vou criar a imagem que vai ser apresentada/"pintada" no ecrã com o respectivo texto na respectiva posição que é para apresentar.

Código:
public NewsTicker()
        {
            mScroller = new Timer();
            mScroller.Interval = 1;
            mScroller.Enabled = false;
            mScroller.Tick += DoScroll;
        }

Aqui instancio o objecto "NewsTicker". Basicamente é onde tudo começa. Todos os objectos têm uma função deste género, pois é o que declara propriamente o tipo que a "Form" vai "levar".

Como podes verificar eu inicio a variável mScroller estipulando um intervalo de tempo de 1 milisegundo, que no inicio se encontra desligado e que tem como por evento, quando activo, o evento DoScroll.

Código:
[Browsable(true)]
        public override string Text
        {
            get { return mText; }
            set
            {
                mText = value;
                mScroller.Enabled = mText.Length > 0;
                mPixels = TextRenderer.MeasureText(mText, this.Font);
                mOffset = this.Width;
            }
        }

Aqui eu faço uma sobreposição ao método Text do objecto "Panel", isto é, faço uma "melhoria" ao método Text que já existia no "Panel" e que o meu novo objecto adoptou.

Neste caso a alteração remete-se a quando eu recebo informação ("set") em que a minha variável mText recebe o respectivo valor que eu quero apresentar no Scroller. Se inserirmos efectivamente algum texto, nem que seja um espaço, ele vai activar o nosso Timer, depois vai passar para a variável mPixel, quantidade de pixeis que o nosso texto, num determinado tipo de Font, contem e depois o mOffset vai obter o tamanho em largura do objecto.

Código:
private void DoScroll(object sender, EventArgs e)
        {
            // Adjust offset and paint
            mOffset -= 1;
            if (mOffset < -mPixels.Width) mOffset = this.Width;
            Invalidate();
        }

Aqui é o evento do Timer em que eu desincremento o mOffset de forma a provocar a "ilusão" de movimento. Quando o mOffset passar a ser menor que o valor negativo da quantidade de pixeis este volta a ter o valor do tamanho em largura criando a "ilusão" de ter voltado ao ponto inicial.

Código:
protected override void OnPaintBackground(PaintEventArgs e)
        {
            // Do nothing
        }

Isto tal como o comentário indica, não faz nada. Está aqui só por estar porque é inerente ao objecto "Panel" de acordo com as regras de programação orientada a objectos.

Código:
protected override void OnPaint(PaintEventArgs e)
        {
            if (mBuffer == null || mBuffer.Width != this.Width || mBuffer.Height != this.Height)
                mBuffer = new Bitmap(this.Width, this.Height);
            Graphics gr = Graphics.FromImage(mBuffer);
            Brush bbr = new SolidBrush(this.BackColor);
            Brush fbr = new SolidBrush(this.ForeColor);
            gr.FillRectangle(bbr, new Rectangle(0, 0, this.Width, this.Height));
            gr.DrawString(mText, this.Font, fbr, mOffset, 0);
            e.Graphics.DrawImage(mBuffer, 0, 0);
            bbr.Dispose();
            fbr.Dispose();
            gr.Dispose();
        }

Aqui é onde tudo acontece. Ele verifica se o buffer se encontra vazio, se sim instancia, se não passa ao passo seguinte, pois o buffer já contem a instância de imagem.
Depois cria os gráficos a partir desse buffer. A seguir criamos as brushs que vão pintar o fundo e o texto de determinada cor e depois criamos um rectângulo.
A seguir adicionamos o texto com a respectiva font e cor e Offset e desenhamos o gráfico no ecrã.

Depois destruimos as variáveis gráficos e bruchs.

Isto é o básico dos básicos de um Scroller. Pode ser feito com Panel, Labels, TextBox mas eu optei por um Panel porque penso que seja o mais correcto.

Depois na Form é só usares como usas qualquer outro objecto no Visual Studio. Depois de criares o teu User Control e realizares o primeiro Build (podes compilar, mas são duas coisas completamente diferente, pois o compilar implicar Build e Deploy e neste caso eu só indico que basta que faças o build) de forma a que o objecto por ti criado apareça na ToolBox, onde se encontra todos os objectos, como ComboBox, DataGrids, TextBox, etc., e possas arrastar para a tua Form e utilizar e parametrizar o mesmo.

Espero que tenhas entendido.

Se não entendeste aconselho-te vivamente a dedicares-te a outra coisa qualquer em vez da programação.

Este exemplo que te apresentei encontras em qualquer parte da net. Simplesmente fiz transposição para um projecto básico para não andares a pesquisar no meio de código desnecessário.

Cumps,
Manuel Rocha

[Imagem: pplware_staff.png]
Licenciado em Informática para a Saúde pela ESTG Leiria
Mestrado em Informática - Especialização em Sistemas de Informação na Universidade Portucalense
Especialização em Design Gráfico
Visitar Website de este utilizador Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
12-02-2011, 16:40 (Esta mensagem foi modificada pela última vez a: 12-02-2011 16:41 por ark15.)
Mensagem: #16
RE: Projecto de meteorologia---C#---
(12-02-2011 13:28)rei007 Escreveu:  ...
Se não entendeste aconselho-te vivamente a dedicares-te a outra coisa qualquer em vez da programação.
...

Exagerado não ? desanimar o rapaz desta forma ?! Todos temos dificuldades, uns mais que outros. Ele está "sozinho" na aprendizagem, visto que a professora ainda sabe tanto como ele.
Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
12-02-2011, 19:37
Mensagem: #17
RE: Projecto de meteorologia---C#---
(12-02-2011 13:28)rei007 Escreveu:  Ora bem,

Para não haver mais problemas vou passar a explicar o que se encontra nesse projecto. Pelos vistos estou a lidar com alguém que se encontra no inicio dos inicios da programação em C# e por consequente este encontra-se a trabalhar/aprender com alguém, que ainda por cima é professora, que pelos vistos não entende nada do assunto ao afirmar que não encontra o código, enfim...

O projecto que eu te enviei é todo ele feito em Visual Studio 2010, para o caso de precisares de abrir o projecto e compilares para tu e a tua "sotra" conseguirem visualizar o assunto.

Existe dois ficheiros chamados de "NewsTicker.cs" e "NewsTicker.Designer.cs" que no seu conjunto forma aquilo que nós, programadores de .NET, chamamos User Controls (mais informação aqui http://www.dotnet-guide.com/usercontrol11.html) e que neste caso eu usei para criar um objecto composto, neste caso uma evolução do objecto Painel (Panel).

Código:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace PPLWareTicker
{
    public partial class NewsTicker : Panel
    {
        private Timer mScroller;    // Scroll timer
        private int mOffset;        // Offset of scrolled text
        private string mText;       // Text to scroll
        private Size mPixels;       // Width of text in pixels
        private Bitmap mBuffer;     // Double-buffering buffer

        public NewsTicker()
        {
            mScroller = new Timer();
            mScroller.Interval = 1;
            mScroller.Enabled = false;
            mScroller.Tick += DoScroll;
        }

        [Browsable(true)]
        public override string Text
        {
            get { return mText; }
            set
            {
                mText = value;
                mScroller.Enabled = mText.Length > 0;
                mPixels = TextRenderer.MeasureText(mText, this.Font);
                mOffset = this.Width;
            }
        }

        private void DoScroll(object sender, EventArgs e)
        {
            // Adjust offset and paint
            mOffset -= 1;
            if (mOffset < -mPixels.Width) mOffset = this.Width;
            Invalidate();
        }
        protected override void OnPaintBackground(PaintEventArgs e)
        {
            // Do nothing
        }
        protected override void OnPaint(PaintEventArgs e)
        {
            if (mBuffer == null || mBuffer.Width != this.Width || mBuffer.Height != this.Height)
                mBuffer = new Bitmap(this.Width, this.Height);
            Graphics gr = Graphics.FromImage(mBuffer);
            Brush bbr = new SolidBrush(this.BackColor);
            Brush fbr = new SolidBrush(this.ForeColor);
            gr.FillRectangle(bbr, new Rectangle(0, 0, this.Width, this.Height));
            gr.DrawString(mText, this.Font, fbr, mOffset, 0);
            e.Graphics.DrawImage(mBuffer, 0, 0);
            bbr.Dispose();
            fbr.Dispose();
            gr.Dispose();
        }
    }
}

Este é o código do Ticker!

Para não haver dúvidas vou passar a explicar o que significa cada uma das linhas.

Código:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;

Este pequeno bloco de texto são directivas/referências/bibliotecas que te permitem o acesso a componentes "pré-fabricados".

Código:
namespace PPLWareTicker

Este bloco mostra a criação simples de um Alias que mais tarde algures no projecto vai ser invocado como uma directiva/referência/biblioteca.

Código:
public partial class NewsTicker : Panel

Neste bloco é onde eu digo que vou criar um novo objecto chamado de "NewsTicker" que é derivado do objecto "Panel", isto é, vai conter todas as propriedades do "Panel" e mais algumas ou simplesmente as do "Panel" mas melhoradas.

Código:
private Timer mScroller;    // Scroll timer
private int mOffset;        // Offset of scrolled text
private string mText;       // Text to scroll
private Size mPixels;       // Width of text in pixels
private Bitmap mBuffer;     // Double-buffering buffer

Neste ponto eu estou a instanciar as variáveis globais que vou necessitar para colocar o Ticker a funcionar. O mScroller é um variável do tipo Timer (Tempo) que vai estipular a velocidade do Scroller (Texto que vai correr).

O mOffset é uma variável do tipo inteiro, que é onde coloco o tamanho, em largura, do objecto NewsTicker para saber qual o tamanho do Scroller para saber quando é que este tem de começar e quando é que vai acabar para voltar a começar.

O mText é uma variável do tipo string, que é onde eu indico qual o texto a apresentar.

O mPixels é o variável do tipo Size, que é onde eu declaro o tamanho em pixeis que o texto vai ocupar no ecrã, podendo sair fora do objecto NewsTicker.

O mBuffer é uma variável do tipo Bitmap, onde eu vou criar a imagem que vai ser apresentada/"pintada" no ecrã com o respectivo texto na respectiva posição que é para apresentar.

Código:
public NewsTicker()
        {
            mScroller = new Timer();
            mScroller.Interval = 1;
            mScroller.Enabled = false;
            mScroller.Tick += DoScroll;
        }

Aqui instancio o objecto "NewsTicker". Basicamente é onde tudo começa. Todos os objectos têm uma função deste género, pois é o que declara propriamente o tipo que a "Form" vai "levar".

Como podes verificar eu inicio a variável mScroller estipulando um intervalo de tempo de 1 milisegundo, que no inicio se encontra desligado e que tem como por evento, quando activo, o evento DoScroll.

Código:
[Browsable(true)]
        public override string Text
        {
            get { return mText; }
            set
            {
                mText = value;
                mScroller.Enabled = mText.Length > 0;
                mPixels = TextRenderer.MeasureText(mText, this.Font);
                mOffset = this.Width;
            }
        }

Aqui eu faço uma sobreposição ao método Text do objecto "Panel", isto é, faço uma "melhoria" ao método Text que já existia no "Panel" e que o meu novo objecto adoptou.

Neste caso a alteração remete-se a quando eu recebo informação ("set") em que a minha variável mText recebe o respectivo valor que eu quero apresentar no Scroller. Se inserirmos efectivamente algum texto, nem que seja um espaço, ele vai activar o nosso Timer, depois vai passar para a variável mPixel, quantidade de pixeis que o nosso texto, num determinado tipo de Font, contem e depois o mOffset vai obter o tamanho em largura do objecto.

Código:
private void DoScroll(object sender, EventArgs e)
        {
            // Adjust offset and paint
            mOffset -= 1;
            if (mOffset < -mPixels.Width) mOffset = this.Width;
            Invalidate();
        }

Aqui é o evento do Timer em que eu desincremento o mOffset de forma a provocar a "ilusão" de movimento. Quando o mOffset passar a ser menor que o valor negativo da quantidade de pixeis este volta a ter o valor do tamanho em largura criando a "ilusão" de ter voltado ao ponto inicial.

Código:
protected override void OnPaintBackground(PaintEventArgs e)
        {
            // Do nothing
        }

Isto tal como o comentário indica, não faz nada. Está aqui só por estar porque é inerente ao objecto "Panel" de acordo com as regras de programação orientada a objectos.

Código:
protected override void OnPaint(PaintEventArgs e)
        {
            if (mBuffer == null || mBuffer.Width != this.Width || mBuffer.Height != this.Height)
                mBuffer = new Bitmap(this.Width, this.Height);
            Graphics gr = Graphics.FromImage(mBuffer);
            Brush bbr = new SolidBrush(this.BackColor);
            Brush fbr = new SolidBrush(this.ForeColor);
            gr.FillRectangle(bbr, new Rectangle(0, 0, this.Width, this.Height));
            gr.DrawString(mText, this.Font, fbr, mOffset, 0);
            e.Graphics.DrawImage(mBuffer, 0, 0);
            bbr.Dispose();
            fbr.Dispose();
            gr.Dispose();
        }

Aqui é onde tudo acontece. Ele verifica se o buffer se encontra vazio, se sim instancia, se não passa ao passo seguinte, pois o buffer já contem a instância de imagem.
Depois cria os gráficos a partir desse buffer. A seguir criamos as brushs que vão pintar o fundo e o texto de determinada cor e depois criamos um rectângulo.
A seguir adicionamos o texto com a respectiva font e cor e Offset e desenhamos o gráfico no ecrã.

Depois destruimos as variáveis gráficos e bruchs.

Isto é o básico dos básicos de um Scroller. Pode ser feito com Panel, Labels, TextBox mas eu optei por um Panel porque penso que seja o mais correcto.

Depois na Form é só usares como usas qualquer outro objecto no Visual Studio. Depois de criares o teu User Control e realizares o primeiro Build (podes compilar, mas são duas coisas completamente diferente, pois o compilar implicar Build e Deploy e neste caso eu só indico que basta que faças o build) de forma a que o objecto por ti criado apareça na ToolBox, onde se encontra todos os objectos, como ComboBox, DataGrids, TextBox, etc., e possas arrastar para a tua Form e utilizar e parametrizar o mesmo.

Espero que tenhas entendido.

Se não entendeste aconselho-te vivamente a dedicares-te a outra coisa qualquer em vez da programação.

Este exemplo que te apresentei encontras em qualquer parte da net. Simplesmente fiz transposição para um projecto básico para não andares a pesquisar no meio de código desnecessário.

grande lição,Wink
Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
01-03-2011, 13:07
Mensagem: #18
RE: Projecto de meteorologia---C#---
Boas muito obrigado pelo esclarecimento, ja consegui pôr a funcionar.

Já agora alguem sabe um codigo de omo ir buscar a temperatura do proximos 3 dias e aplicar no c#?
Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
25-05-2016, 22:52
Mensagem: #19
RE: Projecto de meteorologia---C#---
Muito obrigado pela partilha, aqui deu muito jeito.. Obrigado
Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
07-01-2021, 13:02 (Esta mensagem foi modificada pela última vez a: 09-01-2021 15:27 por xupista.)
Mensagem: #20
RE: Projecto de meteorologia---C#---
Vou contar-lhe uma pequena história. Eu decidi ir de alguma forma para o meu amigo em outra cidade de bicicleta. Há cerca de 30 km entre nós. Mas no meio do caminho, fui pego por uma chuva torrencial. Eu vim todo molhado, então agora eu sempre antes de sair de casa, eu vejo o que o tempo vai ser durante o dia https://br.meteorologist.pro . Recomendar.
Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
Colocar Resposta 


Saltar Fórum:


Utilizadores a ver este tópico: 2 Visitante(s)