Click here to Skip to main content
Click here to Skip to main content

Weather Info

By , 27 May 2004
 

Sample Image - weatherinfo.gif

Introduction

Weather Info came about because another weather program I had been using time bombed and the developer had disappeared. I sought out to learn about using Web Services on the .NET Compact Framework and ended up coming up with what I think is a very useful application for my first.

Implementation

This project contains a series of classes to implement Web Service calls and the caching of data for offline use. WeatherInfoMain.cs contains all of the main code to implement the user interface. WeatherItem.cs contains the information for storing and serializing a web service response. WeatherCache.cs provides the mechanism for caching and retrieving WeatherItems, and Registry.cs contains the code for manipulating the Pocket PC registry.

Web Service Setup

Weather Info uses the weather data provided by EJSE. (Sorry to the non-US users, but this service only supports the United States.) I was actually pleasantly surprised at how simple it was to set up the web service request and to retrieve data from the service. One note: proxy configurations on the Pocket PC are problematic at best, so the application does not support the use of a proxy.

Pocket PC Registry

The application uses PInvoke to call the native Pocket PC registry handlers. I used the registry to store the ZIP code that the web service uses to retrieve the weather info.

Scrolling Forms

The other big challenge I faced in the application was developing a scrolling mechanism for when the user displayed the soft input panel and for the extended forecast. When the soft input panel is displayed, the viewable area shrinks by whatever the size of the selected input method is. To handle this, I developed all of the data as a series of panels and then dropped the panels into the main tab control. The scroll bars are displayed as necessary to allow the user to view the entire contents of the panel.

/// <summary>
/// Handles setting scroll bars and viewable areas
/// when the soft input panel is enabled or disabled
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void inputPanel1_EnabledChanged(object sender, System.EventArgs e)
{
    if(this.inputPanel1.Enabled)
    {
        //subtract SIP height from tab control height
        this.tabControl1.Height= 
          this.ClientRectangle.Height - this.inputPanel1.Bounds.Height;
        this.vScrollBarCurrent.Visible=true;
        this.vScrollBarAbout.Visible=true;
        this.panelAbout.Left=-(this.vScrollBarAbout.Width/2);
    }
    else
    {
        this.tabControl1.Height=this.ClientRectangle.Height;
        this.panelCurrent.Top=0;
        this.vScrollBarCurrent.Value=0;
        this.vScrollBarCurrent.Visible=false;
        this.panelAbout.Top=0;
        this.panelAbout.Left=0;
        this.vScrollBarAbout.Value=0;
        this.vScrollBarAbout.Visible=false;
    }
    int iCurrent=this.panelCurrent.Height-this.tabCurrent.Height;
    this.vScrollBarCurrent.Maximum=iCurrent+((iCurrent/10)/2);
    this.vScrollBarCurrent.LargeChange=iCurrent/10;
    this.vScrollBarCurrent.Height=this.tabCurrent.Height;
    int iExtended=this.panelExtended.Height-this.tabExtended.Height;
    this.vScrollBarExtended.Maximum=iExtended+((iExtended/10)/2);
    this.vScrollBarExtended.LargeChange=iExtended/10;
    this.vScrollBarExtended.Height=this.tabExtended.Height;
    int iAbout=this.panelAbout.Height-this.tabAbout.Height;
    this.vScrollBarAbout.Maximum=iAbout+((iAbout/10)/2);
    this.vScrollBarAbout.LargeChange=iAbout/10;
    this.vScrollBarAbout.Height=this.tabAbout.Height;
}

Required Libraries

Serialization support requires Compact Formatter.

Conclusion

I hope you enjoy using Weather Info. Updated versions can be found here.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

Shane Church
Software Developer (Senior) EffectiveUI
United States United States
Member
Shane Church is Technical Lead at EffectiveUI, where he designs and develops key mobile and Web applications for major client engagements such as Boeing and Cartegraph. Drawing upon his more than ten years of experience developing in the Microsoft .NET Framework with a focus on ASP.NET and Microsoft mobile technologies, Shane contributes to and guides a core development group to execute new mobile Web and native applications.
 
Prior to joining EffectiveUI, Shane was a senior software engineer at CNSI. In this role, he contributed to public-facing portals for the Mine Safety and Health Administration and created an original online tool for mine rescue teams to better respond to mine emergencies. Throughout his career in senior software engineer and systems architect roles, Shane has developed important mobile and Web projects for clients, including the Department of Energy’s Rocky Flats Environmental Technology Site, Visa and TimeCentre. Shane earned his B.S. in Computer Science from the University of Colorado at Boulder.

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
You must Sign In to use this message board.
Search this forum  
    Spacing  Noise  Layout  Per page   
GeneralMy vote of 2memberFlavioAR21 Nov '12 - 23:47 
projeto aparentemente incompleto
QuestionHow to take zip code???memberMember 608740330 Apr '09 - 3:39 
What zip code can work at Weather Info, please tell me.
QuestionHow to compile weather info.memberMember 608740327 Apr '09 - 3:32 
I have problems with serialization ? How to make compact formatter???
AnswerRe: How to compile weather info.memberCUShane27 Apr '09 - 4:45 
The Compact Formatter is downloadable as a binary from the link above. This article is almost 5 years old now and is based on the .NET Compact Framework 1.0. The .NET Compact Framework 3.5 is the current version and contains a number of serialization formatters that the 1.0 version did not have. At this point, I would retool this code to use the built in serialization as opposed to the Compact Formatter.
GeneralWeb Servicememberscott_d17 Jun '05 - 9:33 
The server hosting the web service appears to down or no longer in service. Does anyone have any additional info on it. I have been using this web service in an application to retrieve dewpoint values. Thanks.
GeneralRe: Web ServicememberCUShane17 Jun '05 - 13:38 
I have converted this app to use the XML feeds from weather.com at http://www.weather.com/services/oap.html[^]
GeneralRe: Web Servicemembersamsacheti6 Mar '07 - 0:57 
Where is the updated source code dude ?
 

 
http://dotnet-junk.blogspot.com
GeneralRe: Web ServicememberCUShane6 Mar '07 - 2:28 
Due to licensing disagreements with weather.com, there will be no updated source code available for this application. The application has been replaced by Stirling Weather which is available at http://www.s-church.net/WindowsMobileSoftware.aspx?ID=0[^]
GeneralRe: Web Servicemembersamsacheti6 Mar '07 - 6:01 
Hello
All the weather tracking tools use http://www.weather.gov . And there is absolutely nothing wrong in it. But what about those who are living or traveling outside US ?
I am developing a software using yahoo weather feeds. Yahoo provides weather information for cities around the globe.
what are your comments on using yahoo weather feeds ?
GeneralRe: Web ServicememberCUShane6 Mar '07 - 7:04 
I haven't used the Yahoo services at all, so I can't really comment on them at this point.

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Permalink | Advertise | Privacy | Mobile
Web01 | 2.6.130523.1 | Last Updated 28 May 2004
Article Copyright 2004 by Shane Church
Everything else Copyright © CodeProject, 1999-2013
Terms of Use
Layout: fixed | fluid