Friday, April 7, 2017

Wednesday, June 15, 2011

Going back to Delphi 5...

Prior to 2007, I had used Delphi 3, 4, 5 and 7. Without exception, they were all fine releases, generally they were great in themselves, but Delphi 4 in particular excelled in that I could uninstall it, put it back in the box and use it to level an uneven bookcase. Of the four versions, I spent at least five years in Delphi 5 and it was my favorite; it was fast, robust and - together with CodeRush - highly efficient.

Then I installed Delphi 2007 and never looked back.

Until now.

I was recently asked to perform a tidy-up job on some forms in a colleague's Delphi 5 application, so I blew the dust off my backup machine and fired up my old comrade, Delphi 5.

I was quite looking forward to it, almost anticipating a tearful reunion, but it felt more akin to this:

The first thing that struck me was how ugly it was, everything is gray, the graphics are all pre-XP and the floating windows are an abomination.

Also, I had in my mind that it was much faster than D2007, but I could not see any appreciable difference in start-up and compilation times (I even fired up D2007 just to confirm).

But these were not the real problems, I had come here to update a UI and for this, after D2007, it was almost unusable. Really! How did I ever layout a form before BorCoDero implemented alignment lines? Oh that's right, you select each control in turn and check the position and size properties in the inspector and manually move each in turn (you can't even hover over the control because in D5 the hint only shows you the control name - helpful). Or you use the alignment palette, except I kept losing the alignment palette under all the other floating windows. And don't go trying to find a new component, because the component palette doesn't filter. You can search it but it only finds component names that match the start of your query.

I take a lot of pride in my UI design and it is generally quite an enjoyable part of my job. Under Delphi 2007 that is. Going back to D5 was miserable and woefully inefficient (I had set aside a few hours to make the changes and it took a whole day).

You really can't go back.

Tuesday, August 11, 2009

Delphi 2010 Offers Delphi 1 Style Component Palette!

I'm almost wetting myself with excitement to hear that Delphi 2010 is returning to the old component palette:

This is certainly a step in the right direction but it doesn't go far enough. I also want to hide the search box on the palette and change the IDE's swish new graphics. It looks way too modern now IMO. Also, there should be options to disable generics, record methods, for in, and other language enhancements because that $h1t just scares me. And can there be an install option that names everything "Borland" Delphi. I don't want to get all flustered trying to find the application shortcut under my Start Menu. And do you think we can pressure NBC into getting the Friends cast back together?

Thursday, August 28, 2008

Automatic Interface and Implementation Synchronization

Serge discussed on his blog about the implementation and interface declarations:

I couldn't help venting about one of my pet peeves, QV:

"This would all be moot if Delphi was intelligent enough to automatically synchronize the interface and implementation sections (including comments and defaults).

It would probably require less than 1000 manhours on CodeGears end and would save twenty million hours in lost productivity each year (conservatively based on 1,000,000 Delphi users saving five minutes each day). I doubt there is any other single change CodeGear could make that would offer that kind of productivity return.

I'm amazed more Delphi users are not annoyed by this blatant contradiction of DRY and shocked that CodeGear have not addressed this remnant of 1980's programming."

Sunday, April 1, 2007

First Screenshots of Delphi 2010 for Win64

WTF! Here we are in 2007 and in a major way, I'm still writing code in the same manner as I did with the Basic apps I hacked for a ZX Spectrum (aka Timex 2000) back in 1985. That is, I'm still coding in a glorified flat file text editor. Let's face it; text file coding ceased to be relevant when we stopped using line numbers (as in GOTO 2100. Ye Gads!)

Fortunately I am able to tell you on a very hush-hush, now-I-have-to-kill-you basis, that CodeGear is working towards a radical new IDE philosophy that presents your code in a more powerful, database like manner. Using the techniques I mastered from watching "Whiz Kids" re-runs I was able to hack into the CodeGear servers and download some preliminary designs and notations regarding their ultra-secret Delphi 2010 for Win64 release. It took over 60 hours on my 2400 baud modem so this better earn me a Cap'n Crunch whistle.

