Categories
Components Tools

Indispensable Delphi Libraries

What are your indispensable Delphi libraries? The 3rd party libraries you just can’t imagine starting a new project without? I know mine have changed over the years and we have an interesting new crop of libraries in recent years. I listed some unit testing libraries recently, but thought it would be useful to focus on general purpose libraries (as opposed to visual component suits). Here are some open source libraries I either find myself using a lot, or I look forward to using:

I’m sure there are a lot that I am missing . . . What would you add to my list?

20 replies on “Indispensable Delphi Libraries”

If a VCL Project:
OpenSource:
JCL
JWAPI
JWSCL
TP Orpheus

Commercial:
TMS Cloudpack
TMS Pack
DevExpress suite
ElevateDB
Eurekalog
FastReport
ImageEn
eDocEngine from Gnostice
LMD
Raize Components
iPWorks

Delphi-Coll is very useful, in theory. Unfortunately, it’s currently a dead project because the Delphi team doesn’t want to implement proper generics folding, and without that, even light usage of the collections can easily add several MB to your binary size. Alex said that until that gets done, there’s really no good reason to keep working on the Collections library.

Stuff I use a lot:

JVCL
DSharp
OTL
DWScript (which I’m also a contributor to)
MadExcept / EurekaLog (don’t deploy *anything* without one of these two in your project)
VirtualTreeView
FastMM4 full version (FullDebugMode is indespensable for tracking down memory-related errors)

Sampling Profiler (not a Delphi library, but one of the most useful Delphi performance tuning tools anywhere)

There have been some great libraries that have saved a lot of time in the past, but that I don’t use on a daily basis. A good example is dspack, which I used for real-time streaming and video processing from cars. I remember inspecting its source code, and being very happy that I didn’t have to implement or even know about all the low-level details.

I install the following libraries by default, no matter what project I’ll be working on:

– VirtualTreeView
Should be included in the VCL. A fork that makes use of modern language features would be useful though.

– SynEdit
It’s missing some of scintilla’s features, but it’s 100% delphi code.

– Graphics32
Project seems to be kind of dead, but it still works.. easy to use and very fast.

– SuperObject
I’ve tried many JSON libraries, and this is the one that I like the most.

Of course, our Open Source librairies:
– Synopse mORMot Framework, which is a powerful SOA / ORM, including stub/mocks, HTTP server, REST / JSON process;
– Synopse DB layer: not RAD, but much faster and simple to work with than any other DB.pas / TDataSet based libraries;
– Synopse PDF Engine, which is a PDF writer, also from TMetaFile/TCanvas or code-generated reports;
– GDI+ library for anti-aliaised drawing of TMetaFile/TCanvas;
– SynCommons, for logging, UTF-8 process, unit testing, algorithms.

I have worked with Delphi5 Professional and would the created programs expand with powerfull Active-components. I hope to achieve this with Delphi XE5 Professional.

@Turbu: Plz stop pushing debug hooks in production code. You can almost hack that kind of sh*t from a scripting language ( ;0) ). Doesn’t help to promote Delphi at all.

1. Anything Dream controls. I updated it myself after they “disappeared” and asked them to open source it. No serious answer.

The rest of the “essentials” are either GUI related and therefor not essential or have proven just not good enough, apart from the little furry animal 😉 I would also make an exception for the NON-libraries, like the profiler. I rather link to proven C code libraries in production quality code. And spend a lot of time to get that right.
Just as I do with python, btw.

My additions in no particular order:
– VirtualTreeView
– Snopse PDF
– SynEdit
– dxGetText

Argh. The post above by “turbu” is me. Looks like Gravatar somehow automatically filled in the naming and got it wrong.

@Thaddy: I’m not sure I understand what you’re saying here. What do you mean?

