The Wiert Corner – irregular stream of stuff

Jeroen W. Pluimers on .NET, C#, Delphi, databases, and personal interests

  • My badges

  • Twitter Updates

  • My Flickr Stream

  • Pages

  • All categories

  • Enter your email address to subscribe to this blog and receive notifications of new posts by email.

    Join 1,860 other subscribers

Archive for the ‘Delphi 10.1 Berlin (BigBen)’ Category

The Delphi Vcl.Forms.TApplication.ActionUpdateDelay unit is … milliseconds

Posted by jpluimers on 2016/11/24

Don’t you love relevant documentation…

There is no unit defined for the Vcl.Forms.TApplication.ActionUpdateDelay – RAD Studio API Documentation.

It is used inside the TAppliation.Idle to fire the (undocumented) TApplication.DoActionIdle method. When the value is zero or less, then each Idle call will result in an DoActionIdle call in turn calling TCustomForm.UpdateActions for any visible form.

UpdateActions in turn will call (for the form itself, all the form’s menu items and all the form’s controls) the TControl.InitiateAction which – if there is an associated ActionLink – will call the TBasicActionLink.Update which in turn will call the TBasicAction.Suspended and TBasicAction.Update methods of which the latter will call the TBasicAction.OnUpdate event if it is assigned.

In theory, the OnUpdate method for each action can even be called multiple times (because multiple controls on visible forms can point to it), but the real culprit is that TApplication.Idle as it can be called from these places:

  • TApplication.DoApplicationIdle
  • TApplication.HandleMessage (in a loop from TApplication.Run)
  • TCustomActionMenuBar.ProcessMenuLoop (in a loop)
  • TCustomRibbon.DisplayKeyTips (in a loop)

The last three (especially HandleMessage) can be disastrous as they can be called a lot (for instance when moving the mouse), and more often than not, the OnUpdate event handlers aren’t exactly CPU friendly.

A while ago I bumped into an application where the OnUpdate event handler for one action was called half a million time in under 5 minutes.

This clearly indicated a huge problem (besides using a full CPU core slowing down the application) as apparently something was broadcasting Windows Messages like crazy.

Investigating and Solving the message flood is on the back-log with a reasonably high priority, but the highest priority issue was fixing the high CPU usage in the first place.

Apparently more users suffer from this, as there is a Vcl.Forms.TApplication.ActionUpdateDelay property which TApplication.Idle uses to call the Windows API function SetTimer to rate-limit the TApplication.DoActionIdle call tree. Luckily SetTimer does have documentation on the unit of ActionUpdateDelay: it’s milliseconds.

I’ve set it to 10 as that updating the actions ~100 times a second is fast enough for this application.

–jeroen

via:

Posted in Delphi, Delphi 10 Seattle, Delphi 10.1 Berlin (BigBen), Delphi 2007, Delphi 2009, Delphi 2010, Delphi XE, Delphi XE2, Delphi XE3, Delphi XE4, Delphi XE5, Delphi XE6, Delphi XE7, Delphi XE8, Development, Software Development | Leave a Comment »

ReservedWordsOP.txt and ReservedWordsC.txt for use with java2op in Delphi

Posted by jpluimers on 2016/11/22

