Jump to content


Popular Content

Showing content with the highest reputation since 05/29/22 in all areas

  1. Hi, I have just released new book: Delphi Thread Safety Patterns. https://dalija.prasnikar.info/delphitspatt/ It is on promotional sale until June,14. You can use Coupon Code: DTSPATT10 at checkout to get a $10 discount. At the moment there are two options: you can purchase eBook only or bundle: eBook and paper edition (those are separate purchases that go through different sellers and you will receive instructions for paper book with the eBook order). Paper book only on the Amazon is not available for the time being. Thank you all for the support!
  2. There are many legacy projects which are still in active production. This volume offers approaches to refactoring and modernizing the code base without the need for complete redesign and rewrite. Evolution, not revolution. These are approaches well suited to the incremental revision of production code, as is usually the concern with a commercial product. Motivated by my own experience with legacy apps and the need to find a manageable approach to transforming a product in current production. On Amazon: https://www.amazon.com/dp/B0B2TY6ZZ4
  3. Hi, I have released source code of a small game. You could see the demo here: https://youtu.be/KVNRi83yYQA Some screenshots: Github repository: https://github.com/nglthach/Swim Best!!
  4. Fr0sT.Brutal


    YearOf(aDate) mod 100
  5. Remy Lebeau

    Indy OAuth authentication over SASL

    FYI, this morning I checked in a new 'sasl-oauth' branch in Indy's repo, which includes a new 'IdSASLOAuth.pas' unit for SASL classes for OAUTH10A, OAUTHBEARER, and XOAUTH2 for TIdDICT, TIdPOP3, TIdSMTP, and TIdIMAP4. They are still a work in progress (ie, no parsing of response JSON yet), and you are responsible for obtaining the OAuth tokens externally (ie, over HTTP), but once you have the tokens then you can use these SASLs to login to the DICT/POP3/SMTP/IMAP servers.
  6. Remy Lebeau

    Sending Email via GMail Using OAuth 2.0 via Indy

    FYI, this morning I checked in a new 'sasl-oauth' branch in Indy's repo, which includes a new 'IdSASLOAuth.pas' unit for SASL classes for OAUTH10A, OAUTHBEARER, and XOAUTH2 for TIdDICT, TIdPOP3, TIdSMTP, and TIdIMAP4. They are still a work in progress (ie, no parsing of response JSON yet), and you are responsible for obtaining the OAuth tokens externally (ie, over HTTP), but once you have the tokens then you can use these SASLs to login to the DICT/POP3/SMTP/IMAP servers.
  7. Anders Melander

    MIT researchers uncover ‘unpatchable’ flaw in Apple M1 chips

    TL;DR Someone has been able to circumvent a protection mechanism which was designed to prevent a particular category of attacks. The internet: The sky is falling! Apple: Pfft. Chill dudes.
  8. There are times when this is desirable. It's a big weakness in my view that the type of a literal can be ambiguous.
  9. UPDATE: I see that my book is available now in Europe, and some sales have been logged there. So for anyone awaiting that availability. wait no more.
  10. The solution is to use the FloatToStr overload that takes a TFormatSettings and pass one that has DecimalSeparator set to dot. I typically declare such a TFormatSettings as const and fill all the fields that are required for JSON or some other textual format like this - the following for example is being used in Spring for converting various data types to string (from TValue): const ISO8601FormatSettings: TFormatSettings = ( DateSeparator: '-'; TimeSeparator: ':'; ShortDateFormat: 'YYYY-MM-DD'; LongDateFormat: 'YYYY-MM-DD'; TimeAMString: ''; TimePMString: ''; ShortTimeFormat: 'hh:nn:ss'; LongTimeFormat: 'hh:nn:ss'; DecimalSeparator: '.'; );
  11. Anders Melander

    Some sort of IPC cross platform?

    tcp/ip works on pretty much everything.
  12. dummzeuch

    Appreciate the 'extra mile'..

    I think I said this before: The main reason for this was, that I forget about this problem until yet another Windows update breaks my Delphi installation again. Every time I had to remember the solution (that's why I blogged about it, so I could look it up) and then search for these bloody files. One time I have had enough... If it also helps others, that's great. To be fair: It's not Microsoft's fault but Borland's/Codegear's: These files do not belong into a system directory, but since we are stuck with this it's still annoying.
  13. David Millington

    Parnassus Bookmarks for Delphi 11 Alexandria?

    Glad you find this useful! The stack bookmarks are enormously powerful simply because of toggling... they're a good example of building a feature where the key functionality is less than you envisaged. I thought a stack of bookmarks, so you can go backwards by popping one off the stack would be very useful, but 90% of the value is in a stack of one item 😄 FWIW the shortcut Shift+Esc may be useful to you: it drops a stack/caret bookmark and jumps back, in one go. So you can easily toggle between any two locations (across units, ie over editor tabs) that way. Drop a caret (Ctrl+Shift+B), go somewhere, press Shit+Escape and it'll drop a caret and go back to (picking up) the first, then Shift-Escape again and it'll drop a caret and go back to the other...
  14. We are a company located near Stuttgart, Germany and develop innovative machines for measuring and quality control. We are looking for Delphi developers for further development and maintenance of our software solution. The field of work will be to develop the UI as well as the processing of sensor data from cameras or laser scanners. Other tasks are the development of UIs for new machines or the definition and implementation of interfaces to other software. We offer a permanent contract in an open and valuing working environment. If you are interested, please contact me via PM and I will send our contact information.
  15. Angus Robertson

    QUIC and HTTP/3

    RFC 9114 for HTTP/3, aka QUIC/UDP has only just been released. Earlier versions of QUIC are supported in various browsers, but are really only beneficial for complex web pages with hundreds of elements, not sure how relevant to the users of ICS, no-one has ever asked for HTTP/2. There is a fork of OpenSSL by Google, Microsoft and Akamai supporting QUIC, but the committee did not like the design and refused to merge it, instead starting a fresh QUIC design: https://www.openssl.org/blog/blog/2021/12/03/starting-the-quic-design/ No specific news about a release date, although lots of activity on GitHub, so probably months away from release. Waiting for OpenSSL is probably the safest long term solution for HTTP/3. Angus
  16. I think the core of the problem is an ambiguity inherent in the original language syntax inherited from the days of Turbo Pascal and earlier. 'x' can be interpreted either as a character constant or a string constant, and the compiler decides which it should be dependent on the context. A char is also assignment compatible with a variable or parameter of type string (but not vice versa). I see no way to get around this, and changing these rules will never happen since they make sense and changing them would break heaps of older code. Of course the compiler could use more stringent rules for overload resolution, e.g. require type identity and not only assignment compatibility. That would solve the conflict in the case you noticed but would be quite bothersome in other situations, requiring more overloaded versions of a function to be implemented. Think about what a type identity requirement would mean for overloaded functions taking numeric types as parameter. Do you really want to declare versions for byte, smallint, integer, word, cardinal etc. ?
  17. corneliusdavid

    Delphi 11.1 - High DPI

    The quick and lazy way to handle this is to turn off the Scaled property in all your forms but then all your controls will be really tiny when the Windows scaling is cranked up. What you'll need to do is change several aspects of your forms to gracefully rearrange themselves as heights and widths change. Notice I didn't say "re-design" your forms but it does take some work. Get to know the Align and Anchors properties first. Consider using container components that automatically rearrange components but keep them in their place like the TFlowPanel and TGridPanel. There are many other things you can do--a quick internet search will reveal many blog posts and articles over the years. Here's a good starting point: https://zarko-gajic.iz.hr/writing-and-enabling-delphi-application-to-support-high-dpi-displays-and-4k-screen-resolutions/
  18. Uwe Raabe

    Waiting for something without blocking the UI

    That exactly describes a blocking behavior. As long as the specification says blocking and you want non-blocking, you better change the specification first before doing anything with the code.
  19. Ian Branch

    Array within an array??

    Because I wasn't seeing it and getting more and more confused so I decided to take the easy way out. I put it down, had a coffee, and came back to it. I now have it.. type TForm26 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } type TLabelRecord = record iValue: Integer; iColor: Integer; end; type TLabelMatrix = array[1..12, 1..7] of TLabelRecord; public { Public declarations } end; var Form26: TForm26; implementation {$R *.dfm} procedure TForm26.Button1Click(Sender: TObject); var LabelRecord1, LabelRecord2: TLabelRecord; LabelMatrix: TLabelMatrix; begin LabelRecord1.iValue:= 123; LabelRecord1.iColor := 234; LabelMatrix[1,1] := LabelRecord1; // LabelRecord2 := LabelMatrix[1,1]; ShowMessage('Value = '+LabelRecord2.iValue.ToString); ShowMessage('Color = '+LabelRecord2.iColor.ToString); // end; Thank you for your patience & guidance. Ian
  20. Der schöne Günther

    Newly released book: Delphi Legacy Projects

    Amazon in my country lists it as "Currently not available, unknown when it will be". 😐 Please consider at least some kind of PDF. Kindle, however, would be much appreciated. It's just so incredibly comfortable, and other coding books have this option as well.
  21. aehimself

    Problem with column names in dbgrid

    I wanted to do this for a really long time so I started to extract the core improvements of Delphi's TDBGrid into a separate component. This includes: - New public BeginUpdate / EndUpdate methods, which can disconnect the dataset and keep the previous image on the component. This is useful if you are doing opens / posts / anything in a background thread but don't want to show emptiness until - Automatic and manual fitting of columns which considers the column and the content width but won't let a column be wider than half it's size - Vertical scrollbar now works properly, not only 3 positions and is not visible when not needed - Grid properly handles mouse wheel scrolling - Content is shown as the scrollbar is dragged (not only updating when the mouse is released) - If there is no connected dataset or it is not active, the two empty cells won't be shown - Every second row has a slightly different background, out-of-focus selection is now drawn with a separate shade of grey, so you can see that the grid is not in focus. This considers VCL styles. - If TitleClick or TitleHotTrack is enabled, the cursor changes to a hand instead of the pointers It might get more updates later on when I see what code can be generally used from my heavily customized one. Feel free to grab it / check how things were done. Tried to put comments everywhere.
  22. imperyal

    Sending Email via GMail Using OAuth 2.0 via Indy

    I ended up creating a TCustomAuthenticator descendent class for this. It implements a OAuth2 Authenticator: - Allows authorization via externel browser - Uses PKCE flow for added security - Generates new tokens when they expire (using the refresh token) In the repository there's a Demo app too. Feel free to use it if you like: delphi-google-oauth2 repo
  23. Are you sure it is executed in the context of the main thread? Because that is not what the stack trace says. It shows it is called from within TOutThread.Execute method. Anyway, whatever the problem is, there is not enough code to determine what is the root cause. Data modules can be constructed in the background threads, but only and only if all components used are thread safe in that regard. In other words if they support being constructed in background thread. How they are configured and what other components are linked as properties also impacts the thread safety. Additional comment. That application does not have memory leaks is good, but not having memory leaks does not mean that code is thread-safe and that it will run correctly.
  24. David Millington

    Parnassus Bookmarks for Delphi 11 Alexandria?

    Bookmarks and Navigator are now here: and https://blogs.embarcadero.com/bookmarks-and-navigator-are-available-for-rad-studio-11/ The blog post has full info but a couple of notes: We have set up systems so this build delay should not happen again They are available for both 11.0 and 11.1 The Debugger plugin is also coming within a few days Many thanks for your patience here, and I hope you find installing these helps your productivity and use of the IDE.
  25. Carlo Barazzetta

    Looking for SVG support in Delphi?

    I've published an article about SVGIconImageList and IconFontsImageList:https://ethea.it/icons_in_delphi/