Jump to content

Leaderboard


Popular Content

Showing content with the highest reputation since 04/01/24 in Posts

  1. This is still a work in progress, but I'm really happy with how it is going so far so I thought I would share... https://github.com/jimmckeeth/FMXColorDialog There are a few custom components in the dialog, and there is a palette code library, plus there is a new CMYK color record. Just fun project to mess around with on vacation. FMXColorDialogSample_PseA8aEaZC.mp4
  2. Uwe Raabe

    Variable might not have been initialized

    Reading the code despite of its irritating formatting reveals the problem: WorkOrdersSelectedRow := WorkOrdersGrid.Selection.Top; if FWorkOrderManager.GetWorkOrderDataByIndex(WorkOrdersSelectedRow - 1, Data) then // evaluates file index FileIndex := ARow - 1; if (FileIndex < 0) or (FileIndex >= TWorkOrderData.FILE_DATA_SIZE) then Exit; FileIndex will not be initialized when the if clause fails. BTW, it also irritates that the compiler is charged guilty first.
  3. pyscripter

    New ChatLLM application.

    I have created a new Delphi application called ChatLLM for chatting with Large Language Models (LLMs). Its primary purpose is to act as a coding assistant. Features: Supports both cloud based LLM models (ChatGPT) and local models using Ollama. Supports both the legacy completions and the chat/completions endpoints. The chat is organized around multiple topics. Can save and restore the chat history and settings. Streamlined user interface. Syntax highlighting of code (python and pascal). High-DPI awareness. The application uses standard HTTP client and JSON components from the Delphi RTL and can be easily integrated in other Delphi applications. You do not need an API key to use Ollama models and usage is free. It provides access to a large number of LLM models such as codegemma from Google and codelllama from Meta. The downside is that it may take a long time to get answers, depending on the question, the size of the model and the power of your CPU and GPU. Chat topics The chat is organized around topics. You can create new topics and move back and forth between the topics using the next/previous buttons on the toolbar. When you save the chat all topics are soved and then restored when you next start the application. Questions within a topic are asked in the context of the previous questions and answers of that topic. Screenshots: Settings using gpt-3.5-turbo, which is cheaper and faster than gpt-4: UI: Further prompting: The code is not actually correct (Serialize returns a string) but it is close. If you want to test ChatLLM you can download the executable.
  4. Hi Everyone, My name is Tim and have been using Pascal forever (among other languages) since the 90s. For a variety of reasons I've transitioned (/transitioning) into tutoring and mentoring, and have launched a YouTube channel dedicated to all things Delphi. My first video, "Starting an Adventure with Delphi," is here - In the future, I'm planning to cover a range of topics, including: - Building modern Delphi applications for FireMonkey - Essential data structures for Delphi developers - Tips for debugging those tricky Delphi problems I'm really passionate about keeping Delphi alive and well. Whether you're a complete beginner or a seasoned developer looking to brush up your skills, I hope you'll find something valuable on my channel. Let me know what you think - especially if you have any topic suggestions!
  5. Glenn Dufke

    Registration Limit

    That's not the correct place to contact. Now, when you have an active update subscription - besides always having access to the latest Delphi releases which is important nowadays - getting registration bumps is pretty straight forward and resolved quickly through support. When your active update subscription is expired, which it is in your case according to your initial post, you would have to contact your reseller (If you got your license through that in your home country) or Embarcadero sales directly to get the license bumped. They might offer you a renewal or new license depending on your status, but it isn't a requirement, you can decline the offer and just request a license bump. https://www.embarcadero.com/company/contact-sales As it is a perpetual license, you can keep continuing using that version. You can manually check your registration limit yourself if you need to reinstall in the future. I wrote a guide here: https://docs.code-kungfu.com/books/licensing-and-registration/page/how-to-check-your-registration-limit Hope it helps.
  6. Ali Dehban

    OpenAPIClientWizard

    A new Delphi plug-in for automatically implementing the client side of a Rest API is now available in beta version. Repository: https://github.com/AliDehbansiahkarbon/OpenAPIClientWizard Demo video: https://www.youtube.com/watch?v=7B7nSHIsV64
  7. havrlisan

    When LSP fails

    In this post, I'll share all the workarounds I use when LSP fails, which have greatly helped me during coding. Hopefully, you'll find them useful before Embarcadero completely fixes the LSP Server, which I'm sure will be soon. I'll also mention GExperts throughout this post, as it includes some useful features that can speed up using the tools listed below. Delphi Uses Helper Link: https://delphisorcery.blogspot.com/2021/03/introducing-delphi-uses-helper.html Feature: proper replacement for the Find Unit... refactor (Ctrl+Shift+A) feature. Description This has been by far the most helpful plugin. It's as simple as typing the name of a type and pressing Ctrl+Shift+A to find the unit where it's declared. When the window pops up, you can press Enter to add the unit to the uses section (use the left/right arrows to switch between interface and implementation sections), or press Shift+Enter to open the unit and jump to the line where the type is declared. GExperts bonus: The IDE already has a similar feature under the Refactor menu with the same shortcut, Ctrl+Shift+A, but it doesn’t work well and is certainly not as fast as Delphi Uses Helper. However, sometimes the default feature will trigger instead of the plugin (e.g., when pressing the shortcut without any text at the caret position). To remove the default shortcut, use GExperts' IDE Menu Shortcuts: find the shortcut under Refactor > Find Unit... (it should be the last one), and assign it to another key. MMX - Show Related Classes Link: https://www.mmx-delphi.de/ Feature: shows ancestor class, implemented interfaces, and sibling classes for a given class. Description Want to quickly navigate to a class’s ancestor or interface, or find out which siblings it has? This feature gives you exactly that, neatly and efficiently. To use it, right-click and go to MMX Commands > Navigate and Move > Show Related Classes. Or even better, map a shortcut by going to MMX > Properties > Key Bindings and finding Show Related Classes. I’ve personally mapped it to Shift+Alt+3. MMX - Open Unit... Link: https://www.mmx-delphi.de/ Feature: displays searchable units based on set configuration. Description Quickly displays all units based on your configuration. The configuration allows for adding units from the currently opened project or project group, and the following paths: Project Search path, IDE Library path, and IDE Browsing path. Find Original Symbol Feature: additional help navigating to a unit, type, or method. Description Using Find Declaration (Ctrl+Click) is known to fail occasionally, especially on bigger projects. What I've found helpful at times is to try using the Find Original Symbol that's located under the Search > Find Symbols menu item. I've personally mapped the Find Declaration to Ctrl+< and the Find Original Symbol to Ctrl+Shift+< through the GExperts IDE Menu Shortcuts, and I spam them when needed. It does help sometimes. Add a shortcut to the Reload LSP Server menu item Link: https://github.com/havrlisan/zx-idetools/blob/main/Source/Zx.IT.KeyBinding.ReloadLSPServer.pas Description In Delphi 12.1, a menu item Reload LSP Server was added under the Tools menu. Before that, you could add a custom tool to manually kill the LSP, and the IDE would restart it automatically. Unfortunately, they didn't add a shortcut for the menu item, so your options are limited to mouse clicks or to clicking Alt > T > accelerated key. Note that the accelerated key will be automatically assigned, and it depends on your menu items under the Tools menu, which sucks because that's the most changeable menu (because of custom tools, or third-party plugins). Usually, I'd use GExperts IDE Menu Shortcuts to manually add the shortcut, but the Reload LSP Server menu item doesn't show up there. After some debugging, I realized that the menu item in question isn't registered on IDE startup, but is loaded sometime after all other packages are loaded. My best guess is that the GExperts remembers the menu items when loaded, and doesn't re-fetch them afterward (I'm too lazy to search through the source code, sorry). So I decided to implement an IDE notifier that listens to a "ProjectGroupOpen" notification and then tries to find the Reload LSP Server menu item and assigns the shortcut to it. I've set the default shortcut to Alt+Shift+W, but the code is quite simple and is easily portable to a package of your own. That's all I've got so far. If you have some other features or tips, feel free to share them in this post!
  8. New blog post on WITH statements. The topic was recently discussed once again in the Delphi Developers Telegram group which triggered a blog post: https://ideasawakened.com/post/why-you-should-not-use-WITH-in-your-Delphi-code
  9. That post is extremely difficult to understand. Documentation is here: https://docwiki.embarcadero.com/RADStudio/Athens/en/Methods_(Delphi)#Overriding_versus_Hiding No, the purpose of reintroduce is to suppress the compiler's warning that you are hiding the inherited method. It is a way for you to tell the compiler that you know what you are doing and to not bother you about it.
  10. Elliot Hillary

    DelphiLint v1.1.0 out now!

    We're excited to release version 1.1.0 of DelphiLint, a free and open-source static analyzer and linter for the Delphi IDE! DelphiLint is powered by SonarDelphi, our Delphi analyzer for the SonarQube code quality platform, and can be run in two modes: Standalone - run analyses entirely locally, no server required Connected - connect to a SonarQube server, allowing for synchronization with the server's quality profiles and configuration Release: https://github.com/integrated-application-development/delphilint/releases/latest Blog Post: https://github.com/integrated-application-development/delphilint/discussions/43 New Features in 1.1.0 Quick fixes - fix issues using suggested automatic changes Standalone rule configuration - configure the analysis rules that are applied in Standalone Mode Declutter files by hiding issues Many performance improvements and bug fixes For more details, see the blog post for release 1.1.0 and the repository README.
  11. Anders Melander

    Delphi 12.1 is available

    The new Atlassian slogan
  12. Lajos Juhász

    TParallelArray Sort Performance...

    Stefan you should give at least 48 hours to a new version before you break it. It does handle array of 100_000 integers. Maybe for a larger arrays you have to buy a special SKU for sorting.
  13. Hi All I created a Delphi implementation of UUIDv7 - RFC 9562 UUIDv7 values are time-sortable, which means you can sort them in increasing order based on when they were generated. https://github.com/VSoftTechnologies/VSoft.UUIDv7 Should work with XE2=12.x Win32/Win64 and all platforms on 11.3 or later. Usage : var guid : TGuid; begin guid := TUUIDv7Helper.CreateV7; writeln(guid.ToString); end;
  14. Michalis Kamburelis

    Castle Game Engine 7.0-alpha.3 release

    Castle Game Engine is a free and open-source game engine. Our strong features are: comfortable visual editor, many graphic effects (shader effects, mirrors, bump mapping, PBR...), support for many model formats (glTF, X3D, MD3, Spine JSON...), being cross-platform (desktop, mobile, console) and of course using fast, clean Object Pascal for both the engine development and your games! Details about the Delphi versions and platforms support are here. We are proud to present a big new release of Castle Game Engine, with lots of new features, improvements and fixes. The new engine version is available for download now. The highlights of the release are below. For more details, see the full release notes. The number of this release, “7.0-alpha.3”, is a signal that we’re on our road to the big 7.0 release (see the roadmap and plans and timeline). This release is dedicated to the late Eugene Loza. I miss you, dear friend. The most important highlights of this release are: Physics. New components for colliders and rigid bodies, ability to run physics simulation in the editor, joints, layers, forces. Many rendering improvements: Correct and automatic blending, both batching and occlusion culling easier to use and more powerful, fully modern rendering on new GPUs, better support for ancient systems with old GPUs. Also OpenGLES (Android, iOS, Nintendo Switch) rendering supports now almost all desktop rendering features: shadow volumes, shadow maps, 3D textures, occlusion query, anisotropic filtering, meshes with 32-bit indexes. Shadows using shadow volumes are trivial to activate. Work is under way to expose shadow maps through a trivial property as well. Visual Studio Code integration. Our own VS Code “Castle Game Engine” extension with code completion and syntax highlighting for all Pascal code and easy building / running / debugging of Castle Game Engine projects. Delphi integration improvements: TCastleControl available for VCL and FMX applications, Delphi packages with IDE support, Delphi Linux support and more. Support for Tiled maps with a new component that is comfortable to use and efficient to render. User Interface improvements: better default font, UI batching, image regions and 9-slices borders visually configurable, mask component. Many editor UX improvements: modern color picker, unified tools to edit UI and transformations, wireframe view, “Change Class” menu action, Sketchfab Importer, finding components by name, multi-selection. Improvements to views (formerly states): better API, automatic initialization of the published fields, opening the project greets you with UX to manage views. Mobile improvements: lots of Android services improvements, Castle Model Viewer Mobile and more Android applications released on Google Play, lots of general Android and iOS fixes and improvements to make porting your games to mobile trivial, safe borders. Loading and saving: cache, MD3 improvements, X3D 4.0 improvements, custom model formats registration, STL saving. Inspector (press F8 / 3 fingers in a debug build of any project) improvements: tweaking boolean properties at run-time, hot-reloading at run-time to iterate on your graphics. Float-based images (e.g. for precise terrains) full support at loading and rendering (formats: 16-bit PNG, float-based KTX, 16/32-bit TIFFs). A lot of new documentation and examples. We in particular recommend 2 new tutorial articles introducing most important engine concepts: Bad way to play chess, aka 3D physics fun. Support us We appreciate your support on Patreon. There are also other ways to support us and if you’re a company, we’re open to cooperation (write to michalis@castle-engine.io). By 2024, Michalis, the lead engine developer, spent most of his life on the engine and doesn’t plan to stop. Moreover, Michalis now works on the engine full-time counting only on your support. So anything you can give is really appreciated! Spread the word! We don’t do much marketing. Because we suck at marketing. Help us — spread the word about this new release! Post about it anywhere you can. Talk about it in your communities — online or in the Real World. Tell your family about it (they really want to know). Reuse this news post and screenshots freely. Have fun everyone and thank you for using the engine.
  15. Stack Overflow Developers Survey for 2024 is live https://stackoverflow.com/dev-survey/start Let's put Delphi on the map
  16. marsupilami79

    Release of Zeos 8.0.0

    The Zeos Team is proud to announce the availability of Zeos 8.0.0 as a stable release. This is the newest stable version of Zeos. It deprecates Zeos 7.2, and any previous version of Zeos. We urge all people still using older versions of Zeos to upgrade. If you have any problems with Zeos 8.0, please get in contact with us on the forums or on the bugtracker. The most outstanding changes in Zeos 8.0 are Support for Delphi NextGen compilers to support Android, iOS and Mac OS X Two new bridge drivers for OleDB and ODBC A new driver that uses the Firebird interface based API for accessing Firebird versions 2.5 and above A special proxy server and an according driver that can be used to access any Zeos supported database using SOAP over HTTP(S) from (mobile) clients. Propper support for numeic and decimal fields by using TBCDField and TFMTBCDField Nested transactions using savepoints Two new components: TZTransaction and TZMemTable better overall performance and smaller memory footprint Besides these improvements Zeos has seen a ton of other additions and improvements. For an overview of the changes in Zeos 8.0 see the release notes. To download, the new version of Zeos please use this link.
  17. Steven Kamradt

    ANN: SVGIconViewer

    Lately I have found myself spending way to much time locating and converting my various toolbars and buttons to use SVG images. Part of that time was searching multiple archives only to find the same list of icons, however in different weights and sizes. The Microsoft Fluent UI icon repository is difficult to easily navigate and requires multiple steps to grab an icon... there had to be an easier way. So I wrote one that not only allows one to save SVG files, but also PNG files with an included -x size added to make it super easy when adding to an existing image collection (if you, like me, have projects that are still not quite in the latest version of Delphi). The project requires Delphi 12 (or minimally Delphi 10.4 with Skia4Delphi added) to recompile, I have included a compiled executable as a release asset if you do not have the required Delphi version. There are currently 27,400 individual SVG icons, additionally those that have both a filled and outline version have the option to also generate a "TwoTone" icon. You have complete control over colors and export sizes. https://github.com/skamradt/SVGIconViewer Currently included Icon libraries: Microsoft Fluent UI, Tablar-Icons If you find this project useful, I would appreciate a star. If it saves you time and effort, feel free to buy me a coffee (or several, code signing is so expensive lately). 🙂
  18. Hi All I created a Delphi implementation of ULID - A Universally Unique Lexicographically Sortable Identifier. ULID's are a better option than GUIDs where sorting is needed 128-bit compatibility with UUID 1.21e+24 unique ULIDs per millisecond Lexicographically sortable! Canonically encoded as a 26 character string, as opposed to the 36 character UUID Uses Crockford's base32 for better efficiency and readability (5 bits per character) Case insensitive No special characters (URL safe) Monotonic sort order (correctly detects and handles the same millisecond) https://github.com/VSoftTechnologies/VSoft.Ulid
  19. #ifdef

    Delphi 12 is available

    I can't believe they did it 🥲
  20. Stefan Glienke

    Devin AI - Is it already happening?

    It's really embarrassing to see how many people who work in software development don't know how generative AI works and are being fooled by it like an average TikTok teenager.
  21. Vincent Parrett

    Devin AI - Is it already happening?

    Who mentioned anything about perfect - just pretty good would be an improvement. That is where I would rather my subscription $$$ go towards fixing than more AI distraction.
  22. Marco Cantu

    Quality Portal going to be moved

    FYI, the server outage and the JIRA migration were totally unrelated (they happened at the same time, one scheduled the other not). Atlassian has discontinued the self hosted JIRA servers, the only option is going forward it to use the hosted system (or stay on an old not-secure and not-supported version). I don't want to discuss Atlassian offers and pricing, but given the 20 years of JIRA for our team work and bug tracking we decided to stay on it. This wasn't just one instance of JIRA, it was two separate installations with an extremely complex amount of automation and many plugins not supported by the cloud version. The limitations in JSM (Jira customers portal) are significant. We are going some extra mile around them (like sharing reports among customers). There is a lack of voting, but comments can be added. The UI is odd, but searching is not bad. We kept the system as open as possible and are open to additional suggestions, in the realms of what JSM (https://www.atlassian.com/software/jira/service-management) can do (ie, not much). Also, keep in mind that Embarcadero support comes from our support team, not just the bug reporting system. And PMs are always happy to engage in conversations.
  23. Uwe Raabe

    Serialize/Deserialize Enums with no RTTI

    I know, that probably won't solve your problem, but I usually get rid of these kind of enumerations in favor of proper ones supported by RTTI. The numerical values are handles by record helpers: type TReportTypeCode = (reportTypeCodeSTR, reportTypeCodeLCTR, reportTypeCodeCDR, reportTypeCodeLVCTR, reportTypeCodeEFTR); TReportTypeCodeHelper = record helper for TReportTypeCode private const cMapping: array[TReportTypeCode] of Integer = (102, 106, 113, 14, 145); function GetAsInteger: Integer; procedure SetAsInteger(const Value: Integer); public property AsInteger: Integer read GetAsInteger write SetAsInteger; end; function TReportTypeCodeHelper.GetAsInteger: Integer; begin Result := cMapping[Self]; end; procedure TReportTypeCodeHelper.SetAsInteger(const Value: Integer); begin for var idx := Low(Self) to High(Self) do begin if cMapping[idx] = Value then begin Self := idx; Exit; end; end; raise EInvalidOperation.Create('invalid Integer value for TReportTypeCode'); end; Now there is no more casting to and from Integers.
  24. Markus Kinzler

    Showing TMenuItem icons at design time in the IDE

    In my opinion all is said. @PeterPanettone Just submit a feature request. It has nothing to do with "lacking abilities" of the developers but priorities for development
  25. If you changed the interface section (bad idea, really) that means that every RTL and VCL unit using system.sysutils needs to be recompiled in addition to your own units and the resulting dcus need to be put in a folder where they replace the dcus that come with the Delphi installation. And remember that said installation has different dcus for debug and release and different platforms, something D7 did not have. Best reevaluate the original cause for this change in D7 and see wether you can avoid it in D11 completely.
×