Since these files got missing again: [WayBackDoes anybody know where to get ReservedWordsOP.txt and ReservedWordsC.txt for java2OP.exe in bin\converters\java2op for Delphi 10.1 Berlin upd2? It also… – Rik van Kekem – Google+

Here they are:

Read the rest of this entry »

Posted in Delphi, Delphi 10 Seattle, Delphi 10.1 Berlin (BigBen), Development, Software Development | 2 Comments »

Positive: Delphi 10.1 Berlin Update 2 is out – ISO links

Posted by jpluimers on 2016/11/15

Since I’m lazy and always misplace how to get the ISOs:

–jeroen

Reference: Positive: Delphi 10.1 Berlin is out; negative all Embarcadero HTTPS sites still vulnerable to DROWN attack « The Wiert Corner – irregular stream of stuff

Posted in Delphi, Delphi 10.1 Berlin (BigBen), Development, Software Development | 1 Comment »

The SelectiveDebugging plug-in now supports Delphi 10.1 Berlin.

Posted by jpluimers on 2016/11/08

This post is a reminder to myself that this plugin exists at all.

Hopefully by this time it supports more recent Delphi versions as well; when scheduling this post, it supported from XE to 10.1:

My SelectiveDebugging plug-in now supports Delphi 10.1 Berlin. The updated download can be found at the end of the corresponding blog post:… – Uwe Raabe – Google+ [WayBack]

–jeroen

via:

Posted in Delphi, Delphi 10 Seattle, Delphi 10.1 Berlin (BigBen), Delphi XE, Delphi XE2, Delphi XE3, Delphi XE4, Delphi XE5, Delphi XE6, Delphi XE7, Delphi XE8, Development, Software Development | Leave a Comment »

In `System.SysUtils`, `class function TCardinalHelper.Parse` throws errors for valid Cardinal values

Posted by jpluimers on 2016/10/05

Oh nice System.SysUtils.TCardinalHelper.Parse:

class function TCardinalHelper.Parse(const S: string): Cardinal;
begin
  Result := StrToInt(S);
end;

Which means you get this nice EConvertError with message ''4294967295' is not a valid integer value'. with this simple test (which doesn’t even reach the Assert):

uses
  System.SysUtils;

procedure Cardinal_Parse_High_Cardinal_Succeeds();
var
  Expected: Cardinal;
  Value: string;
  Actual: Cardinal;
begin
  Expected := High(Cardinal);
  Value := Expected.ToString();
  Actual := Cardinal.Parse(Value);
  Assert(Expected = Actual);
end;

So I write some unit tests (see below) of which helpers for these types fail in one way or the other:

  • Cardinal
  • NativeUInt
  • Single
  • Double
  • Extended

These work for the boundary cases:

  • SmallInt
  • ShortInt
  • Integer
  • Int64
  • NativeInt
  • Byte
  • Word
  • UInt64
  • Boolean
  • ByteBool
  • WordBool
  • LongBool

 

–jeroen

via: Oh nice, in System.SysUtils: “` class function TCardinalHelper.Parse(const…

Read the rest of this entry »

Posted in Delphi, Delphi 10 Seattle, Delphi 10.1 Berlin (BigBen), Delphi XE4, Delphi XE5, Delphi XE6, Delphi XE7, Delphi XE8, Development, Software Development | 5 Comments »

How to deploy a Delphi OSX project from the command line – kouraklis.com

Posted by jpluimers on 2016/09/28

This is so cool: How to deploy a Delphi OSX project from the command line – kouraklis.com [WayBack]

I always wanted to hack the communication path to PAServer [WayBack] – despite issues – but never had the time. Luckily others had…

See:

The reason I like this very much are many. Just a few:

Read the rest of this entry »

Posted in Delphi, Delphi 10 Seattle, Delphi 10.1 Berlin (BigBen), Delphi XE4, Delphi XE5, Delphi XE6, Delphi XE7, Delphi XE8, Development, Software Development | Leave a Comment »

com – Delphi [weak] reference attribute produces “Invalid class typecast” when implementation is in more than one library – Stack Overflow

Posted by jpluimers on 2016/09/21

Source: com – Delphi [weak] reference attribute produces “Invalid class typecast” when implementation is in more than one library – Stack Overflow

via: Interesting question and excellent answers about [weak] references (not to be) used with COM interfaces. – Ondrej Kelle – Google+

 

Posted in Delphi, Delphi 10.1 Berlin (BigBen), Development, Software Development | Leave a Comment »

Delphi Code Monkey: Delphi Features I Avoid Using And Believe Need to be Gradually Eliminated from Codebases

Posted by jpluimers on 2016/09/21

Hear, hear! Delphi Code Monkey: Delphi Features I Avoid Using And Believe Need to be Gradually Eliminated from Codebases

Posted in Delphi, Delphi 10 Seattle, Delphi 10.1 Berlin (BigBen), Delphi 2007, Delphi XE, Delphi XE2, Delphi XE3, Delphi XE4, Delphi XE5, Delphi XE6, Delphi XE7, Delphi XE8, Development, Software Development | Leave a Comment »

New Book: MVVM in Delphi by John Kouraklis should be available at the beginning of november.

Posted by jpluimers on 2016/09/13

John Kouraklis last week announced a new book: MVVM in Delphi.

It will be available early november and is already listed at the APress site: MVVM in Delphi – Architecting and Building Model View ViewModel Applications [WayBack] where you can pre-order.

It’s good to see that the last years more Delphi books have been published and I hope this MVVM book falls in the more advanced category.

Since I’ve given a few Delphi MVVM talks (latest at https://github.com/jpluimers/Conferences/tree/master/2013/20131121-BE-Delphi) I’m genuinely interested. So I will get this book and – time permitting – write a review.

Nick Hodges did the technical review, and since Nick’s book are great I have high hopes (:

From the APress site:

Full Description

Dive into the world of MVVM, learn how to build modern Windows applications, and prepare for cross-platform development. This book introduces you to the right mindset and demonstrates suitable methodologies that allow for quick understanding of the MVVM paradigm. MVVM in Delphi shows you how to use a quick and efficient MVVM framework that allows for scalability, is of manageable complexity, and provides strong efficiency.

One of the biggest challenges developers face is how to convert legacy and monolithic Delphi applications to the MVVM architecture. This book takes you on a step-by-step journey and teaches you how to adapt an application to fit into the MVVM design.

What you’ll learn

  • Gain the fundamentals of MVVM
  • Visualize MVVM as a design philosophy
  • Create easy-to-use frameworks for building your own MVVM applications
  • Develop a methodology for converting legacy applications to the MVVM pattern
  • Architect cross-platform and multi-lingual applications using the MVVM pattern

Who this book is for

Delphi developers with a good knowledge of Delphi or programming experience in a different language. In addition, this book is attractive to Delphi developers who want to modernize existing applications based on the MVVM design.

and

Table of Contents

1. MVVM as Design Pattern
2. Setting Up the POSApp
3. MVVM as Design Philosophy
4. Two-way Communication
5. MVVM and Delphi
6. Planning the Application
7. Developing the Application
8. How to Convert your App to MVVM
A. Appendix: Other MVVM Delphi frameworks

–jeroen

via: New Book: MVVM in Delphi… [WayBack]

Posted in Delphi, Delphi 10 Seattle, Delphi 10.1 Berlin (BigBen), Delphi XE, Delphi XE2, Delphi XE3, Delphi XE4, Delphi XE5, Delphi XE6, Delphi XE7, Delphi XE8, Development, Software Development | Leave a Comment »

Delphi version info table: C# Builder, Delphi 8 through 10.3 Rio and Appbuilder

Posted by jpluimers on 2016/09/06

I’ve published the Delphi version info table as a Gist: https://gist.github.com/jpluimers/b5891600b73642788b492393710c6070.

Note I need help with these:

The updated script that forms the base of this table is here: https://bitbucket.org/jeroenp/wiert.me/src/tip/Native/Delphi/Scripts/List-Delphi-Installed-Packages.ps1

You can pass any of these args to get information

  • Individual columns:
    • CompanyNames, Versions, ProductNames, ProductVersions, BetaNames. ReleaseDates, Architectures, CharacterSets, Defines, CompilerVersions, RTLVersions, DllSuffixes, ProjectVersions, Frameworks, ProductVersions, ProductFullNames, BaseKeyPaths, HKCU-BaseKeyPaths, HKLM-BaseKeyPaths
  • Base of the below table:
    • ProductSummaries
  • Installed info (installation status obtained through the registry):
    • InstalledProductVersions, InstalledProductFullNames, InstalledProductSummaries, InstalledPackages

An elaborate wrapper around the Define column is jedi.inc which is used in many projects (both open source and closed source) to distinguish between various Delphi versions, libraries and platforms at compile time (URL: github.com/project-jedi/jedi/blob/master/jedi.inc)

Read the rest of this entry »

Posted in .NET, C#, C# Builder, Delphi, Delphi 10 Seattle, Delphi 10.1 Berlin (BigBen), Delphi 2005, Delphi 2006, Delphi 2007, Delphi 2009, Delphi 2010, Delphi XE, Delphi XE2, Delphi XE3, Delphi XE4, Delphi XE5, Delphi XE6, Delphi XE7, Delphi XE8, Development, Software Development | 5 Comments »