Apparently CodeGear have been watching real developers developing. With a recent release they embedded a camera in the documentation so they could monitor developer activity in a clandestine fashion. It was a risky move given that simply opening the documentation would have exposed the espionage, but despite shipping over 10,000 units not a single camera was discovered.

What they found was startling; of the time spent working within the Delphi IDE, typically only 50% is devoted to coding and the rest is wasted searching, scrolling and mindlessly navigating through units. With this fact in mind, CodeGear have totally changed their IDE mindset, moving to a code editor built onto an underlying database that manages each procedure as a distinct entity, and makes searching and filtering instantaneous and much more powerful.

Also, all aspects of a method or property are managed from a single location. You never have to go two places for to create a procedure (e.g. interface and implementation) or three places to create a property (e.g. interface private variable declaration and implementation).

Delphi 2010 is focused primarily on enhancing developer productivity!

Unfortunately a footnote points out that even if they manage to increase the IDE productivity figure to the desired 90%, ultimately it won't greatly affect overall developer productivity, as they found that only around 10% of a typical workday was actually spent developing, with the remaining time split between browsing programming blogs, configurating internet radio stations and chatting with co-workers.

The details of the new release are still a bit sketchy. What follows are notes and screenshots that I extracted from an internal CodeGear presentation.


Central to the IDE is the new Index which incorporates auto-expanding panels for:

- Project Index: Clicking a unit takes you to the Unit Index
- Unit Index: Shows you the interface of the unit at glance and allows you to drill down to individual classes and procedures
- Project Search Filter: Filters as you search by procedure, variable, description/comment, content, etc
This is the top level index for a unit:

These are the procedures of a unit:
(Note how all items can now have an associated comment/description that is displayed when hovering over an item)

All data is displayed in sortable grids that support in situ editing of items and display further detail in a bubble hint as you hover the cursor.

Displaying the variables of a unit:
(Note that changing the visibility of a variable is a quick two-click affair)

The best part is the filter/search, that instantly displays all relevant items as you type. Note how much control is available over what is searched:

When you click on a procedure to bring up the method editor all the search terms are highlighted.

Method Editor

Code editing is the most radical change in Delphi 2010. As mentioned, flat file editing is gone, each procedure is treated as a separate entity, i.e. you no longer edit units directly, only the procedures within units. You can open as many "Method Editor" windows as you require (single-clicks open the item in the current/main Method Editor, shift-clicks into a new Method Editor).
The new "Method Editor":

Note the navigation buttons that allow you to move to the previous/next procedure of the current unit or search.

Also, new variables are automatically added as you type them into the source (marked in bold). You can even set an initial value for them.

Creating and editing Properties is much simpler with all details available in the one window:

If you right-click a component on your form and select "Edit Events" the code for all events can be viewed and edited at once.

Important Note: Delphi 2010 will continue to save your code and form files to plain text PAS and DFM files, however it also was save a new CDB file which stores all full text searching and other database information. The CDB file is optional and can be recreated as required.

Also, any Luddites out there need not fear, flat file editing will still available as an option.

Other Touted Features

- Debugging within Virtual Machines: Delphi will integrate with popular VM software to allow you to debug under any version of Windows without leaving the IDE

- Voice Recognition: Delphi will be the first product to natively support programming using voice recognition. The limited vocabulary of programming languages have shown it to be an ideal candidate for voice recognition

- Integrated Spell Checking: Misspelt words in strings in the code and designer (e.g. TLabel.Caption) will be underlined. Common misspellings of identifiers will be automatically corrected. Also all string values in units and forms of a project can be spell checked with a single click

- Integrated Timing/Profiling: Without any coding required, profile reports will allow you to easily determine which procedures in your code are taking the longest

- Dual Screen Optimization: Delphi 2010 will be the first version which will be designed primarily for multiple screen and ultra-large screen systems

- Edit and Go: Change code while debugging and the effect will take place immediately without needing to recompile

- New Variable Directive; "Auto": Allows you to use objects in a procedure without needing to create or free them. For example declaring the local variable: MySL: TStringList; Auto; will automatically create a TStringList at the start of the procedure and free it when it goes out of scope. Similarly a ShowHourglass call at the start of a procedure will automatically display an hourglass that reverts to its former value when the procedure ends

