VisualHint's blog
Jun15
Update: the discount is now closed.
Starting today, a 30% discount will be applied to all products and renewals (except full site and
worldwide licenses). The reason is twofold:
The crisis is difficult for everyone and now especially for eurozone customers who suffer from a
depreciation of their currency. Lowering my prices is a kind of participation to the recovery
effort. This is a medium term decision and I have no firm expiration date.
For the shorter term, I will be in vacations from June 23 to July 7 (almost no kind of support can
be provided) and from July 12 to July 20 (minimal support can be provided). So I thought this was
also a reason for lowering the prices during the summer. But anyway if you place a purchase during
this period, your subscription to support and updates will be extended with one additional month.
These discounts won't last forever so grab them while you can, even if your subscription is still
active.
Have a good summer!
Jan29
Starting on this Friday, Jan 29, I have triggered the DNS changes that will make visualhint.com point to its new home.
Why this move?
So far visualhint.com was a site written in php and hosted at a linux host. I was using the ExpressionEngine CMS to handle the html pages, the dynamic parts like the blog and announcements, the protected downloads and the sales through paypal. I had also a helpdesk system. This was rather flexible but it has 2 drawbacks for me: it is written in php (which is not something I master) and it is too generic. I need more flexibility to handle my customers, licenses and downloads. Being a .net guy, and also because I fell in love with asp.net MVC, I decided to rewrite my web site completely for my exact needs and I'm proud, excited (and a bit frightened) to unveil it now with a first version. It is not fully functional but its core is stable enough to make the jump.
What does it mean for you?
So far, as a customer, you had just the strict minimum: a link to download your product and your serial number. Starting with the new site you will be able to:
- See your orders
- See your subscriptions, expiration dates and status
- See your downloads and serial numbers
- Receive automatic reminders (in time... can you imagine this was manual so far?)
- Purchase in CAD$ if you are canadian (it had to be a manual process outside the site so far)
I will ask you to login next week to the VisualHint web site and check your profile, subscriptions and access to downloads/serials. Please let me know if you see something wrong which does not correspond to your actual purchases. Also bear with me if you see some bugs, like receiving a reminder email several times. Here again, please inform me. At last, because all the backend is under my control, you can send feature requests about the web site. Thanks in advance.
About prices, something new?
Yes, the policy about renewals changes in your favor. So far, after your subscription to support and updates expires, you had a one month grace period to renew at a discounted price. After this period, the full price had to be paid again to renew for a year. Starting now, the grace period remains, but a simple late fee will be added (30% for the first year not renewed, 60% the second year and so on). Here is an example: for SPG.Net with sources, after the grace period, you had to pay 308 US$. Now, if you want to renew 3 months after the expiration, you will have to pay 114 US$ (the normal renewal price) + 30%, so 148 US$ instead of 308. 14 months later, it would be 114 US$ + 60%, so 182 US$. Nicer, no?
What are the next steps?
Some things will cease working: the forums (the current ones were underused anyway), the helpdesk and the MFC product pages. So at first, on the support page, you will just see an email address. Use it to contact me. I postpone the development of the forums and helpdesk because I want first to focus on my admin panel which is a central part of my new site and it must work flawlessly. I will add some new features to it bit by bit (like a dashboard, stats, and so on) which are many things invisible to you. Then I will get back to the helpdesk.
If you have any question about these changes, feel free to contact me. Also thank you in advance to put up with the small inconveniences attached to this change which is something important for the future of VisualHint.
May20
... or at least for properties that care publishing two standard values.
In the real life, you won’t always have a boolean to represent 2-states variables. Sometimes, you may have an arbitrary type, for example a simple class with two static members (something like Breaker.Opened / Breaker.Closed) or the couple null / anything. Welcome the retouched checkbox inplace control to show this property as a single checkbox. The rule is this: if your property is not a boolean, not an enumeration and not a collection, then the PropertyGrid will check if there is only two standard values (published by a TypeConverter or manually assigned by you). If this is the case, the single checkbox will be used to let the user switch between these values.
In case you are not sure how to do it with your type, there is an example in the updated sample.
Oct14
A few hours after announcing the addition of a totally new MonthCalendar to the DateTimePicker supplied in Smart FieldPackEditor, here is an addon class that will paint the calendar with the Krypton palettes.

The effect with the various built-in palettes is very professional and I must congratulate Phil of ComponentFactory for the excellent job he does with the Krypton Toolkit. His product is not only a suite of very polished controls, it is also a library that 3rd party developers can use to paint their own controls. And this is a joy to use.
The supplied drawing manager for krypton painting is an example with my own tastes. You are free to modify it or derive your own class from it. If you hit some limitations related to the drawing, your feature requests are welcome (this is true for the features of the calendar too, of course).
The free MonthCalendar, as well as the Krypton drawing manager and a sample are all zipped in this archive.
Oct14
There was a miss in the DateTimePicker. The editor was able to take any CultureInfo to localize the displayed strings but the popup calendar was not, simply because SFPE was still using the Microsoft MonthCalendar which accepts only the culture of the thread. It had to be fixed so I decided to write my own calendar.

