article

Reading Photoshop Color Swatch (aco) files using C#

The first of a two part series which describes how to load and ultimately save Adobe Photoshop colour swatch files using C#. This first article describes the file format, and provides a full example project that will read RGB based swatch files.

avatar
Richard Moss
article

Loading the color palette from a BBM/LBM image file using C#

I took a break from arguing with our GIF decoder to take a quick look at the BBM format as I have a few files in that format containing colour palettes I wished to extract. When I looked into this, I found a BBM file is essentially an LBM file without any image data, so I set to work at writing a new palette serializer for reading and writing the palette files. This article describes how to read the palettes from BBM and LBM files.

avatar
Richard Moss
article

How to be notified when your application is activated and deactivated

I recently had a requirement where a user was able to perform an action externally to my application, and my application then had to detect this for processing. I could of course just had a poller running away in the background to check, but as the requirement also needed user input, why not just wait until the user switched back to my application, then check and deal with accordingly? This article describes how to intercept the `WM_ACTIVATEAPP` message from your C# application and put it to good use.

avatar
Richard Moss
article

Extending the LabelEdit functionality of a TreeView to include validation

An article which describes how to add validation support to a `TreeView` control that is using custom label edit functionality.

avatar
Richard Moss
article

Specifying custom text when using the LabelEdit functionality of a TreeView

An article which describes a robust yet simple way to have custom text when using the `LabelEdit` functionality of a `TreeView` and working around the limitations of Windows Forms using C# along with the `TVM_GETEDITCONTROL` and `WM_SETTEXT` messages.

avatar
Richard Moss
article

Visual Studio Extension for adding multiple projects to a solution

This article describes a simple extension that can be used to add multiple projects at once to a Visual Studio solution.

avatar
Richard Moss
article

Getting the hWnd of the edit component within a ComboBox control

A short tip which describes how to access the hWnd of the edit component contained within a `ComboBox` control via the Win32 API using `GetComboBoxInfo` and `COMBOBOXINFO`.

avatar
Richard Moss
article

Downloading new and changed Azure storage blobs at scheduled intervals

A sample project which downloads new and changed blobs from Azure storage, and optionally uploads new and changed local files.

avatar
Richard Moss
article

Creating long running Windows Forms applications without a start-up form

Sometimes you may wish to create an application that sits running in the background but doesn't actually display an initial user interface. However, the user can interact with the application and so therefore its not appropriate to be a service. Often such applications are accessible from a system tray icon. Another viable requirement might be for multiple top level windows, for example recent versions of Microsoft Word, where each document has its own application window. By default however, a normal Windows Form application displays the start-up form which definitely isn't desirable, especially as hiding this form isn't as straightforward as you might expect. Fortunately however, the framework provides us with the `ApplicationContext` class that can be used by `Application.Run`. This article describes how to use application contexts to create an application that initially has only a system tray icon to which further functionality can be accessed.

avatar
Richard Moss
article

ImageBox 1.1.4.0 update

Update 1.1.4.0 of the ImageBox control is now available, with a large number of new features and bug fixes.

avatar
Richard Moss
article

Using alternate descriptions for enumeration members

Enums are useful language features. But what happens when you want to display a string version of an enum member rather than just casting the member to a string? You could manually create a switch statement for conversion, and periodically update such functions when extending the source enum. Or you could use the power of reflection and attributes to do it automatically.

avatar
Richard Moss
article

Creating a custom TypeConverter part 2 - Instance descriptors, expandable properties and standard values

This article describes extending a custom `TypeConverter` created previously to support better code generation, expandable properties, and dropdown lists containing standard values.

avatar
Richard Moss