Jump to content


Popular Content

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

  1. 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...
  2. 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.
  3. David Heffernan

    Inline var not working this time

    I'm not happy. Optional parens means that a symbol like MyFunc can mean either the procedure or the value returned by a call to the procedure. And there are times when that ambiguity can't be resolved by the compiler. Most commonly when MyFunc returns another procedural type. So when you write SomeFunc := MyFunc are you assigning MyFunc or MyFunc() to SomeFunc? It sucks that in Delphi there is this ambiguity. The ambiguity would not exist if () were not optional. Like they aren't in so many other better designed languages.
  4. vfbb


    Website: github.com/viniciusfbb/skia4delphi Skia4Delphi is a cross-platform 2D graphics API for Delphi based on Google's Skia Graphics Library (skia.org). Google's Skia Graphics Library serves as the graphics engine for Google Chrome and Chrome OS, Android, Flutter, Xamarin, Mozilla Firefox and Firefox OS, and many other products. Skia provides a more robust Canvas, being very fast and very stable, with hundreds of features for drawing 2D graphics, in addition to a text shaping engine designed to render texts in the most diverse languages with right-to-left support (such as the Persian language), full support for loading SVG files, support for creating PDF files, support for rendering Lottie files (verotized animations created in Adobe After Effects), integration with the GPU, among countless other cool features. Skia's idea is similar to Firemonkey's, the same codebase used in an OS will work the same on other platforms. It is also possible to design using the CPU in independent background threads. Skia also has native codecs, of course if you don't use the SKCodec class, when loading an encoded image it will give priority to using the platform's native codec, but it is possible to use its codec, for example for jpeg files it uses libjpeg-turbo and for png files libpng which maybe in certain environments may perform better than native. See some examples: Advanced shapes Advanced text rendering / shaping Svg Lottie files And much more...