Peter Overweel

Member since: Monday, 18 July 2016
Last login: 1 year ago
Profile viewed: 649 views

No Rank
Points: 0

Peter Overweel replied to the topic 'Private GetIt Repository' in the forum. 3 years ago

Hello Jonathan,
Very good Feature Request, but you should add this to to have any chance to get rewarded.

I've also added a FR on the GetIt package manager here:
GetIt still doesn't contain "Buy" and "Purchased" components

Would you please vote for it? (If you create a FR for a Private GetIt Repository, I'd vote on your FR too :-)


Peter Overweel replied to the topic 'My opinion of Delphi Starter' in the forum. 3 years ago

Hello William,
Your first post on this forum is imho very valuable feedback to Embarcadero.  I totally agree that Delphi's first and foremost strong point is that Pascal was designed to be an educational programming language. Over the years so many advanced features were added to the language that for any newcomer this strong point is unfortunately very much neglected.
I do think there's a lot of useful documentation and sample code, but I do agree that documentation especially for newcomers is a bit hard to find and not always up-to-date:
● On the Welcome-tab in the IDE you can find tutorials and documentation
● On you can find the Delphi 7 "Developer's Guide", "Quickstart" and "Object Pascal Guide"
● On you can find tons of video's.
And of course there are a lot of really good blogs on Delphi, but for newcomers I'd recommend:
● Žarko Gajić has written over 800 blogpost, most of which very suitable for beginners. Unfortunately the network is a bit of a mess, but you can find all of Žarko's blogposts via

The matter of a free version of Delphi is briefly discussed here:
Maintaining different versions of course involves extra costs for Embarcadero, so therefor it took a while before they complied to the changing market. I've created a feature request to encourage Embarcadero to make the Starter Edition an adware version. I would very much appreciate it if you would vote for it? (

Class completion is available in Delphi. And probably in the Starter Edition?

Code formatting is also available in Delphi. And probably in the Starter Edition? (Though I personally never use it, because I find it a bit scary when a formatter tinkers my code)

Greetz, Peter


Peter Overweel replied to the topic 'Should there be an addware version of Delphi?' in the forum. 3 years ago

Hello TorkelMJ,

Thank you for your contribution. You pointed out some very important points in your response.

Screen real-estate is indeed already very scarce. By default the Structure-Window and the Object-Inspector take up a column on the left, The Project-Manager and Tool-Pallet take up a column on the right and the editor sits in between. Personally I often use CodeSiteExpress, so I must work with a two-monitor setup. Fortunately Delphi enables me to customize the panes. I've docked the Structure-Window, Object-Inspector and Tool-Pallet all onto the Project-Manager pane. This leaves me only one column next to the editor window. This one column can be unpinned as well, making it move-on-hover. This way I occasionally even open a "New Edit Window" next to the IDE. (Delphi XE7 is not 100% without bugs considering extra "Edit Windows" btw) I often wondered why Delphi by default has three columns and I guess it simply mimicked MsVisualStudio. Your point on scarce real-estate is a general problem which in my opinion should be looked at as well. One option might be to add an Two-column Layout. (In addition to the existing "Classic Undocked", "Debug Layout" and "Default Layout") I think this would be such an improvement that I added a Feature Request for it:

Another thing you've mentioned was the distracting factor of ads. I think a lot of websites prove that ads mixed with real content can work nicely, if dealt with carefully. Not everyone is a user-interface specialist and that's ok. Perhaps the compile window would be an acceptable place for ads?
One thing we agree on is the "gone-wild Delphi pricing policy". I think this is a major problem that must be addressed with. I think the solution is to allow advertisements for purchases from the GetIt-store. (Yes I know it's not a real store right now and I'm trying to convince Embarcadero to prioritize on this as well) But perhaps there are other ways too. So to anyone who has ideas: Please feel free to contribute to this topic. :-)


Peter Overweel replied to the topic 'Should there be an addware version of Delphi?' in the forum. 3 years ago

Thnx for your response Alf. :-) I understand your concern and indeed there are a lot of negative examples out there. Relevancy is the key thing in any acceptable add campaign and it's unfortunate genealogical matters were linked to pornographic sites by some obscure matching algorithm.
The key thing I wanted to discuss however was not the matching algorithm. I'm convinced Embarcadero would prefer to have only technology partners in any add campaign, would prefer to work with a whitelist and definitely wouldn't allow popups or scripts. Just as in their newsletter I periodically receive, Embarcadero already regularly promotes several technology partners. Additionally, having an addware version would enable Embarcadero to encourage even more companies to become a technology partner I think? Integrating websites and forums into the IDE would potentially open up a lot of business opportunities, all to our benefit. To keep adds relevant, Embarcadero could offer "" to become an addware-partner for example?
So the key question would be whether we as developers would accept (relevant) adds inside the IDE?


Peter Overweel created a new topic ' Should there be an addware version of Delphi?' in the forum. 3 years ago

What do you think of the following? (Opions are welcome)
Embarcadero could earn a buck or two if it allowed advertisements in the IDE. Yes, addware isn't popular, but if it reduced the price of the IDE significantly I might go for it myself. Also removing the adds for an additional fee should be an option off course. (Could even consider multiple advertising levels: None, Anonymous, ProfiledAdverts, MaxSponsored)
You can reply on this post off course, but if you're into it, you'd probably better vote on:

(Note that I'm certainly not proposing nag-screens...)


Peter Overweel posted a comment on MultiPaste in the RAD Studio IDE 3 years ago

Peter Overweel created a new topic ' Please add Generic-constraints on enumerated types' in the forum. 3 years ago

I've posted a feature request on
Please vote for it when you agree. :-)
Here's the text:

