Archive for the ‘Delphi’ Category
Posted by jpluimers on 2009/05/25
When using TFS (Team Foundation System) 2008 as a Version Control / Source Code Management system not only for your C#, but also for Delphi projects, this is a good filter string when using the ‘Compare Folders‘ function of TFS:
!*.pdb;!*.obj;!*.dll;!*.exe;!*.res;!*.resources;!*.cache;!*.ilk;!*.ncb;!obj\;!objd\;!bin\;!lib\;!*.local;!*.identcache;!*.dcu;!__history\;!*.dsk;!*.~*;!*.stat;!*.drc
This is the regular Folder Comparison Filter – the bold above is the addition and the link contains an explanation of the filter syntax:
!*.pdb;!*.obj;!*.dll;!*.exe;!*.res;!*.resources;!*.cache;!*.ilk;!*.ncb;!obj\;!objd\;!bin\
Hope this helps some of you in reducing the amount of clutter in the resulting comparisons :-)
–jeroen
Posted in .NET, C#, Delphi, Development, Software Development, Source Code Management, TFS (Team Foundation System) | 3 Comments »
Posted by jpluimers on 2009/05/15
I have edited the Conferences, seminars and other public appearances/ page and extended the list of conferences I have attended in the past including many sessions.
Topics covered in these sessions have been C#, Delphi, Databases, Linux, Kylix, debugging, Compact Framework, and much much more.
Let me know which sessions you’d like to see online first.
The list is far from complete, but it is another step into getting the list more accurate.
–jeroen
Posted in .NET, C#, C# 2.0, Component Development, Conferences, Database Development, Delphi, Designer Development, Development, Event, Firebird, InterBase, Package Development, Software Development, SQL Server, Visual Studio and tools, XML, XML/XSD | Leave a Comment »
Posted by jpluimers on 2009/05/12
With my blog posting last week on Delphi – class helper to add for … in support for TComponent.Components/ComponentCount I ‘lied’ a bit.
What I actually wanted to do was write code like this:
for Component in Self.ComponentsOfType(TSQLQuery) do
(Component as TSQLQuery).SQL[1] := FTableName;
This filters the enumeration to only enumerate components that are of type TSQLQuery or descend from type TSQLQuery.
So I wanted to write a ‘richer’ enumerator than just iterating over all components.
The scond part of the lie is that such an enumerator in fact already exists: there is already a TComponent.GetEnumerator method.
Primoz Gabrijelcic’s – web/blog – rightly noted in the comment where he pointed to a similar blog post he wrote for TControls.
Since I wrote this post last week as well, but scheduled to be published right before DelphiLive!, I just added a reference to his comment, site, blog and posting.
TComponent already has a GetEnumerator since Delphi 2006.
But my TComponentEnumerator was meant as a base class to show you how to descend from it.
And that’s what this blog post is about.
Read the rest of this entry »
Posted in Delphi, Development, Software Development | Leave a Comment »
Posted by jpluimers on 2009/05/07
You might have discovered that I’m a fan of Delphi class helpers.
This is another case where I’d like to use the for … in statement: accessing the Components of a TComponent instance.
So I wanted to end up with this:
procedure MyForm.FormCreate(Sender: TObject);
var
Component: TComponent;
begin
for Component in Self do
begin
// business logic goes here
end;
end;
Read the rest of this entry »
Posted in Component Development, Delphi, Development | 12 Comments »
Posted by jpluimers on 2009/05/06
In one of our applications, we have a default Config.xml file that is in our source tree, but it can be overridden by a Config.xml file relative to the application’s .EXE file.
So we have a two step process looking for the Config.xml, and we’d like to have the full path to the source file where the sources were build.
It seems the only way to get that, is by looking inside the Message of an EAssertionFailed exception.
So I wrote yet another class helper to get this code to work:
Read the rest of this entry »
Posted in Delphi, Development, Software Development | 1 Comment »
Posted by jpluimers on 2009/05/06
Two days ago, [Wayback] Michael Justin (who just released version 1.7 of the [Wayback] Habari Active MQ Client components) posted a blog entry about a strange circumstance [Wayback] when 1.99 would not compare equally to 1.99.
He tracked it down to the [Wayback] 8087 (more formally: Intel [Wayback] FPU) Control Word being hosed on his system.
I could not reproduce his particular case, but since I have seen similar issues in the past, I wrote the DUnit test case below which shows you what can happen by manually setting the 8087 Control Word.
The difference between the 8087 Control Word values $1372 (default) and $1272 (failure) is the internal mantissa precision (see the [Wayback] “Art of Assembly Language” and the [Wayback] Intel FPU Control Word documentation on this).
Edit: Found a [Wayback] much more complete description of the bits in the FPU Control word.
It changes from 64 bits to 53 bits, which is enough to make 1.99 not equal to 1.99.
I have seen behaviour like this in the past with some networking stacks in the Turbo Pascal 7 era, with some C++ DLL’s in the Delphi 1-3 era, and some printer drivers in the Delphi 5-7 era.
Let me know in the comments (or using the contact form) where you have bumped into this.
The code below makes use of the Jcl8087 unit which is part of the JCL ([Wayback] JEDI Code Library) at [Wayback] SourceForge.
Add the unit to any DUnit test project you created and observe the results.
Read the rest of this entry »
Posted in 8087, Algorithms, Delphi, Development, Floating point handling, Software Development | 8 Comments »
Posted by jpluimers on 2009/05/06
On 20090504, Atozed announced Crosstalk: a technology that allows native Delphi code to consume .NET assemblies in a really intuitive and transparent way.
The announcement contains a FAQ.
It is a promising technology, not only because it is dead easy to use, but also because it is backed by Atozed: a team of people that have made complex technology like Web Apps easy to use by creating IntraWeb.
Expect demos soon (maybe even at Delphi Live!).
Here is a short example:
Read the rest of this entry »
Posted in .NET, Delphi, Development, Software Development | 3 Comments »
Posted by jpluimers on 2009/04/28
I like enums. Maybe because of my Turbo Pascal and Delphi background. They are descriptive. Makes code easier to read.
public enum TrafficLightColors
{
Red,
Yellow,
Green
}
But using them in C# foreach loops is a bit of a pain, not so much in the loop itself, but more in getting the list of values to loop over.
Read the rest of this entry »
Posted in .NET, C# 2.0, Delphi, Development, Software Development | Leave a Comment »
Posted by jpluimers on 2009/04/27
I just tried to elaborate on an answer to a question from Michael Justin on stackoverflow.
(yes, that’s the author of some message broker clients like the Habari ActiveMQ client that allows Delphi applications to talk to the Apache ActiveMQ message queueing broker).
His question is on virtual constructors and class reference: How can I detect if a Delphi class has a virtual constructor?
The combination of class references and virtual constructors is one of the fundaments of how Delphi became Delphi; in simple terms:
- class references allow you to register components on the component palette in Delphi
- virtual constructors allows the designer to construct the instances of those components at design time
That’s why I think it is important to describe the distinction between virtual constructors and regular non-virtual constructors in the answer below (which is a copy of the answer I posted to stackoverflow)
Read the rest of this entry »
Posted in Delphi, Development, Pingback, Software Development, Stackoverflow | Leave a Comment »
Posted by jpluimers on 2009/04/27
Quite a while ago, a co-worker asked how to get tot the Instance variable when using a with statement like this:
function TMyForm.ExecuteForm(FormClass: TFormClass): Integer;
begin
with FormClass.Create(self) do
try
Result := ShowModal;
finally
Free;
end;
end;
So I wrote the blog entry below when I started my blog last week, and set the published date to somewhere early May, a week that will be really busy.
Then I found out about the Stackoverflow question Reference object instance created using “with” in Delphi followed by the answer by user ‘Alexander‘ (a really smart Russian guy).
Enough coincidence to publish the blog article earlier than scheduled :-)
Before I explain why I really hate ‘with’, lets show what my co-worker wanted, and my solution: Read the rest of this entry »
Posted in Delphi, Development, Pingback, Software Development, Stackoverflow | 2 Comments »