This choice was also motivated by a second category of customers who use the free Krypton Toolkit API. This framework has no DateTime components (yet). For them I had just to ensure that my calendar is skinnable. But more on this in another post.
Not to make a big change, my calendar by default looks like the MS one (+ a mouse hover effect) and has the following features:
- It is completely free (see at the bottom). Why? Simply because this is not my business and the community needs a good one that is also supported in a commercial package
- It can be used standalone or inside the SFPE DateTimePicker
- It has a CultureInfo property
- It is not limited by the fateful 1753 year but by what the DateTime type can accept
- It can display an optional and localizable "Today" button
- It is nullable, so it can display an optional and localizable "Clear" button too
- There is a true continuous acceleration when keeping the month and year buttons pressed
- An overridable drawing manager allows you to customize its look
There are some limitations for this first release, simply because I needed a simple calendar for the DateTimePicker:
- It displays only one month (no rows and columns of months)
- It doesn't handle range selections
- There is no bolded dates
That said, you have nothing to loose trying it. It's free and I think this is not just another calendar component. Personaly I tried the various ones proposed by some famous component vendors and I was not so impressed. They put the accent on the nice themes, but each time I was able to find a visual glitch or an annoying limitation.
Even if you are not a VisualHint customer, you can send me feature requests and I will enhance this calendar bit by bit (here in the comments or at UserVoice). Let me know if you like it too...
Get the month calendar here (the supplied sample references the free Krypton toolkit, so if you don't want that, simply remove the reference and the corresponding code in the form class).
Oct01
In 2002, when VisualHint was not born yet, I was proposing some components written in C++/MFC under the name aircom.org. The MFC PropertyGrid appeared there, as well as a DateTimePicker and color components.
Today I retrieved a nice little program, called DeskDate that I was selling for a modest 9.95 US$, and reinstalled it on my machine. Take it! It's now free (I'm not responsible if it destroys your computer, bla bla bla). DeskDate displays a permanent calendar on your desktop (you choose the number of rows and columns, and the color), behind all windows (you can bring it on the foreground with a hotkey). Right-click to access the preferences. Here is a screenshot:

Now, does it give you a clue about my new task for SFPE?
Sep19
The TimeSpanEditor was able to do it but not the DateTimePicker due to the way DateTime.Parse works. I have changed that and the DateTimePicker is now able to show a different suffix depending on the day of the month. Here is an animated screenshot:

To work, you need to handle the ValueChanged event, like this:
private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
{
FieldPack fieldPack = (sender as FieldPack);
Field field = fieldPack.GetField(3);
if (field != fieldPack.EmptyField)
SetDayLabel(fieldPack.OwnerEditor as DateTimePicker, field);
}
private void SetDayLabel(DateTimePicker dtp, Field field)
{
if (dtp.Value != null)
{
DateTime value = (DateTime)dtp.Value;
string suffix = "th, ";
if (value.Day == 1)
suffix = "st, ";
else if (value.Day == 2)
suffix = "nd, ";
else if (value.Day == 3)
suffix = "rd, ";
if (!field.Value.Equals(suffix))
{
field.Value = suffix;
field.OwnerFieldPack.OwnerEditor.RecalcLayout();
}
}
}
Depending on your language, you can of course change the prefix. Note that there is no particular requirement for the format string.
Jul30
These 2 editors in SFPE.Net can now display a new field for frames per second. The maximum number of frames per second can be chosen in the format string. Here is a screenshot to show you an example:

As you can see, it takes the "v" character followed by the max frames count. Even a floating number can be used, like 29.97 for NTSC.
Note that this comes from a feature request received on July 16. I found it so useful (being a video editing fan myself) that I decided to work on it. The SFPE framework is so nice to use that I published the final result on July 23. Knowing that I had to work on other stuff as well, this surprised my customer who then sent one of the testimonials you can see on this page.
Jun23
As promised last week, here is a screencast showcasing the features of the new TimeSpan editor, a new creation based on the Smart FieldPackEditor.Net:
Update: SFPE 1.2 has been released.
It is not demonstrated in this video, but I remind you that this editor can be used in the DataGridView and in Smart PropertyGrid.Net too, and with the exact same features.
If you have any question about this editor, just drop me a note here, in the forums or through the helpdesk. You will be able to play with it very soon when SFPE version 1.2 is out.
Jun17
It seems there is no TimeSpan editor for .Net. Can you believe it? So when a customer asked me if it was possible to make one with Smart FieldPackEditor.Net, I realized I could fill a gap with a full featured duration editor, based on the flexibility of SFPE. And this is what is coming in version 1.2.
Update: a screencast has been published.
First here is a nice screenshot taken from the updated supplied sample:

You can see the editor in action and a subset of its properties in a PropertyGrid. And here are its features:
- It can be used standalone, in Smart PropertyGrid or in the DataGridView. In the last case, the column of the grid can have the timespan type, long type for ticks and double type for seconds).
- Flexible format string:
• D for days without leading zeros
• d for days with leading zeros
• H for hours without leading zeros
• h for hours with leading zeros
• M for minutes without leading zeros
• m for minutes with leading zeros
• S for seconds without leading zeros
• s for seconds with leading zeros
• F (up to 7 times) for ticks as fraction without trailing zeros
• f (up to 7 times) for ticks as fraction with trailing zeros
• T (up to 7 times) for standalone ticks without trailing zeros
• t (up to 7 times) for standalone ticks with trailing zeros
• ":" for the time separtor
• Static fields can be added, something like d 'days' H 'hours'
- Min and Max values can be set.
- The most significant field has no max value (except as specified by the global max value set), so you can have a value of 24 hours and more if needed.
- Updown button can be displayed.
- Nullable (with delete key or checkbox).
- Auto-incrementation can be switched on (for ex, seconds passing from 59 to 0 will increment minutes, and so on).
- A new FieldAdded event allows you to modify a field on the fly, for example to change the “day” static string to the plural “days” depending on the current value.
This new editor is a free addition to Smart FieldPackEditor.Net and is planned for release in a few days. A screencast will also be published next week.