The problem that I'm trying to solve:=====================================I'd like to have the ability to declare a type like:TEnumArrayOf = recordtypePItems = ^TItems;TItems = array[TEnum] of T;TNotifyOn = recordtypeTItem =        recordtypePParams = ^TParams;TParams = recordItemEnum:  TEnum;Items:     PItems;end;TEvent    = reference to procedure( aParams: PParams );end;end;function ForEach     (  aNotifyOnItemEvent: TNotifyOn.TItem.TEvent):                     ^TEnumArrayOf; //<-Having a Result would enable chaining method-callsend;  //Etcetera...
This would be extremely powerfull for things like webrequest-parameter checking:typeTLoginRequestParamEnum = (lrpUserName, lrpPassword);varFLoginRequestParams: TEnumArrayOf; //<-Structure for copying properties from TIdHTTPRequestInfo// to FLoginRequestParams for further investigation.If I'd ever expand TLoginRequestParamEnum, it would be relatively easy to search a big project on handling all scenarios.
The implications of the impossible==================================Unfortunaltely currently Delphi doesn't support the "enum" constraint on generic types,so I must fall back on a less generic solution like:typeTLoginRequestParams = recordtypeTLoginRequestParam = (lrpUserName, lrpPassword);TItems = array[TLoginRequestParam] of T;varFItems: TItems;end;
The distinction seems to be small, but in my current webserver project I see identical "RequestParams record types" + implementations multiplying like rabits.I've looked (deeply) into alternatives, but have only found solutions that rely on run-time mechanisme instead of elegant compile-time solutions like enums.Perhaps I'm overlooking the obvious?
In search of a solution=======================In search for a workaround I had to solve two challenges:1) Delphi's compiler complains on ^TEnumArrayOf that the type has not been fully defined.Ugly, but changing ForEach( ) to something like "ForEach( ): Y;" to typecast the function result gives an acceptable workaround.2) Also the lack of support for "generic-constraints on enumerated types" in Delphi has to be solved.Two articles on the internet gave me inspiration for a workaround:-
//Here's my workaround:
{**************************************************************}{* *}{* *}{* *}{**************************************************************}{$IfDef Interface}TEnumArrayOf<{TItemEnum: enum,} T> = record //<- Delphi doesn't support generic-constraints on enumerated types.type // So here's a workaround/trick for that:TEnum = TItemEnum; // <-Notice that it's assumed that TItemEnum is declared in every unit thats including (Like UnitMonths.pas for example)//// Advantages of this workaround:// - This workaround makes the {Interface} and {Implementation} part of reusable code. (E.g. UnitMonths.pas and UnitWeekdays.pas)// But this workaround is not ideal:// - Type TItemEnum can be declared only once per "using unit", so TMonths and TWeekdays must be in separate units.// - Ideally I would even like to have the ability to skip out any in-between-using-units// and directly use TEnumArrayOf in my UnitMainForm for example.PItems = ^TItems;TItems = array[TEnum] of T;varFItems: TItems;end;
{$IfDef Implementation}procedure TEnumArrayOf<{TItemEnum: enum,} T>.ForEach( aNotifyOnItemEvent: TNotifyOn.TItem.TEvent);varTheEnum: TEnum;TheParams: TNotifyOn.TItem.TParams;beginTheParams.Items := @FItems;for TheEnum in TEnum dobeginTheParams.ItemEnum := TheEnum;aNotifyOnItemEvent(@TheParams);end;end;
//Other stuff//..{$EndIf}
{**************************************************************}{* *}{* UnitMonths.pas *}{* *}{**************************************************************}unit UnitMonths;interfacetypeTItemEnum = (mJanuary, mFebruary, mMarch, mApril, mMay, mJune, mJuly, mAugust, mSeptember, mOctober, mNovember, mDecember);{$Define Interface} {$INCLUDE ..\..\..\} {$UnDef Interface}TMonths =recordtypeTEnum = TItemEnum;TEnumHelper = record helper for TMonths.TEnumtypeTArrayOf = recordtypeTEnumArray = {}TEnumArrayOf< {TItemEnum: enum,} TItemType >; //<-"TEnumArrayOf" can be used with exactly one TItemEnum per unit.// Note that "type TMonthsArray=TMonths.TEnum.TArrayOf<..>.TEnumArray;" offers an easy safe wrapper.end;end;end;implementation{$Define Implementation} {$INCLUDE ..\..\..\} {$UnDef Implementation}end.

//And now I finally can actually do stuff like:
{**************************************************************}{* *}{* UnitMainForm.pas *}{* Example of how to use TMonths *}{* *}{**************************************************************}procedure TForm1.Button_TEnumArrayOfT_Test2Click(Sender: TObject);typeTMonthNames = TMonths.TEnum.TArrayOf.TEnumArray;constTheConst_English: TMonthNames.TItems = ('jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep', 'oct' , 'nov', 'dec');begin//Etceteraend;
Conclusion + Feature Requests:==============================Again I might oversee the obvious solution, but after quite a lot of investigation I'm pretty convinced that instead of my workarounds it would be a major improvement to the Delphi languageif it would simply support:1) generic-constraints on enumerated types and2) a pointer type to the type that's currently being declared.(I also came up with other wild solutions and feature-requests like compiler-directive-insertions, but these two seem to be the simplest)
Kind regards


Peter Overweel posted a comment on MultiPaste in the RAD Studio IDE 3 years ago

Backticks as in ECMAScript 6 would be even cooler... ? (Example: