-
Content Count
2558 -
Joined
-
Last visited
-
Days Won
150
Posts posted by Uwe Raabe
-
-
38 minutes ago, Rollo62 said:But on the other hand Jenkins solution is free (also a good and valid argument).
The time saved by using ContinuaCI and FinalBuilder is worth much more than the cost for these tools - unless you are working for free, though. When comparing prices, don't forget to compare benefits, capability and comfort. Free is never an argument on its own. Oh, and the Solo version of ContinuaCI actually is for free.
I tried several times to make use of Jenkins (actually I started with Hudson), but each time I gave up due to the effort necessary to get things done and the maintenance being a bit cumbersome (to speak nicely). So no one can say I didn't give it a chance.
ContinuaCI has still room for improvement, no question, but @Vincent Parrett and his team are always open for feature requests and usually amazingly fast when it comes to fixing bugs.
-
2 hours ago, Alexander Elagin said:at least in the unthemed IDE
The unthemed IDE is totally different.
BTW, that screenshots somehow reminds me of Delphi 7 (which really makes me shudder).
-
9 hours ago, Vincent Parrett said:Take a look at Continua CI and FinalBuilder for the best Delphi support in a CI/Build environment.
Indeed! The time and effort to get a build project up and running (and actually doing what you want!) in ContinuaCI and FinalBuilder beats Jenkins by magnitudes.
- 1
-
3 hours ago, hsauro said:Using record constructors like this is very convenient but I wonder what the speed penalties are like?
Actually, I don't know and, to be honest, I don't care much. Usually there are other places slowing down a program and the gains from rethinking an algorithm or an architecture are probably better targets.
-
3 hours ago, Alexander Elagin said:And who on Earth can guess that a crescent moon icon means "Save Desktop"?
Well, it doesn't - it stands for Light/Dark Theme and Desktop (at least the rectangle behind it).
-
3 hours ago, dummzeuch said:Am I just too pedantic?
Talking about pedantic: The name len is probably misleading, as when it is used in MyArr[Len] it doesn't represent the actual length of the array any more. In contrast MyArr[High(MyArr)] is always correct.
Nevertheless, caching the index might be a good idea anyway: It eliminates some checks - and High(x) needs one additional DEC operation compared to Length(x).
-
In modern Delphi versions I try to combine record constructors and array concatenation to achieve that:
program Project481; {$APPTYPE CONSOLE} type TSomeRec = record SomeField: Integer; public constructor Create(ASomeField: Integer); end; TMyArr = TArray<TSomeRec>; constructor TSomeRec.Create(ASomeField: Integer); begin SomeField := ASomeField; end; procedure Main; var myArr: TMyArr; myRec: TSomeRec; begin myArr := [TSomeRec.Create(0), TSomeRec.Create(1)]; myArr := myArr + [TSomeRec.Create(2)]; Insert([TSomeRec.Create(3)], myArr, 1); for myRec in myArr do begin Writeln(myRec.SomeField); end; Readln; end; begin Main; end.
-
7 hours ago, Sue King said:Any ideas ?
Nothing specific.
Does it show in the Info - About dialog under Installed Products?
Does the Project Magician menu item exist under the Project menu?
BTW, the latter will also give you access to the Global settings.
-
-
9 minutes ago, Schokohase said:With Delphi 10.3 Rio you can not build applications for Windows XP.
Exactly!
Check Supported Target Platforms: http://docwiki.embarcadero.com/RADStudio/Rio/en/Supported_Target_Platforms
-
In case the compiler can evaluate that condition, that might be an issue, but there are many ways to play on the safe side there. Actually creating and freeing the class may come with some costs, though.
-
7 hours ago, David Schwartz said:put this somewhere:
TMyClass.Create().Free();
That is pretty similar to the original approach described in the topic. In addition, there it is wrapped in a never-true condition to avoid being executed.
-
In addition you have to add a registry entry in the appropriate BDS Experts key similar to that in the Tokyo one.
When I find some time I might add a proper setup.
-
Users of ModelMaker may appreciate the availability of a Modelmaker IDE Integration Expert for Delphi 10.3 Rio.
Note: ModelMaker is a separate Native Delphi Visual modeling and Refactoring tool based on UML™ 2 technology. Not to be confused with MMX Code Explorer.
More info here: ModelMaker IDE Integration Expert for Delphi 10.3 Rio released
- 3
-
Not from inside MMX, but there is a command line tool (see attached). You only have to provide a settings file, like the example provided.
- 1
-
I am pretty sure that your code is inside a class derived from TCustomStyleServices (unless you are using with). As ThemesEnabled is a member of TCustomStyleServices so is Enabled. Simply change that ThemesEnabled to Enabled and you should be fine.
- 1
-
20 minutes ago, KeithLatham said:My question is, would it be (1) SAFE and (2) WORTHWHILE to do the delete in parallel?
Given that file access is almost sequential (remember how hard drives work), I assume that the OS will serialize those parallel tasks in the end anyway. But perhaps I am just missing something.
-
1 hour ago, PeterPanettone said:The scope prefix is very important because it removes ambiguity and it adds clarity.
Actually, I would hate reading such code. It is distracting and extends the amount to read with no real information gain. It's a TButton - I don't care where it is declared. If I want to know I use Code Insight.
6 minutes ago, PeterPanettone said:For example, an addon which checks for namespace ambiguity would traverse all type-identifiers in the source code and check whether any type identifier (at least those with no fully qualified namespace prefix) is implemented in more than one used unit.
There already is such an AddIn and it is called Pascal Expert. The corresponding report is STWA2:
QuoteSTWA2-Ambiguous unit references
Top Previous Next Ambiguous unit references (STWA2)
This sections lists identifiers with ambiguous unit references.
Consider this example:
What will be the output from the program? In this case, it will be “Goodbye”, because the last unit listed in the uses clause will have precedence.
The reference to TheValue is ambiguous or unclear, so it will be listed in this report section. Consider what happens if originally only unit “A” was listed in the uses clause. Then the output would be “Hello”. If then maybe another programmer without any sense of danger will add “B” to the uses clause, the output will be changed.
You should prefix the reference, like “B.TheValue”, to avoid any uncertainty.
- 1
-
If Contains means a simple text search and given your example above, that would return the first unit where TButton is used or declared.
Actually, there exists something like that in MMX used for auto adding units to the uses clause when a specific type is used (see General Settings under Parsing). Unfortunately, in my opinion, that too often gives false results, because it relies on pre-scanned units and not resolving the units found inside the uses clauses.
-
Let's take that as a sign that implementing this feature is probably far from easy.
-
13 minutes ago, PeterPanettone said:So would you please consider adding this very useful functionality?
Unfortunately that is way more complicated than resolving the unit scope names. It requires to find out where that identifier is declared with respect to the current scope and uses clauses. While Code Insight does have this information and therefore can offer this "Find Declaration" functionality (with all its quirks), MMX does not and it is not planned to support it. Perhaps, when somewhere in the future MMX uses some sort of compile or syntax check, this might be easier to implement. For the moment it is simply out of bounds.
BTW, one of the advantages of MMX is that it usually still works even when the code does not compile. That is because it doesn't use a compiler to analyze the sources.
-
5 minutes ago, PeterPanettone said:Is there a similar command to achieve the following:
No.
-
The idea was that the search paths are taken from the current project configuration. Seems like that is not the case here.
I wonder if these settings will become obsolete whenever that mechanism actually works and they are auto-updated whenever the project or its current build configuration changes. That would leave the $IF Expressions and the Lattix LDP file as the only adjustable values (not sure if the latter is actually used by anyone else than myself).
-
I wonder if the situation on G+ has been any different.
appending to a dynamic array
in Algorithms, Data Structures and Class Design
Posted
High(x) is implemented as Dec(Length(x)), while Low(x) can already be evaluated by the compiler. High and Length have some execution overhead to check for a nil array, so caching the value might be worth it.