Jump to content

Leaderboard


Popular Content

Showing content with the highest reputation since 10/16/24 in all areas

  1. Arnaud Bouchez

    ANN: mORMot 2.3 Stable Release

    This was time for a new "stable" release of the Open Source mORMot 2 framework! You can find it on our GitHub repository: https://github.com/synopse/mORMot2/releases/tag/2.3.stable 🙂 This release will be a Long Term Support Security Branch, as we will maintain it for the next years for main bugs and security fixes. Added - Swagger/OpenAPI Client Generator - IDocList/IDocDict Containers - SID/DACL/SACL/SDDL/ACE Security Objects - async web server: IOCP support on Windows, metrics gathering and standard logging - TSynMustache can work on plain data via RTTI, in addition to TDocVariant - introducing TRttiMap for DTO process. Changed - Upgraded SQLite3 to 3.46.1 - Enhancements to the LDAP client, HTTP/HTTPS client, Kerberos auth, Peer Cache, ORM. - Lots other bug fixes, optimisations and enhancements. More information on our blog: https://blog.synopse.info/?post/2024/10/16/Release-of-mORMot-2.3-Stable
  2. Uwe Raabe

    creating a frame at runtime

    It is even possible at design time. Setting an empty name to a component will remove the corresponding field in the class. It is often used with TLabel instances that only exist to display some static text, but won't be accessed in the code. It reduces code cluttering a bit.
  3. Jim McKeeth

    fmxLinux missing?

    This might work getitcmd -i=fmxlinux-12-1.78 this is the version that is installed in 12.1, and if you use the getitcmd from the RAD Studio command-prompt it should install and work.
  4. Remy Lebeau

    Delphi 12.2 Patch 1

    https://blogs.embarcadero.com/rad-studio-12-2-athens-inline-patch-1-available/
  5. 1.8% rating is far from being popular. It's just marginally better than the 1.64% of SQL on place 11. Compare that to the ratings of the top 3! That's one of the problems with this "index". The differences between the rankings even some in the top 10 are lower than the error margins of the data source.
  6. Lars Fosdal

    Delphi 12.2 Patch 1

    Make sure to uninstall the Parnassus plugins before installing the patch.
  7. Uwe Raabe

    Delphi 12.2 Patch 1

    A suitable version for MMX is available now.
  8. havrlisan

    creating a frame at runtime

    Or to an empty string. It's the safest and easiest way, in my opinion.
  9. Angus Robertson

    Delphi 12.2 Patch 1

    It would be good if GetIt kept a 'previously installed' list when it uninstalls stuff, which is not cleared during a new install, and that list had a re-install button. It would also be good if GetIt properly uninstalled Parnassus and FmxLinux so the new install does not just fail with a load of DLL errors. Angus
  10. The problem is that TBlahFrame is only a declaration of a TFrame descendant and not a designable TFrame. This way the IDE cannot detect that TFrame1 has to be treated as TFrame by the designer. You either need to make TBlahFrame a proper TFrame with a dfm and the corresponding entries in the dpr and dproj, or you declare an alias for TBlahFrame with the name TFrame and use that as the parent class for TFrame1. TBlahFrame = class(TFrame, IBlah) procedure Foo; virtual; abstract; end; TBlahFrameClass = class of TBlahFrame; type TFrame = TBlahFrame; uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, intf; type TFrame1 = class(TFrame) private
  11. Because aDialog is not assigned when an exception is raised inside TMyDialog.Create. That causes Free called for an uninitialized variable inside the finally block. A workaround would be to set aDialog to nil before the try, but the cleaner way is to move the Create outside the try-finally.
  12. Remy Lebeau

    Simulate blocking mode to send Email

    A more efficient approach would be to wait on both your EventSignal and the RTL's Classes.SyncEvent at the same time, calling CheckSynchronize() only when SyncEvent is signaled (ie, when there are sync requests pending). This way, when neither condition is true, your calling thread can actually go to sleep instead of running a busy loop. For example: uses ..., Classes, Windows; var Handles: array[0..1] of THandle; begin ... // Simulate blocking Handles[0] := oOutLook.EventSignal.Handle; Handles[1] := Classes.SyncEvent; repeat case Windows.WaitForMultipleObjects(2, @Handles[0], False, Infinite) of WAIT_OBJECT_0: Break; WAIT_OBJECT_0 + 1: CheckSynchronize; else RaiseLastOSError; until False; ... end;
  13. David Heffernan

    Delphi TOIOBE index lifted in May 2022?

    Same as always. Numerical programming. And when there exists huge amounts of code in a language, it can be hard to leave. A phenomenon well known to us Delphi programmers!
  14. Anders Melander

    Delphi developer needed in Denmark

    You might get better exposure if you post your job listing on jobindex; Linkedin is a bit of a self-gloryfying BS echo-chamber so I doubt most developers follow what goes on there.
  15. Rafal.B

    fmxLinux missing?

    It works đź‘Ť (I haven't used this method of installation before) Thank you very much
  16. Remy Lebeau

    HTTP/1.1 400 Bad Request

    The JSON spec allows whitespace between tokens. Any parser that can't handle that is broken.
  17. If you stay with "Classic" you are staying with an obsolete platform. It is likely to be around for years and years to come (because of so much legacy code out there) but it is no longer under any further development; each new version of RAD Studio or C++ Builder comes with exactly the same "Classic" compiler. Staying with "Classic" also ties you to 32 bit only application. It's not my job to explain all the advances in C++ syntax and the associated STL additions that have happened since the days of the "Classic" compiler - but there are many many many in the list. As soon as you start using Clang you don't want to go back to "Classic". If you are not so familiar with modern C++ start by reading the latest edition of Stroustup's "A Tour of C++" and see how many things in this (fairly brief) text are new to you. Scott Meyer's "Effective Modern C++" is another good book. There are hundreds out there.. There is one disadvantage of the Clang compiler: It's compile times are slower. Make sure you use the TwineCompile plug in (free of charge on Getit package manager). As an upgrade path I would suggest make the change to 12.2 staying with the "Classic" and once you have all your other issues solved then move to Clang.
  18. Brandon Staggs

    String memory usage

    Strings are copy-on-write, but the compiler doesn't do any magic to automatically de-duplicate strings. The only way you get COW efficiency in memory is when you assign one string to another. Some classes have code for deduplication, like TStringList, but you would know if you were using it and it probably doesn't apply to your situation.
  19. Uwe Raabe

    Delphi 12.2 available for download

    MMX V15.1.11 works in all Delphi 12 versions, but V15.1.12 was compiled with Delphi 12.2 (without Patch 1) and thus suffers from this problem.
  20. Ian Branch

    Delphi 12.2 available for download

    It is also a breaking change for all those 3rd Party libraries that you get their source code for and install by building their files. I have spent a couple of hours rebuilding libraries I had the source for that needed to be re-installed as, presumably, their existing .bpl/.dcp/.dcu files were no longer compatible. Also the existing installed plug-ins - GExperts, Eurekalog, MMX & cnWizards won't load. I rebuilt GExperts and is OK but I will have to wait for the other 3.
  21. Vandrovnik

    Identifying Third-Party and Custom Components

    For Delphi, I would use "grep" on .dfm files, searching for lines starting with "object" and may be "inherited": object ActionList1: TActionList From this lines, component type can be extracted. Remove duplicates, may be count occurencies... It does not tell from which unit that component comes, but I suppose most of them could be identified.
  22. Also SetKey is buggy !!! and not only ! procedure TCREncryptor.SetKey(const Key; Count: Integer); begin SetKey(TBytes(@Key), 0, Count); // TBytes(@Key) instead of TBytes(Key) end; procedure TCREncryptor.SetKey(const Key: TBytes; Offset, Count: Integer);
  23. I’m working on a project using Material 3 Design in Delphi FireMonkey for Athens 12.2. With Skia now integrated in Athens 12.2, we have a similar graphics foundation to Flutter, but we still need a powerful UI component suite to fully unlock Delphi’s design potential. I’ve been using Alcinoe to customize components like Text, Buttons, Switches, TrackBars, etc., into Material 3 Design or even Cupertino style—whatever fits the design. You can easily manage different states like hover, pressed, or disabled directly through the object inspector, which makes it super easy to work with in Athens 12.2. For more info on Alcinoe and Material 3 controls for Delphi, you can check it out here: Material 3 Controls for Delphi – A Modern UI Approach 3. I’ve put together a demo app specifically for Athens 12.2, and I’d really appreciate it if you could test it and give me your feedback. Here’s the link to the demo: https://play.google.com/apps/internaltest/4701314002613599109 To get the app on Google Play, I need around 20 testers. If you’re interested, please send me your Android Gmail address, and I’ll invite you to give it a try. Thanks a lot for your help!
  24. Stefan Glienke

    TParallelArray Sort Performance...

    I am not commenting on benchmark results without seeing the code - I have seen too many flawed benchmarks in my life. If you look into the implementation you see that it is using the most simple parallel quicksort imaginable - that means the first run over the entire array which arranges the elements according to the pivot (as in the TArray.Sort the most simple pivot selection - take the middle) runs single threaded. Only then the processing of left and right is being passed to the PPL. Anyone who has researched a bit into sorting algorithms in the past 20 years knows that a pure quicksort is hardly anything good enough to be used as general purpose sorting algo in a runtime - other languages using hybrids for years, .NET and some C++ runtimes use IntroSort, Python uses Timsort, so does Java for objects and some special version of QuickSort for primitive types, lately some languages such as Go adapted PDQSort as their default sorting algorithm. I'd argue that some of these better algorithms running single-threaded outperform parallel quicksort on certain and not so uncommon data patterns.
  25. Remy Lebeau

    Create an animated gif from a set of bitmaps?

    TGIFImage is a VCL class, AFAIK it is not available in FMX. Also, as I don't use FMX myself, my claim about its lack of support for animated GIFs is mainly based on the below post, which presents some 3rd party solutions for displaying animated GIFs in an FMX UI: https://stackoverflow.com/questions/45285599/how-to-use-animated-gif-in-firemonkey For displaying a series of bitmaps in a UI, one can use TBitmapListAnimation, but I don't know if that can also be used to create a GIF. Embarcadero's documentation only mentions that FMX's TBitmap supports GIF on all platforms except iOS, but doesn't mention what kinds of GIFs are supported.
Ă—