You can download Lars' entry from this website.

Total time spent on the project, is about 20 hours in total, which actually is a little more than I had planned, but it was fun... :-)
Notable (and likeable) thing : Totally self-containing exe, with no dependence on any 3rdParty dll's or other kinds of libraries!!!! That is why I love Delphi! :-)
Specify which language and IDE are required to compile the software (if it needs compiling).
- Delphi 2007
Deliver the software, including the sources.
- Attached zip-file
Deliver an executable, if your solution is one.
- In the attached zip-file, is a folder called "bin". The application-exe is in there
If the software requires any third party components, you must specify the maker and the version of the components.
- Components needed is described in the "3rdParty.txt" in the "Documentation" folder
- Components can be found in the "Source\3rdParty" folder, as zipped files.
Deliver installation instructions.
- Copy the exe to wherever you want it, and run it. Optionally set the "Start with Windows" option in the applications options-dialog
Regards
Lars Bargmann, Denmark
©

Lars Bargmanns Experience Log.
Note : Dateformat used in this file is dd/mm/yy
08/07/08 :
- Decided to develop this application using the Nike-method. It's my own name
for the "Just Do It" philosophy, that I decided to use in the development-
phase. This "Getting-Things-Done" approach will undoubtedly leave quite
a lot to be desired in the resulting code regarding object orientation,
separation, inheritance and other nice words, but in the end we will have a
fully working application, which will do what we want it to, and that has
plenty of room for refactoring and other optimizations... :-)
- Starting from scratch with this thing,
due to a lightning crash yesterday in our house, which fried allmost every
electrical appliance, including my main-computer. Even my coffe-machine got
fried!!!! Yeah, I do feel sorry for myself... :-)
- From here on out, this app will be referred to as CUX (Clipboard Usability
eXtension). A new name is under development... :-)
- Well, lets throw the design ideas in here :
- According to specs, CUX is supposed to hook CTRL+C etc. in the active
application. This makes no sense to me (a typical case of the customer
trying to design the product instead of describing the problem, I think)
since the exact same functionality is achived by having CUX monitor
the clipboard for any changes, and keeping a buffer of the last couple of
things that were there... Will probably make this number a user-setting...
- Keep in mind that preliminary tests show, that even though you just throw
simple text at the clipboard, the clipboard itself will present it's
contents as being available in several formats. Every single of these
formats will need to backed up to our apps buffer.
This will be done with objects containing a list of other objects,
containing a formattype-identifier (Word) and a MemoryStream that holds the
data themselves...
- Thinking the idea a little further is off course to persist this, meaning
saving state and clipboard-items and everything to either registry or to
a datafile.
- Thinking this even further, would be to make a second list of items in
CUX, that will constist of the same kind of clipboard-items as in the
buffer, but with a name (and maybe a note/description) and a user-
configurable system-wide hotkey, that will put this item on the clipboard.
- Thinking this even further... The only reason to put something on the clip-
board in the first place, is when you want to paste it again somewhere...
Well, if we allready have the system-wide hotkeys mentioned before, then
why not let CUX handle everything, for yet another kind of item?
Meaning items that will behave like this, when their hotkey is invoked :
- Backing up the clipboard.
- Putting it's own data on the clipboard.
- Waiting for all keys to be unpressed (there will probably be some keys
down from the hotkey) and then "throw" a keypress (CTRL+v) out there, to
make the focused app paste whatever is on the clipboard (which is our
items data)
- Wait a couple of hundred m-seconds, to let the app do what it has to do
- Restore the clipboard
It may not be obvious, but the idea is pure genious... :-)
For places where you type in the same kind of info day in and day out, in
different boxes and what-do-I-know, you'll get the ability to just auto-
paste stuff in there... Idea could be easily expanded with text-macros, like
%DATE%, %TIME%, %USERNAME% and the like... I could imagine this
functionality would be loved in service-desks and call-centers and such...
- It would have been a little easier with Internet-access, to visit my old
friend, Google, to ask a few questions... mainly about, if some nice
freeware components are available for showing the clips in a nice fashion...
- Since I have no internet-access at this time, I'm doing all these trivial
things, such as making sure the app just closes down nicely with Windows,
and otherwise showing a nice dialog...
- Decided to make some options-singleton. Since I'm under a pretty tight dead-
line, I will not have time to implement a huge options-framework.
09/07/08 :
- Still missing my internet...
- Have decided to make CUX use standard-components primarily, to make it
easier to compile for others... Assuming these Darwin-apps are supposed to
be open-source... I'd prefer closed source, though... I can see myself deve-
loping this thing a good bit further... :-)
- Decided to make the number of items in the clipboard-history hardcoded.
There will be 11 slots available, plus the one showing the current contents
of the clipboard.
- Ha, online again... :-D
- In doubt about how to implement the "selection" functionality in the History
window... Should I make some new control, or should I do some simple
calculations and move the grey border around, according to what item is
selected?
- Having some trouble with a form that's not on the screen, but the app thinks
it is, and that it's modal, or something... ??
Hmmm, it seems that the Application-object doesn't know that it's been re-
activated the second time around I show a form... I had to explicitly call
Application.BringToFront, in order to get a second Application.OnDeactivate
- Hmmm, weird... OnKeyDown for the Arrow-keys doesn't work... My friend, Google,
led me to the answer... Making your own messagehandler for CM_DIALOGKEY...
- Actually have a working application now, that does practically everything it
should, according to specs... things missing now, is ability to delete from
the list and re-organizing the list... I have some ideas about how to
implement these functions in a slighty different way than described, but more
on that tomorrow...
10/07/08:
- Ahhh, a new day dawns... Ideas to work on today : Making a context-menu-like
thing for the history-items, and some way of "enlarging" an item to see the
entire item... Maybe even combine these things...
- Didn't really get anything done today... Ahh, maybe tomorrow... :-)
11/07/08:
- Had a bit of a fight with the CoolTrayIcon. I have assigned a PopupMenu to it,
which has a default-item. Well, I also assigned a OnDblClick-handler to the
tray-icon... Ha, both of them fired... Can't really decide if it's me that's
stupid, or if that's an error in the CoolTrayIcon... What ended up happening,
was that the history-window opened, and then closed again... gave me something
of a headache... :-)
13/07/08:
- Didn't get anything done at all, yesterday... Enjoyed my vacation together
with my wife and 3 boys, just doing... nothing, really... Playing in the
garden and such....
14/07/08:
- Implemented a new form, that shows a ClipboardItem... No real hassle...
- Implemented 3 nice small icons in the corner of an item in the history...
Icons that 1) "magnify" the item i.e. showing the entire item in a bigger box,
with more information, and 2) adding the item to the "persistant list" of
items, which is a feature not yet implemented, and 3) dropping down a popup-
menu with more functions, but for now only a "remove" function is available...
- Figured out, that the right win-context-menu-keyboard-button has a value of 93
I have no idea what the left one has, cause this laptop only has the right-
side one... :-)
- Found out that a TScrollBox's ScrollBy method NOT moves the position, but
moves the range instead. That gives weird results. Using Position of the
scrollbars instead works, though...
21/07/08:
- Well, after quite an un-productive week, plaqued by the flu, and generally
just having vacation, I am at it again, for a final run at this...
- Copied the ClipboardHistory-form, made some changes to the copy and calling
it SmartClips. This concept covers todays work : Implementing the persistent
clips, that will reside in this form, and should be available on 12 system-
wide hotkeys (win+F1 through F12, maybe with other modifiers). My thought is,
that these 12 clips should be "changeable" between different profiles,
either selectable or automatic (based on current running program, like
word.exe or something like that).
Furthermore, these clips should not interfere with the Clipboard-buffer, I
think.
These clips will work somewhat different from the Historyclips. These clips
will not place themselves on the clipboard, but instead try to paste them-
selves to whatever program is running, when their hotkey is invoked.
- Hmmm, I don't think I will be able to make it, if I introduce the profiles
right now, so for now there's only 12 available Smartclips, but all coding
will take into account that profiles will be coming... later...
- I think I have practically everything in place, so I might give the profiles
a shot later in the evening... We'll see... :-)
- Ripped out TCoolTrayIcon and used Delphi's own... Aiming for standard-comps...