- Automatic Template Creation: Delphi will recognize code snippets that you frequently type (ignoring any changed variables, classes, etc) and offer them as templates

- Intelligent Paste: Paste text onto the designer and it becomes a label or memo. Paste a graphic and it becomes a TImage. Paste a set of components into the code editor and the component names are output in a column. Paste a procedure declaration into source and it is reformatted as a procedural call

- Recent Items: Delphi will remember the names of any procedures, classes or variables that you have created or edited recently and allow you to insert them into your code with two clicks (A shortcut to pop up a dialog and a number to choose a recent item)

- Tip of the Day: A standard TOTD dialog will be included offering productivity enhancing hints, efficient coding advice and scone recipes

- Studio and Turbo: Delphi 2010 will come in two versions, a fully-featured "Studio" and a cheaper "Turbo" release. The Turbo version will include two components (TForm and TButton) and a single method (A MessageDlg function hardcoded with the string 'Hello World')

- Animated Character: A cute, animated feculent character nicknamed "Krappie" will popup to offer guidance whenever you perform a task in a manner that is inefficient, unimaginative or lacks je ne sais quoi

- Quality: In an effort to reduce the quality problems that have affected recent releases the entire CodeGear QC team will be fitted with electrified collars. Whenever an IDE crashes a [generally] non-fatal electrical shock will be routed to an appropriate team member.

That's as much as I have for you at the moment. Let me know if you have any questions, as I now have someone on the inside (A little leverage goes a long way, in other words, stay away from those Delphi groupies at the CodeGear conferences, or you might have more to worry about than injuries to sensitive areas from dental retainers). It is imperative that his identity is not leaked, so I'll only be referring to him as "Rick Stodges"


Friday, March 30, 2007

I didn't know that yesterday!

I've already waxed lyrical about Nick Hodges and how much things have improved at CodeGear since he came on the scene. I was going to lay off for a while before I became a full on stalker, but then he goes and posts something that is genuinely useful, not once but thrice on the same day.

OK, so he futzed up the links the first time, that's because he's a marketing/techo schizo like me. And sometimes the marketing part of your brain lets you go and do something impulsive before the techo part has a chance to say, "Hey, that's not gonna work"

So, anyway, he's gone and posted three articles on new features since Delphi 7. It's supposed to get all you D7 stalwarts to pull our your wallet and part with some deniro (yeah, he's talking to you, lard-arse), so you'd think it doesn't apply to me having shelled out a fair wad some six months ago on Delphi 2006. I should know all of this stuff (excluding the D2007 specific items) and mostly i do, but really, i guess i've been stuck in my ways as there are a lot of cool features that i just don't use enough.

Reading Nick's articles was the slap in the face I needed to lift my game:

- Flow Panels: I've known about these for ages, but only acutally used one for the first time the other day. Very useful for forms with dynamically displayed controls

- AlignWithMargins: OMFG, I don't know how I ever lived without this (Oh that's right nested panels, Peeuh!) I cottoned onto AlignWithMargins as soon as I moved to D2006 and have never looked back.


- Class Helpers: Fantastic feature! I don't use these nearly enough!

- Records with Methods: Really? I did not even know about these! I'm a Record junkie and I'm so going to love this feature

- For in Loops: It took me the longest time to use these things. I had to delete "for I:=0 to List.count-1 do" a hundred times before my brain finally got used to the new construct. Now i can't imagine life without them


- SyncEdit: I'm just getting into the habit of using this. Very useful when i do remember

- Live Templates: These are excellent, but i really don't use them anything like i should. The method to create your own templates is quite a PITA and after an initial burst of custom templates I haven't created one in an age. There are about a dozen templates i use frequently and couldn't live without. I'm sure there is a goldmine of productivity there that i 'm just not tapping. I was hoping someone would seize the initiative and start selling Template Packs, but that doesn't seem to have come about. I expect at some point CG will create a GUI editor for LT creation and that will make them much more useful.