Leaderboard
Popular Content
Showing content with the highest reputation on 09/24/25 in Posts
-
It was added in Delphi 11 Alexandria: https://docwiki.embarcadero.com/RADStudio/Alexandria/en/What's_New#RTL:_TZipFile
-
UltraCode64 for Delphi (aka 64-bit FastCode)
Stefan Glienke replied to chmichael's topic in RTL and Delphi Object Pascal
Man, that UltraCode project really took off in the past 6 years, didn't it? -
HI. Is there an upgrade option/price from Rad Studio 12.3 to Rad Studio 13? Thanks
-
Hi All I have released a new YAML Parser/Emitter library for Delphi XE2 or later. It is pure delphi code, tested with Win32 and Win64 but it should work for other platforms too (no winapi dependencies). Supports YAML 1.1 (partially) & 1.2 JSONPath queries with filter expressions Multiple Document streams. https://github.com/VSoftTechnologies/VSoft.YAML
-
How to get the battery capacity of an Android phone?
ningantai replied to ningantai's topic in Cross-platform
Thanks to Dave Nottage, The code you provided works perfectly. -
Troll much?
-
UltraCode64 for Delphi (aka 64-bit FastCode)
david berneda replied to chmichael's topic in RTL and Delphi Object Pascal
I have pending to add a "brute force" test to verify these functions work 100% correct. Basically a loop from zero day (Dec 30th 1899) or negative, til year 3000 or more, checking and comparing with the RTL ones. (Just to be sure its fine) -
UltraCode64 for Delphi (aka 64-bit FastCode)
chmichael replied to chmichael's topic in RTL and Delphi Object Pascal
Nice i'll include your functions. From your testing seems free pascal has faster functions than Delphi will have to check this -
I have a faint memory that somewhere around D11 or D12 Zip64 was added to System.Zip's very own TZipFile, getting rid of the 4GB limitation.
-
I'm assuming you are using this one? https://github.com/edwinyzh/ZipMaster In what way does it not work? Are you getting an error? Data corruption? Something else? What does your code look like that is not working? If ZipMaster doesn't suit your needs, then just use a different Zip library. There are plenty of them available.
-
RAD Studio 13 project build speed is slower
Vincent Parrett replied to Chau Chee Yang's topic in Delphi IDE and APIs
Unless your resources change often - I would avoid building them all the time. I guess you added the .rc files to the project? This has always been a bad idea imho - build the resources separately (create a batch file if needed) and then just use the .res files. -
New Delphi features in Delphi 13
dummzeuch replied to David Heffernan's topic in RTL and Delphi Object Pascal
I was at the Pascal Conference last week (and not at the Delphi event, because I found that too expensive for a marketing event, but I degrees). Sorpetaler, who organised it and also sponsored the community days on the weekend, had also managed to in invite a group of students (from some school in Dortmund I think). Among other things, they got an introduction into Pascal and the cool things you can do with it, and each got a USB stick with a portable Lazarus installation. I'm not saying that each of them will now become a Pascal programmer, but at least they have now seen that there are people and at least one company is using it. And the tour through the production facility definitely was impressive. We'd need similar events for Delphi, including a free license, of course. But I have little hope that the latter will be forthcoming. (Of course there is CE). -
ai coding New public repo: Tool to help coding with Delphi IDE + Windsurf
Javier Tarí posted a topic in Delphi IDE and APIs
This public repository: JavierusTk/VSCode-Switcher: Tool to edit Delphi files simultaneously between Delphi IDE and Windsurf, so it allows to take advantage of the AI tab completion is 100% coded with Claude Code; the documentation is made with Claude.ai (the chatbot), except the files README.md and CLAUDE.md, that were made by Claude Code itself It's a small tool to allow you take advantage of Windsurf "TAB-coding". It's amazing how much it helps with boilerplate-kind code -
After many times of copying and pasting debug messages (OutputDebugString) from the debugger view to the Claude Code (CC) form, so it could read it all, I decided making a MCP server that will just provide that: services to catch and read debug messages I had no idea on how to do that, but nevertheless asked Claude (rhe chat) to make a plan for it, so CC could just follow the instruction. Then asked CC to add it to one test MCP server I already had working. With help from another CC instance that connected to the server and tried using it, and finding why it errores, it's working now I've attached the initial document that Claude made (could have asked it to GPT or Gemini or whatever) Then I asked the CC instance that was using it for helpful enhancements I've attached both documents If there is interest on it, I could make a public repo MCP-debug-server.md MCP-debug-server-enhancements.md
- 9 replies
-
- ai
- claude code
-
(and 2 more)
Tagged with:
-
ai coding MCP server to catch windows debug messages
Javier Tarí replied to Javier Tarí's topic in General Help
Here it is; I used the GTK repo for the MCP server itself. You and anyone can use my code in any way without need to give me anything; not a link, not nothing. JavierusTk/MCPServer- 9 replies
-
- ai
- claude code
-
(and 2 more)
Tagged with:
-
New Delphi features in Delphi 13
Brandon Staggs replied to David Heffernan's topic in RTL and Delphi Object Pascal
Once again, it seems that Delphi's strength is the fact that there are legacy applications locked into it. The cost of abandoning millions of lines of code is far greater than continuing with an IDE that appears to be on life support with failing equipment. No refactoring. No code formatting. Yeah, I get that refactoring didn't work well and that lots of people (myself included) did not trust CTRL+D. But this is not a modern IDE. It just isn't. You can't remove basic functionality like refactoring and pretend to be a professional IDE. A couple of weekends ago I set up VS Code to write and debug 6502 assembly on an attached emulator. It was astonishingly smooth. It was fun to use. Everything just works. If it wasn't for the difficulty of dealing with hundreds of visual forms I would be looking into getting a Delphi build environment working in VS Code. -
New Delphi features in Delphi 13
Dalija Prasnikar replied to David Heffernan's topic in RTL and Delphi Object Pascal
Support for what? There is no free support. Only for installation problems and I don't think there are to many of those. Embarcadero needs to lower low end prices to bring in new users. I doubt there are many prospective new users willing to shell out over 1600$ on new PRO license. Not to mention that there is no upgrade path for existing users with old versions. They need to pay full price. -
New Delphi features in Delphi 13
Vincent Parrett replied to David Heffernan's topic in RTL and Delphi Object Pascal
To add to the VS information - you can use Visual Studio Community Edition for commercial use: it's free for individual developers and non-enterprise organizations with fewer than 250 PCs or under $1 million USD in annual revenue. It's trivial to install and manage the license for the community edition - and it does a lot (no db limitations etc). That makes Delphi a very unattractive proposition for people starting out. The only place where Delphi wins out (ignoring the price) is for Desktop Windows applications. For everything else, there are better options. I wish it were not the case, but it's too far behind now to ever be able to compete in many spaces (like web, mobile etc). -
New Delphi features in Delphi 13
Dalija Prasnikar replied to David Heffernan's topic in RTL and Delphi Object Pascal
VS Studio PRO one time purchase is 499$ https://www.microsoft.com/en-us/d/visual-studio-professional-2022/dg7gmgf0d3sj Also VS 2022 Enterprise includes Azure and other stuff. There is also as subscription only Enterprise which is 250$ per user monthly again with basic Azure plan. And there is PRO subscription which is 45$ per user monthly. Right now RAD Studio is extremely overpriced. I cannot comment on Enterprise version and the value it provides, but PRO is literally out of reach for many people who would otherwise more than willing to pay some amount of money comparable to what JetBrains or MS offer on the low end. Not to mention that it does not include Linux compiler which is rather ridiculous. Compare that to Delphi 99$ license with which they started 30years ago (which is around 250-300$) in today's value. If Embarcaderos wants to revive Delphi, they seriously need to change their pricing policy on the low end for PRO SKU and even having additional low cost Community edition with perpetual license would take them a long way. -
New Delphi features in Delphi 13
Joseph MItzen replied to David Heffernan's topic in RTL and Delphi Object Pascal
Heh, I proposed a ternary operator in 2012 and learned that Craig Stuntz and another individual whom I can't recall had already submitted a QC request, even including proposed syntax, in 2008! So it only took 17 years, but Ian Barker is waxing poetic about how the ternary operator shows that Embarcadero, almost unique among programming languages, listens to feedback from its users (yes, he really wrote that). I don't think he realizes that almost all other languages are open source and their features are totally driven by their users. The funny thing is that, to the best of my recollection, Embarcadero actually used the same syntax Stuntz and friend proposed in 2008! -
New Delphi features in Delphi 13
Joseph MItzen replied to David Heffernan's topic in RTL and Delphi Object Pascal
Modern IDEs enforce style guides. Modern IDEs were 64-bit a long time ago. Modern IDEs don't break, remove features, then promise to restore them "at some point". Modern IDEs have enough software developers assigned to them to have all features completed before shipping. Modern IDEs don't ship in an incomplete state. Delphi, C++Builder and Interbase, for some time now, do not have enough developers to continue to adequately maintain the products. We've seen code completion break for two years, failure to meet the Android 64-bit requirement date, the current fiasco, Interbase's Python driver fail to work with boolean fields for two years (!!!) until I embarrassed Ian Barker about it after his Interbase webinar when he'd bragged about the driver support, and my favorite, something breaking in the C++Builder tool chain such that, for two years now, all cross-platform compilation has ceased to work and they've taken it out of the product description. Could you imagine paying $1600+ for a cross-compiling C++ toolchain and then the cross-platform feature just disappearing? You can't charge 3 times the cost of Visual Studio, or 6x-16x the cost of a Jetbrains IDE, and have such basic features as code formatting and refactoring disappear. These are almost as basic functions as an undo option or find and replace. They're core to what an IDE is supposed to offer. Imagine giving a sales presentation to a potential IDE purchaser alongside Microsoft and Jetbrains sales reps (in another lifetime I worked at a company where just these kinds of presentations were sometimes held). Imagine what the MS and JetBrains reps would say during their presentations in response to the revelation that your IDE lacks code reformatting and refactoring? THAT'S why this is a big deal. -
This is a real example, not even a chosen one. It's to show not the programming itself, but just to show how is it to work with Claude Code Note: some of the identifiers are spanish, as I'm spanish and I tend to mix spanish and english in my code. Strings that interact with the user in any way are in spanish, because the suers are spanish Inside one of my ERP application folders, there is a group of units that help the user with inserting them in the system. They handle PDF of the Purchase Invoices, use IA on them, and reduce the user work by around 80-95%. It's fully finished, although will have further refinements. There is a file documenting them, called ganProveedoresFacturaRapida.md I jsut gave Claude this prompt: "read ganProveedoresFacturaRapida.md; we will refactor it for good practices, starting with DRY" and it presented me a plan Then instead of appying it, I made a new prompt: "Make redactoring-plan.md with your plan, and anything else needed so another IA agent can implement it just by reading the main documentation and this .md" It's answer: ● I'll create a comprehensive refactoring plan document that another AI agent can follow to implement the DRY improvements. ● Write(ganProveedoresFacturaRapida-refactoring-plan.md) ⎿ Wrote 739 lines to ganProveedoresFacturaRapida-refactoring-plan.md # DRY Refactoring Plan for ganProveedoresFacturaRapida Module ## Executive Summary This document provides a detailed plan to refactor the `ganProveedoresFacturaRapida` module to eliminate code duplication and improve maintainability following DRY (Don't Repeat Yourself) principles. The module currently has ~2500 lines with significant repetition that can be reduced by ~30%. ## Current State Analysis ### Module Overview - **Purpose**: AI-powered rapid supplier invoice entry system … +729 lines (ctrl+o to expand) ● I've created a comprehensive refactoring plan document at /mnt/w/Clientes/GAN/ganProveedoresFacturaRapida-refactoring-plan.md. The document includes: 1. Executive Summary - Overview of the refactoring goals and expected improvements 2. Current State Analysis - Detailed list of DRY violations with code examples 3. Refactoring Design - New architecture with helper classes and services 4. Implementation Plan - Three-phase approach with complete code samples for new classes 5. Migration Guide - Step-by-step instructions for developers 6. Code Mapping Table - Shows exactly how to replace old patterns with new ones 7. Risk Assessment - Identifies potential issues and mitigation strategies 8. Testing Plan - Unit, integration, and regression testing approach 9. Code Examples - Before/after comparisons showing the improvements The plan provides everything needed for another AI agent or developer to implement the refactoring: - Complete class definitions with methods - Clear mapping of old code to new patterns - Specific file locations and naming conventions - Testing requirements - Expected metrics (30% code reduction, improved maintainability) The refactoring follows DRY principles by consolidating repeated patterns into reusable helper classes: - TInvoiceFileHelper - All file operations - TTimeoutManager - Timeout and retry logic - TStatusManager - UI status updates - TBatchProcessor - Batch processing service - TAnalysisConfig - Centralized configuration This approach will transform the module from procedural code with 40% duplication to a well-structured, object-oriented design with less than 10% duplication. I've attached the file it generated, as-is ganProveedoresFacturaRapida-refactoring-plan.md
-
New Delphi features in Delphi 13
David Heffernan replied to David Heffernan's topic in RTL and Delphi Object Pascal
The tooling in RAD Studio is more than a decade behind the many other IDEs around. It's feeble that we are making excuses for it not being able to do basic refactorings. -
If you let your subscription lapse then they charge you full price for a new license because they are unscrupulous and hate their customers
-
Android 15 and edge-to-edge enforcement
Dave Nottage replied to alejandro.sawers's topic in Cross-platform
uses Androidapi.Helpers, Androidapi.JNI.GraphicsContentViewText, Androidapi.JNI.Os; function IsFullScreen: Boolean; begin Result := (TAndroidHelper.Activity.getWindow.getAttributes.flags and TJWindowManager_LayoutParams.JavaClass.FLAG_LAYOUT_NO_LIMITS) > 0; end; function GetResourceHeight(const AResourceName: string): Single; var LID: Integer; LResources: JResources; begin Result := 0; LResources := TAndroidHelper.Context.getResources; LID := LResources.getIdentifier(StringToJString(AResourceName), StringToJString('dimen'), StringToJString('android')); if LID > 0 then Result := LResources.getDimensionPixelSize(LID) / TAndroidHelper.DisplayMetrics.density; end; function GetTargetSdkVersion: Integer; var LApplicationInfo: JApplicationInfo; begin LApplicationInfo := TAndroidHelper.Context.getPackageManager.getApplicationInfo(TAndroidHelper.Context.getPackageName, 0); Result := LApplicationInfo.targetSdkVersion; end; function CheckBuildAndTarget(const AValue: Integer): Boolean; begin Result := (TJBuild_VERSION.JavaClass.SDK_INT >= AValue) and (GetTargetSdkVersion >= AValue); end; function GetNavigationBarOffset: Single; begin if CheckBuildAndTarget(35) or IsFullScreen then Result := GetResourceHeight('navigation_bar_height') else Result := 0; end; function GetStatusBarOffset: Single; begin Result := GetResourceHeight('status_bar_height'); end; procedure TForm1.FormResize(Sender: TObject); begin if CheckBuildAndTarget(35) then begin Padding.Top := GetStatusBarOffset; if Screen.Width < Screen.Height then Padding.Bottom := GetNavigationBarOffset else Padding.Bottom := 0; end; end;