What I mean is that you never ever, *ever* use madexcept in production code. That is a stupid and, frankly, moronic, suggestion. (That is the very polite answer)
It is a wonderful testing and debugging tool, though. But feel free to add some less intrusive logging yourself 😉 Good programmers don’t make rational decisions about marketing (or computer science) very often. Mad is a very good tool and I respect it. It should NOT however, be present in ANY production code in the wild.
– It hurts performance (still: after all those years big time)
– it relies on tricks/hacks
– it is a security risk because of the known! hooks all over the place.
– it does not contribute to problem solving very much.

This is from experience with the product. I still use it on customers sites, but not in release code.

@thaddy

– It hurts performance (still: after all those years big time)

No it does not.

– it relies on tricks/hacks

So what?

– it is a security risk because of the known! hooks all over the place.

No. In what way is security compromised?

– it does not contribute to problem solving very much.

Only if you are incapable of reading stack traces.

For my projects, which are freeware utility releases primarily aimed at the general public, I use a few third party libs;

– Mitov AudioLab, OpenWire, etc.
– XSuperObject (Crossplatform JSON library based upon SuperObject)
– TFiremonkeyContainer (VCL component – allows embedding an FMX form inside a VCL form, like a frame – very handy if you need an FMX UI with Windows Message support)
– MagWMI

For threading, I used to use OTL but with the need for cross-platform, I’ve been developing my own proprietary codebase. It’s based on the normal TThread class but I’ve decided to turn it into a reusable library. Not sure if or when I’ll release it, but it’s safe to say it’s primarily aimed at being an easy to use callback method as opposed to something as extravagant as OTL.

Most everything else I need is either available in the RTL, has a lot of public code samples available, or if it’s visual I’ll simply just use style objects in FMX and make something from existing controls. It’s safe to say there’s very little I can’t create myself on the visual side of things.

Delphi-Coll is nice if you are *really* into collections. But Spring4D has most use cases covered unless you need some *very* special kinds of collection types.

@Thaddy Please get informed before ranting nonsense.
madExcept in a release application does nothing more than replacing the default exception handler (the MessageDlg that shows you the exception message you know) with it’s own that shows *slightly* more useful information. There is no debug information if you compiled the application with release config.

@Thaddy: I’m not sure I follow. MadExcept is not “and debugging tool … [that] should NOT however, be present in ANY production code in the wild.” Exactly the opposite, in fact. It’s a horrible testing and debugging tool simply because when you’re testing and debugging, what you already have available (the debugger) is far more useful than an exception logger.

The only reason to use an exception logger is “production code in the wild,” which is its intended usage: when something goes wrong, it provides you with the sort of debugging information that would otherwise be impossible to obtain from the user.

I have one user who’s sent me several reports that go something like this: “I tried doing X and it crashed. Bug report attached.” His descriptions are frequently useless, but when I look at the exception log it tells me what class of error occurred, and exactly where the code was and what it was doing at the time. I’m a bit puzzled by your assertion that having this information available “does not contribute to problem solving very much;” I find it invaluable!

@Thaddy (and @Mason): I too agree with Mason – madExcept and Eurekalog are essential /release/ build tools, not debug. That said, I often find Eurekalog (the one I use) catches some things better than the IDE itself does in really tricky situations, eg some thread crashes where the stack is hard to capture, and from time to time it can be useful in debug too.

These tools are designed for release use – that’s what they’re for. They’re for capturing problems on customer’s computers you can’t reproduce yourself, and giving you the info you need.

Is someone using Delphi-Coll with XE5?

It fails to compile as soon as it tries to typecast Keys and Values to TObject, like this (Collections.Dictionaries):

TObject(AKey).Free;

Am I missing something or is the version 1.1.1 only ready for the use with XE?

Hello Guys

If anyone has the components “dream collection”, please send to my email pr.mas@bol.com.br

I am in dire need to update a project to SynEdit, and need to open the files but many errors occur for lack of this library.

I can not find neither the trial of this collection on the Internet. You know where to download the trial to send the link to my email.

Thank you!

Marcos

Comments are closed.