Millions of members and growing! (6,116 online);
Email Password   helpLost your password?
Web Development » Applications & Tools » Tools with source code     Beginner

ToDoList 5.3.11 - A simple but effective way to keep on top of your tasks

By .dan.g.

A hierarchical task manager with native XML support for custom reporting.
VC6, VC7, VC7.1, VC8.0Win95, Win98, WinME, Win2K, WinXP, Win2003, MFC, VS6, CEO, Arch, DB, Dev, QA

Posted: 4 Nov 2003
Updated: 21 Nov 2007
Views: 1,875,133
Announcements


Search    
Advanced Search
Sitemap
print Print Broken Article? Broken Article? Discuss Discuss Recommend Article Send to a friend
1448 votes for this Article.
Popularity: 15.01 Rating: 4.75 out of 5

Downloads

Sample image

Latest Update (5.3 Feature Release)

The 'big' change of this release is per-task comments types.

I appreciate that this doesn't sound very exciting but it allows you to change the comments type for individual tasks instead of having to make the choice for the entire tasklist. And the benefit of this is that if you find that the richedit comments causes the tasklist size to balloon you can now use them selectively, say, just for when you want to embed an image or a file.

This also opens up the possibility of other comments types such as HTML and more specialized code-syntax highlighters.

Note: This is a file format change and you may lose RTF formatting if you save any tasklists and then return to 5.2. Please back up your tasklists.

What's New:

    • Added per-task comment types
    • Added preference to control balloon notifications
    • Added Preference to auto-save when alt-tabbing (i.e. app loses focus)
    • Added Preference to auto-save when switching tabs
    • Added Right-button drag and drop.
      This will facilitate the adding of dependencies and task links. ie. Right-button drag and drop one task on another and select from the popup menu that appears.
    • Added Find/replace to comments field
    • Added options dialog to Outline importing
    • Added check for software updates added when coming out of hibernation
    • Added a Task Color combo box in the lower bar (editing controls area)
    • Added 'all must match' check boxes to filterbar
    • Added double clicking of file link and dependency columns to open file links
    • Added more sub-categories to preferences to help find options more easily
    • Added Send task(s) as e-mail to File menu
    • Added ID of singly selected task to status bar
    • Added "Close all tasklists but this one" to tab context menu
    • Added 'Goto Next/Previous Task' to Move menu
    • Improved speed of moving tasks with keyboard
    • Improved ini file performance
    • Fixed rtf comments spell checking
    • Fixed flicker on editing task title

Related Links

After finally compiling a FAQ of the most relevant questions asked about ToDoList I've moved all resources related to ToDoList to a new page on my website.

Introduction

You know how it is - you start work on one project and halfway through, you find one or two side-projects crop up that have to be solved before you can continue on the original project.

This is one such project with the added twist that it too started its life as a side-project. Here's what happened:

<Cue wavy screen effect>

I can only imagine that the planets must have been in (mis-)alignment or something, because at one point a few months ago, I was suddenly fielding emails on four or five separate articles I had previously submitted to CodeProject, some asking for features and others for bug fixes.

Foolishly or otherwise, I largely agreed with all the points raised, and subsequently found myself with fourteen or fifteen separate issues to resolve.

The situation was also made worse because I was trying to use CodeProject to keep track of all the things I had agreed to do, meaning that I had to continuously trawl the comments section of each article to remind myself of what I was supposed to be working on.

It even got to the stage where I was worrying that I'd fail to deliver on something - silly I know, but there you are!

Keeping a list on paper was a definite step in the right direction, but since I do all my coding on the same machine, it seemed somewhat inelegant, and anyway, we all know what happens to crucial bits of paper left lying around on desks and such.

The next step was to hunt around on the web for a tool to meet the following requirements:

  • Simple interface
  • Support for hierarchical data
  • Numbered items/subitems
  • Open file format
  • Freeware

Simple, huh! not!

I will admit that I did not spend weeks searching, but I am still surprised at the general lack of software matching my needs.

On reflection, I think that the reason may be simple: people are so used to commercial software being 'feature-rich' that when they come to design software themselves, they (not unreasonably) think they too need to cram as much in as possible, often leading to software where a lot of essential functionality is hidden away in the menu bar.

So, surprise, surprise, I decided to write something myself.

However, it's fair to say that I did not originally intend to post it on CodeProject and am only really doing so because I had a heap of fun solving some very interesting problems and these are what I think make it worth it.

Using the Software

There's really very little I need to say here since every feature/function is explicitly visible in the interface.

Nevertheless, the following list of basic capabilities and omissions may go someway to answering any questions that arise:

  • Files are stored in XML format with .xml file extension.
  • Trying to load a non-tasklist file will generally fail (unless you read the code to see how to circumvent it).
  • The number of items/subitems is limited only by memory (although performance may be the deciding factor before you exhaust memory).
  • Marking a parent item as 'done' will also gray-out child items, but they are not disabled or automatically marked as 'done'.
  • An ellipsis (...) indicates that an item has sub-items.
  • All items can be expanded or collapsed (by double-clicking).
  • Top-level items and sub-items are created using different toolbar buttons.
  • There are task-specific context-menus.
  • The previously open tasklists are re-opened on startup.
  • The tasklist is automatically saved when closing the software or minimizing it to the system tray.
  • The priority of a task is shown as a grayscale box to the left of the item.

Points of Interest

Here's where we come to the side-projects I was talking about, the first two of which I intend to work up into follow-up articles.

They are:

  1. The 'ordered' tree control, which incorporates a non-client gutter for displaying the item numbers.

    The idea stemmed from research I did into alternative designs for a tree-list control, which did not solve it by creating a hybrid control incorporating a tree and a list.

    The hybrid control seems such an obvious solution that I suspect few people have stopped to question it, but it has still always struck me as looking far too much like hard work to be truly elegant ('square pegs' and 'round holes' spring to mind).

    One possible idea is to implement the 'list' portion entirely in the non-client area of the tree. I.e., shift the right hand client edge to the left and then render the list portion in the resulting non-client area.

    Whilst I've yet to get round to building a proof of concept, it was nevertheless this ongoing mental debate which prompted me to try to solve the requirement for numbered items and subitems by rendering the item/subitem numbers in the non-client area.

    Without going into too much detail (as this will subsequently be an article of its own), this is how I got it to work:

    • Handle TVM_INSERTITEM and TVM_DELETEITEM to know exactly when items are added and removed.
    • In these handlers recalculate the width of the gutter required to display the widest 'dotted' item/subitem number. (Note: this is not necessarily simply the deepest subitem.)
    • If the required gutter width changes, call SetWindowPos(NULL, 0, 0, 0, 0, SWP_FRAMECHANGED | SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER) to force Windows to recalculate the non-client area of the control.
    • Handle WM_NCCALCSIZE when it does, and offset the left border by the required gutter width.
    • Handle WM_NCPAINT for painting the numbers.

    This is necessarily an over-simplification, but it captures the essence of the solution, and all that essentially remains is lots of fiddling about to ensure the non-client area gets redrawn at the the right times to stay synchronized with the client area.

  2. Embedding .RC control definition data directly in a .cpp file to break the dependency on binary resources (a.k.a. 'Runtime Dialogs').

    This is an idea that has been floating about for quite some time and which has only recently gelled into a workable solution.

    The problem, put simply, is that if you want to take advantage of the resource editor in Visual Studio (and who doesn't), then you very quickly find yourself stuck with having to load dialog templates from resources compiled into the binary file.

    This further means that if you want to make use of a dialog across multiple projects, then either you need to copy and paste the dialog template between project .RC files, or you need to build the dialog into a DLL from which it can be accessed.

    'Runtime Dialogs' (a snappy title I coined myself) is a solution that neatly sidesteps both the nuisance of copying dialog resources between resource files and the extra work (and maintenance) involved in packaging dialogs in DLLs.

    And it works like this:

    • First, you design your dialog template in the resource editor, create a CDialog derived class using class wizard, and wire up all the controls just as you normally would.
    • Next, you #include "runtimedlg.h" and change all instances of CDialog to CRuntimeDlg.
    • Then, you cut and paste the control definition section from the appropriate section in the .RC file and embed it directly in the dialog's .cpp file as a static string (with a bit of tweaking to handle double quotes and such like).
    • Finally, in the constructor of your dialog, you simply call CRuntimeDlg::AddRCControls(...) passing the control definitions as a string.
    • And CRuntimeDlg takes care of the rest including, if required, auto-sizing the dialog to suit the control layout.

    I'm certainly not suggesting that this is a 'win-win' solution for all situations but it certainly has merits in its closer coupling of dialog template to dialog code which makes sharing dialogs across multiple projects a breeze.

    P.S.: In case it's not clear here, I used CRuntimeDlg to create CToDoCtrl which encapsulates the ordered tree together with the priority, date and comments controls as a single simple-to-instantiate control.

    I'm also proposing to use them in the .NET port of my ProjectZip add-in for VC6.

  3. Embedding the XML file in a web page.

    This is possibly the most satisfying aspect of the whole project because it was completely unexpected.

    What I mean is that, until recently, my knowledge of DOM and XMLDOM was virtually non-existent, as it's only since I've become more interested in the presentation of AbstractSpoon that I've been forced to get to grips with the various implementations of DOM and XMLDOM out there.

    I'm pleased to say that the code on my site works under IE 6.0, Netscape 7.1, and Mozilla, although custom code was required to achieve this.

Generic MFC Classes that may prove Useful to You

The following table lists a wide range of utility classes written for this project. They can all be included in any MFC project provided you include any class dependencies too. Feel free to ask any questions relating to these specific classes and how to use them.

Class Name

Description

Class Dependencies
(apart from MFC)

CAboutDlg

Customizable "About…' dialog not requiring a dialog resource. Supports html encoded text

CRuntimeDlg, CRCCtrlParser

CAutoComboBox

Adds only unique items to the drop list and shuffles the list so that the last added item is at the top

CHoldRedraw

CAutoFlag

Encapsulates the setting and unsetting of a boolean variable thru the lifetime of the class instance

CColorButton

Non-ownerdraw button that displays the selected colour on the button face and displays the colour dialog when clicked

CEnColorDialog

CColorComboBox

Owner-draw combobox for displaying and selecting user defined colours

CDateHelper

Encapsulation of various rountines for calculating date spans and for formatting

CDeferWndMove

Encapsulation of the Win32 API

CDialogHelper

Re-implementation of the CDialog DDX/DDV rountines to avoid the MFC error messages when the user clears a number edit (for instance)

CDlgUnits

Encapsulates the MapDialogRect Win32 API

CDockManager

Class for managing the docking of one popup window to another.

*CSubclassWnd, CHoldRedraw, CAutoFlag

CDriveInfo

Encapsulates various rountines for querying about drives, files and disk space

CEnBitmap

Adds support to CBitmap for loading non-bmp files and resources.

CEnBitmapEx, CColorReplacer, CImageBlurrer, CImageColorizer, CImageContraster, CImageEmbosser, CImageFlipper, CImageGrayer, CImageLightener, CImageNegator, CImageResizer, CImageRotator, CImageSharpener, CImageShearer, CImageSysColorMapper, CImageTinter

Adds image manipulation funationality to CEnBitmap

CEnBitmap

CEnColorDialog

Adds saving and restoring of custom colours to CColorDialog

CEnCommandLineInfo

Adds functions for extracting and querying commandline switches

CEnEdit

Adds user-defined button capabilities to CEdit

CMaskEdit, CThemed, CDlgUnits

CEnToolBar

Adds support for using alternative resource or file images

CFileEdit

Adds buttons for browsing and displaying the file represented by the text in the edit control. Also shows the file's small icon.

CEnEdit, CFolderDialog, CMaskEdit, CDlgUnits, CThemed, CSysImageList

CHoldRedraw

Encapsulates WM_SETREDRAW

CHotKeyCtrlEx

Fixes a number of behavioural problems including the handling of certain keypresses

CHotTracker

Tracks the cursor movement over user-defined windows and posts event messages as necessary

*CSubclassWnd,

CLimitSingleInstance

Provides simple method to detect if another instance of an app is running

CMaskEdit

Adds simple character masking to CEdit

CNcGutter

Allows the UI of standard windows controls to be extended by supporting any number of columns to be added to the non-client area of the window. Favours tabular controls like lists, trees, etc

*CSubclassWnd, CHoldRedraw, CThemed, CDlgUnits

COrderedTreeCtrl

CTreeCtrl implementation of CNcGutter displaying a single column showing the hierarchical position of each tree item in '1.2.3.4' notation.

CHoldRedraw, CThemed

CPasswordDialog

Very simple password dialog not requiring a dialog resource

CRuntimeDlg, CRCCtrlParser

CPropertyPageHost

Simpler replacement for CPropertySheet allowing easier creation as a child window

CRCCtrlParser

Used by CRuntimeDlg for parsing dialog resource-like text

CRuntimeDlg

Adds support to CDialog for building dialogs at runtime ie. dialogs do not require a dialog resource

CRCCtrlParser

CShortcutManager

Class for handling application keyboard shortcuts.

*CSubclassWnd, CWinClasses

CSpellCheckDlg

Spellcheck dialog not requiring a dialog resource, which interfaces with ISpellCheck (interface to Open Office dictionaries)

CRuntimeDlg, CRCCtrlParser, ISpellCheck

CSysImageList

Encapsulates the Windows system image list (file/folder images)

CTabCtrlEx

Adds post rendering callback for the tabs without using owner-draw

CThemed

Encapsulates themed (XP) and non-themed (the rest) drawing of windows controls

CTimeEdit

Adds a button for specifying time units and provided routines for converting time to and from different time units

CEnEdit, CMaskEdit, CThemed, CDlgUnits

CToolbarHelper

Adds support for dialog toolbar tooltips, multiline tooltips and dropbuttons with menus

*CSubclassWnd, CEnBitmap, CEnBitmapEx

CTrayIcon

Encapsulates the Shell_NotifyIcon Win32 API. Also provides balloon tips and animation

*CSubclassWnd,

CUrlRichEditCtrl

Adds support for recognizing urls, clicking them and setting custom url callbacks

CWinClasses

Encapsulates the ::GetClassName Win32 functions

CXmlFile, CXmlItem

Non-Unicode class for reading and writing xml files

CXmlFileEx

Adds encryption capabilities to CXmlFile

CXmlFile, IEncryption

* CSubclassWnd was originally written by Paul DiLascia for MSJ magazine. The version I use has been heavily extended to suit my specific needs. The classes that depend on it here need this extended version.

License

Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 2.5 License.

Further Work

Whilst this tool was originally intended for my personal use only, it is now a 'community' project, so if you find it useful and want to make suggestions for enhancements or bug fixes, then post below.

Please visit AbstractSpoon to see the current tasklist.

History

  • 5.3.11 (21 Nov 2007)
    • Fixed bug with saving new tasklists
    • Fixed data loss bug with copying multiple tasks
    • Fixed filtering bug
  • 5.3.10 (02 Nov 2007)
    • Fixed bug with category dropdown not retaining selection
    • Fixed bug with Shift+Ctrl+V (Paste Simple) shortcut in the RTF comments
    • Improved performance adding new tasks by only resorting the new task's parent rather than the entire tasklist
    • Fixed Filterbar resize problem causing filter controls to appear to be missing
    • Fixed sort state being lost for delay-loaded tasklists
    • Fixed tasklist category display bug
  • 5.3.9 (28 Sep 2007)
    • Fixed erroneous prompt to reload tasklist after switching tabs
  • 5.3.8 (25 Sep 2007)
    • Fixed filter combo droplist size bug
    • Set better multi-user source control defaults
    • Comments type no longer saved for each task is the task has no comments *and* the comments type is the same as the users defaul preference
  • 5.3.7 (21 Sep 2007)
    • Fixed exit crash
    • Column selection dialog defaults to 'Affects active tasklist only'
    • Tasklist tab omits file extension if no project name supplied
    • Fixed slowdown when moving tasks using the keyboard
  • 5.3.6 (15 Sep 2007)
    • Fixed global hotkey not turning off when disabled
    • Fixed global hotkey hiding ToDoList even when system tray icon not enabled
    • Fixed rendering synchronisation bug
    • GPExporter uses completion date in place of due date for completed tasks
    • Fixed synchronisation bug when setting priority via the Edit menu
    • Fixed bug where Version attribute was not being updated after pressing [enter]
    • Second attempt to fix multiple-Help bug
  • 5.3.5 (06 Sep 2007)
    • Use parent task's time units to display parent's accumulated time in tasklist
    • Always display print dialog when printing
  • 5.3.4 (04 Sep 2007)
    • Fix bug when encrypting large tasklists
    • Fix focus-change bug on category droplist
    • Fix comments split bug
  • 5.3.3 (29 Aug 2007)
    • Support for 'evernote://' urls added to comments field
    • Fixed 'View | Copy As...' menu commands
    • Improved rendering time when scrolling with the cursor keys
    • Fixed Priority field display bug
  • 5.3.2 (23 Aug 2007)
    • Fixed due task colouring bug when colouring by category
    • Fixed Help re-entrancy bug
    • Restored Ctrl+Up/Down as shortcuts for moving tasks
  • 5.3.1 (19 Aug 2007)
    • Fixed time estimate/spent editing so that the time units can be edited independently of the time amount
    • Fixed 'Copy as Task Reference/Dependency (Full)' to include the full path to the tasklist
  • 5.3 Feature Release (15 Aug 2007)
    • Added per-task comment types
    • Added start time to task time log
    • Added webLink to GanttProject export
    • Added preference to control balloon notifications
    • Added Preference to auto-save when alt-tabbing (i.e. app loses focus)
    • Added Preference to auto-save when switching tabs
    • Added Right-button drag and drop.
      This will facilitate the adding of dependencies and task links. ie. Right-button drag and drop one task on another and select from the popup menu that appears.
    • Added Find/replace to comments field
    • Added options dialog to Outline importing
    • Added check for software updates added when coming out of hibernation
    • Added a Task Color combo box in the lower bar (editing controls area)
    • Added 'all must match' check boxes to filterbar
    • Added double clicking of file link and dependency columns to open file links
    • Added more sub-categories to preferences to help find options more easily
    • Added Send task(s) as e-mail to File menu
    • Added ID of singly selected task to status bar
    • Added "Close all tasklists but this one" to tab context menu
    • Added 'Goto Next/Previous Task' to Move menu
    • Improved speed of moving tasks with keyboard
    • Improved ini file performance
    • Fixed rtf comments spell checking
    • Fixed flicker on editing task title
    • Fixed tdl:// browser links
    • Fixed non-persistent 'Due Today' task colour
    • Fixed global hotkey not turning off when disabled
  • 5.2.9 (20 Jun 2007)
    • Fixes for various bugs introduced into the auto-droplists in 5.2.7 (note: ESCAPE will no longer cancel changes in the category and alloc to droplists - it was just too hard to get it working consistently - I'll look at it further in 5.3)
    • Fix for unexpected appearance of find dialog after loading a tasklist
    • Fix for keyboard accelerators in Help menu
    • Fix for ToDoList closing after clicking in the list box in the About dialog and then pressing ESCAPE.
  • 5.2.8 (16 Jun 2007)
    • Fix for CTRL+TAB shortcut
    • Fix for cancel behaviour in auto-droplists. Only ESCAPE will cancel changes.
    • Fix for 'none' priority in infotips
    • Fix for delay-loaded tasklists reporting no due tasks
  • 5.2.7 (15 Jun 2007)
    • Fix for cancelling password prompt when switching tasklists which are delay-loaded
    • Fix for iCal exporter
    • Modified behaviour of auto-droplists (status, category, alloc by, alloc to) so that updating only occurs on completion of selection (by closing the droplist, or pressing ENTER)
  • 5.2.6 (12 Jun 2007)
    • Fix for WUW not closing ToDoList down
    • Fix for missing modified date in Find dialog results
    • Improved handling of save errors
  • 5.2.5 (11 Jun 2007)
    • Fix for ALT+B accelerator
    • Fix for CTRL+SHIFT+Space shortcut
    • Fix for missing comments using multibyte charsets (note: RTF comments using multibyte charsets are always displayed as plain text because the RTF2HTML converter does not yet handle multibyte charsets)
    • Source code tweak for VS2003
  • 5.2.4 (11 Jun 2007)
    • Further filter fix
    • Fix for iCal export
    • Fix for child due date erroneously appearing next to parents
  • 5.2.3 (08 Jun 2007)
    • Fix for some filter attributes not being saved/restored
    • Fix for some 'Find by date' not working
    • Various source code mods for VS2003
  • 5.2.2 (06 Jun 2007)
    • Fix for archive file not being un-encrypted when the associated tasklist has it's encryption disabled.
    • Various source code mods for VS2003
  • 5.2.1 (04 Jun 2007)
    • Warnings added for keyboard shortcuts which conflict with reserved shortcuts
    • Fix for not resorting after adding a new task
  • 5.2 Feature Release (31 May 2007)
    • Fix for Korean IME input bug
    • ToDoList always shows if notifying due tasks
    • Setting cost on parent tasks enabled
    • Fix for bug when importing non-latin scripts
    • Fix for tasks not being exported to iCal (now all tasks are exported)
    • Fix for tasks due 'tomorrow' being shown as due 'today'
    • Commandline support for 'tdl://' added (used to implement browser links)
    • Better handling of share violation file errors
    • Backups added to protect tasklist during file writing
    • Preference to use/display highest priority extended to apply to risk attribute too
    • 'Copy As > Task Reference (full path)' added to Edit Menu
    • 'Copy As > Task Dependency (full path)' added to Edit Menu
    • 'Select All' added to Edit menu
    • 'Copy As > Task Path' added to Edit Menu
    • Option added to Edit menu to remove a task's colour
    • Support added for assigning 'No Risk' to a task
    • Support added for assigning 'No Priority' to a task
    • New status bar which displays various attributes sums for selected tasks
    • Currency formatting in status bar and cost column fixed
    • Preference added to control colour of 'todays' tasks
    • Support added for per-tasklist column selection (info is stored in Preferences)
    • 'Select Columns...' to View menu
    • Support added for delayed loading of tasklists on startup
    • Support added for multiple 'allocated to' per task (implemented just like categories)
    • Code should now compile on VS200x
  • 5.1.5 (15 Mar 2007)
    • Fix for incorrect rendering of toolbar and menu icons in 16 colour mode
    • Fix for missing attributes in csv export
    • (another) Attempted fix for the auto-deletion of new tasks under Vista
  • 5.1.4 (18 Feb 2007)
    • Fix for 'End of This Week' date calculation in the filter.
  • 5.1.3 (16 Feb 2007)
    • Fix for complex commandlines not working in file ref field
    • Fix for 'Insert Date/Time' not honouring ISO date preference
    • Fix for invalid copyright char in tasklists exporter for iCal
    • Fix for subtask auto-deletion bug under Vista
  • 5.1.2 (7 Feb 2007)
    • Fix for -tid commandline option not working
    • Fix for tdl:// link opening further instances of open tasklists
    • Fix for 'less than' not working on Find dialog
    • Fix incorrect placement of 'New task' menu icons
    • Attempted temporary fix of subtask auto-deletion bug under Vista
  • 5.1.1 (3 Feb 2007)
    • % complete progress bar drawn in 'completed' colour when 100%
    • File edit field in Export dialog now correctly displays 'Save As' dialog
    • 'New Task/Subtask' toolbar buttons disabled when multiple tasks selected
  • 5.1 Feature Release (31 Jan 2007)
    • Support added for recurring tasks
    • Version attribute added to tasks
    • Filter controls more neatly aligned when on multiple lines
    • Option added to RTF context menu to paste 'simple' without formatting
    • 'Unsorted' changed to 'Disable Sorting'. Once set the user can only sort via the menu. ie. no more accidental sorting via the column headers.
    • Preference added to control the use of the escape key to minimize ToDoList
    • Preference added to auto-expand tasklists after loading
    • Option added to Edit menu to insert Date/Time. Inserts into whichever field currently had the input focus.
    • Option added to Tools preferences to import tools from another preference file.
    • Prompt added to convert times (estimated and spent) when switching from one time unit to another
    • Completed parent tasks are now automatically re-enabled if a non-complete child is subsequently added.
    • Toolbar icons added to menu items
    • RTF text colour controls now mimic that well-known word processor.
    • 'Outlook' url protocol works in comments field in addition to 'outlook'
    • Fix for display issue with External ID attribute in tasklist
    • F12 is not allowed as a global hotkey because it is reserved for Windows
    • Fix for display 'hiccup' after completing editing a task's title
    • When combining HMS display with 'round times to whole number' only the major time component is displayed
    • Fix for due tasks not being updated when midnight hits
  • 1.1-5.0.x (removed by .dan.g.)
  • 1.0 (4 Nov 2003)
    • Initial release.

About the Author

.dan.g.


.dan.g. is a former chartered structural engineer from the uk. He's been programming for 25 years since university and has been developing commercial windows software in Australia since 1998. He has a shaved head and assorted whiskers should you want to recognize him. [update] Dan has now grown his hair and removed his whiskers in an attempt to appear more normal. However he can still be recognized (in the summer months) by the aqua nail-polish he uses on his big toes. [/update]

For all his latest freeware visit http://www.abstractspoon.com/
Occupation: Software Developer (Senior)
Location: Australia Australia

Other popular Applications & Tools articles:

Article Top
Sign Up to vote for this article
Hint: For improved responsiveness use Internet Explorer 4 or above or a Gecko-based browser (FireFox, Safari etc) or Opera 9 or above. Ensure Javascript is enabled and choose 'Normal' from the Layout dropdown and hit 'Set Options'.
You must Sign In to use this message board.
 FAQ Noise Tolerance Search comments 
 Layout  Per page    
 Msgs 1 to 25 of 639 (Total in Forum: 9,919) (Refresh)FirstPrevNext
Subject  Author Date 
Undoing should be displayedverithin18hrs 10mins ago 
Re: Undoing should be displayed.dan.g.1 hr 15mins ago 
Datalossfkirkholt9:42 11 Dec '07  
Re: Dataloss.dan.g.18:08 11 Dec '07  
feature request: automatically generated changelogurlwolf9:52 10 Dec '07  
Re: feature request: automatically generated changelog.dan.g.1 hr 9mins ago 
Font Support in the Task Listajstadlin16:29 8 Dec '07  
Re: Font Support in the Task List.dan.g.21hrs 34mins ago 
Re: Font Support in the Task Listajstadlin11hrs 24mins ago 
Clicking the non-task area does not clear the highlight (or keyboard trouble)[d3m0n]17:49 7 Dec '07  
Re: Clicking the non-task area does not clear the highlight (or keyboard trouble).dan.g.1 hr 7mins ago 
Cancelling the dragging of an item leaves artefacts[d3m0n]17:33 7 Dec '07  
Re: Cancelling the dragging of an item leaves artefacts.dan.g.21hrs 43mins ago 
Copyright notice incorrect on right-clicking TDL system tray icon[d3m0n]17:15 7 Dec '07  
Re: Copyright notice incorrect on right-clicking TDL system tray icon.dan.g.17:44 9 Dec '07  
Re: Copyright notice incorrect on right-clicking TDL system tray icon[d3m0n]18:25 9 Dec '07  
Undo for Sortingverithin10:41 7 Dec '07  
Re: Undo for Sorting.dan.g.17:46 9 Dec '07  
ToDoList 5.4.a5.dan.g.5:03 7 Dec '07  
Speedverithin1:26 8 Dec '07  
Re: SpeedValik1:40 8 Dec '07  
Re: Speed.dan.g.17:50 9 Dec '07  
Re: Speedverithin11:20 10 Dec '07  
Re: Speed.dan.g.1 hr ago 
Re: ToDoList 5.4.a5Valik18:20 10 Dec '07  

General comment    News / Info    Question    Answer    Joke / Game    Admin message

PermaLink | Privacy | Terms of Use
Last Updated: 21 Nov 2007
Editor: Chris Maunder
Copyright 2003 by .dan.g.
Everything else Copyright © CodeProject, 1999-2007
Web13 | Advertise on the Code Project
ASP AllianceDeveloper FusionDevelopersdexDevGuruProgrammers HeavenPlanet Source CodeTek-Tips Forums