Leaderboard
Popular Content
Showing content with the highest reputation since 08/20/25 in all areas
-
Migrating a Delphi XE4 System to MSSQL, PostgreSQL, and Linux – Softacom’s Experience
Roger Cigol replied to Serge Pilko's topic in Tips / Blogs / Tutorials / Videos
Added support for Linux by rewriting ±769,000 lines of Windows-specific code Built a unit testing framework from scratch (500+ tests) A code base with towards 700 000 lines of windows specific code presumably has much more that is not "windows specific". To then claim that 500 unit tests is useful strikes me as a sentence aimed at people who have never worked with unit testing. Even my simplest projects have unit tests measured in thousands..... -
It sounds as if you've given up before the fight's begun - and a fight there will be. On many different fronts. So far I've read and heard endless tales of the efforts wasted on "ai". I'm sure it will eventually settle into something actually usable - if we can survive that long, but until then I'm running circles around the people that try to get ahead of the game "ai". The cake is a lie.
-
compiler C++ compile times: Clang (bcc32c) vs. Borland (bcc32)
David P replied to Michaell's topic in General Help
Yes it does. Our main project is a 32-bit Clang app and it compiles in the background, using 28 threads (on a PC with 32 logical processors). In BCB2007, we used TC, but since using v10+ and changing to Clang, we have found the Clang compiler using the above settings to be on a par speedwise. This is compiling a 32-bit Clang application just using Clang Batch/background compiling. -
TeeGrid example, create multiple sub-grid levels using FireDAC datasets. 🤓
david berneda posted a topic in Delphi Third-Party
Example sources: https://github.com/Steema/TeeGrid-VCL-FMX-Samples/tree/master/demos/FireMonkey/Database/Master_Detail_FireDAC TeeGrid can be easily programmed to display unlimited sub-grid levels. Just add an "expander" render to enable "+" and "-" clicks, and set an event to obtain your desired sub-rows. uses Tee.Renders; var Expander : TExpanderRender; Expander:=TeeGrid1.Grid.Current.NewExpander; -
For me, I use AI with Delphi sparingly. But in two cases, it's helped quite a bit: 1) recalling seldom-used functions when I can't remember the right keyword but can describe the problem; and 2) writing unit tests. For web stuff, yes, it's great! The overall consensus, though is that it's not replacing our jobs any time soon: Measuring the Impact of Early-2025 AI on Experienced Open-Source Developer Productivity
-
Define conditional symbol in .dpr
DelphiUdIT replied to Vandrovnik's topic in RTL and Delphi Object Pascal
No, not in performance. The advantage is that you don't have to delete the traditional WIN64\Release directory for each individual project. When you erase the disk (1 second), you delete all the temporary directories for all your running projects. And, I have SSD, don't use the disk .... -
Calling a 64 bit DLL from 32 bit code
Remy Lebeau replied to dummzeuch's topic in Delphi IDE and APIs
In a word, no. Certainly not directly, anyway. Basically. Load the DLL into a 64bit process, and then use some kind of IPC with the 32bit process. The article is using C#, but the technique is not limited to C#. A COM out-of-proc server is aits own EXE process, and can be instantiated by 32bit and 64bit clients. So, you can write a 64bit server that wraps the 64bit DLL (or use COM's own DllSurrogate if the DLL is itself a COM object) , and then a 32bit client can use the server's COM object. I'm not familiar with that. It looks interesting but I wouldn't trust it in production code. -
Define conditional symbol in .dpr
dummzeuch replied to Vandrovnik's topic in RTL and Delphi Object Pascal
My experience is definitely different: Changing an include file does not force the units that include it to be recompiled. -
compiler C++ compile times: Clang (bcc32c) vs. Borland (bcc32)
David P replied to Michaell's topic in General Help
Michaell, are you using a pre-compiled header? -
Migrating a Delphi XE4 System to MSSQL, PostgreSQL, and Linux – Softacom’s Experience
Serge Pilko posted a topic in Tips / Blogs / Tutorials / Videos
At Softacom, we recently completed a large-scale project where we modernized a Delphi XE4 application. The system was used daily for payroll & HR, and over time, it had grown into a huge codebase with outdated dependencies. The goals were clear: Update the database access layer Support both MSSQL and PostgreSQL Add Linux support Introduce a testing framework to stabilize future changes Challenges we faced: Outdated data access technology – the system was incompatible with modern DB systems No testing framework – made regression risks high Cross-DB migration issues – MSSQL vs PostgreSQL differences (LEN() vs LENGTH(), IDENTITY vs SERIAL, transaction handling, etc.) Platform restrictions – Windows-only code needed to run on Linux Knowledge gaps – some application areas were undocumented and poorly understood, even by the company What we did: Replaced the legacy DB layer with UniDAC, making the app work with both MSSQL and PostgreSQL Handled SQL dialect differences and concurrency issues during the migration Added support for Linux by rewriting ±769,000 lines of Windows-specific code Built a unit testing framework from scratch (500+ tests) Automated about 30% of the process with our internal conversion tools Outcomes? Query time reduced by ±35% Defects cut by ±50% thanks to tests Full Linux (Ubuntu, CentOS, Debian) support added Technical debt reduced by ±40%, making the system easier to maintain and extend If you are interested in a full breakdown of this project, we have published it here: https://www.softacom.com/cases/softacom-transformed-a-delphi-xe4-system-for-mssql-postgresql-and-linux/ -
Migrating a Delphi XE4 System to MSSQL, PostgreSQL, and Linux – Softacom’s Experience
darnocian replied to Serge Pilko's topic in Tips / Blogs / Tutorials / Videos
Yeah, under the 'tips / tutorials' - there should be more substance than marketting. This is just spam otherwise! -
@Kas Ob. It is like having a conversation with an old pal who you know is an "embellisher" or "exaggerator". You never trust what he says and always suspect a lie being told. That is counter-productive. I would rather do the work myself. I use AI as a glorified search engine and still I doubt the answers it gives. And I absolutely hate the assumptions being provided as facts. Many times I see the AIs do that.
-
It is always a good idea to not hard code any widths related to the visual apsects of controls. They might change when the OS changes version. You have to get the width of the non-client area of a ComboBox so that you can add it your calculated MaxTextWidth to get a proper control width. But... ComboBox does not play nicely and getting its ClientWidth is not possible with functions like GetClientRect thus ComboBox does not have a properly calculated ClientWidth for it so you will have to make another plan to get it. There is a Win32 function called GetComboBoxInfo. It returns a record with details about the combobox like size of the control, the size and position of the button and size of position of the edit control in it. You will use the width of the edit control and deduct that from the width of the ComboBox and there you have the non-client area width. Just add that to the MaxTextWidth and you have the size the ComboBox should be. Remember to do these calculations and setting of the ComboBox size again when the Windows theme or settings change or the font changes.
-
Agree, also lately i am trying to get handle on some use of AI. But, here one incident with Claude just less than 2 weeks ago, (free Claude as i am not ready to join the mass hallucinations with money yet), i had this piece of code that i just optimized, four functions that calculate some variations of an algorithm, but it was mess in commented lines and the original implementation, so out of laziness i pasted it for Claude and asked it to format it and extract/keep the original algorithms as comments, and it did beautifully in seconds, i checked the commented lines and it is right and correct, replaced the original code and all looked fine, Next day and out of pure luck, i was looking on different place in that unit file, and dropped the new/modified unit against the old in BeyondCompare, also by pure luck i noticed small difference in those lines, Clause changed one constant from (-8.427913) to (-7.779733), returned to my question in its history and it is there, i have no idea why and from where that constant came, but that indicate to me it is way far from being trusted, the four functions each have 7 constants that i calculated/simplified, yet it decide to change only one. That is big red flag. Another story on the opposite side; two days ago there was a certificate expiration problem in this very forum, and i have used Tampermonkey and Greasemonkey for years now, yet it is pain in the back still for me writing a simple script, searching the net for long time and failure goes hand by hand writing script for TM and GM, anyway, i had a script that i did years back which pop a small notification when loading visiting a site and its certificate will expire within 10 days. So i went with Grok and asked for Chrome Extension to do the same, without providing my GM script, and it gave a full instruction and code for such extension, the extension didn't work as there was problem in manifest file, with 2 consequential questions and report of the problem the extension was running perfectly on my Chrome ( i don't really use Chrome it self but a fork called Supermium, the portable version), it was smooth experience and just saved me lot of time, just brilliant, and huge time saving. Both Claude and Grok fail with Pascal/Delphi in so many ways sometimes fundamentally, yet Grok is do evolve from question to another unlike Claude which revert and keep returning to the original mistakes, as example when i asked them both to extract test vectors from C files, the test vectors where huge and more than 1000 bytes in hex values, both replaced some values out of the blue, just single byte (hex value) is different, Grok remembered the one broken value i pointed to in later questions, Claude fixed it once and after a question it reverted to the wrong value, trying to correct it second time it did drop the whole approach of constant and tried to convince me reading the data from external file is better and correct way ! I tried only the free Grok and Free Claude, as for resources extraction as the best to my short experience with AI is perplexity, it give extensive resources and sources to read when asked. For now i am on the watcher bench, waiting for some real advancement when this hype frenzy start to calm down like its dust.
-
🔥 Who can accurately recreate this UI in Delphi VCL? 🔥 ---- 👉 Rules of the challenge: No third-party components – Only pure VCL! Windows API calls only – No hacks like setting a blurred wallpaper. True glass blur effect – The UI must feature real-time Gaussian Blur, not a fake overlay. Resizable & smooth movement – The form should be fully resizable and draggable without lag. Performance separation – The blur effect must run on a separate thread, ensuring that UI interactions stay smooth. Native Windows 11 style – The form should have real rounded corners, using the native Windows 11 API. Update on the challenge requirements: Regarding Resizing, and even Moving, the developer may revert the form’s design to be Normal in terms of background and borders (to make it easier for everyone to participate and to minimize code for smoother application performance). Regarding updating the background when the form does not move, you are also not required to provide this background capture (meaning we want everyone to participate, thank you). --- Happy birthday and a new year for Delphi—and every year, becomes stronger and better... --- 🚀 Fun fact: The login form shown in the image is actually running on Windows XP! 🤯 💬 Can you achieve this in Delphi VCL? Post your best attempt below! 👇 ----
-
I tried a little to do it in VCL, but the result wasn’t very good. Actually, I used the Windows API. I think if I capture the background and draw it on the form’s canvas, the result will be better.
-
I've been playing with AI lately - if you can't beat them then join them 😢 My experiences are that the AI tools out there right now do not work that well for Delphi - they suffer far too much from library hallucinations (generate great code, if only the library existed!). I gave up and focused on some other projects/ideas On the other hand, if you want to create a React or NextJs application - they will do an amazing job. The main thing is to provide a good context to start with, use the AI to generate a Product Requirements Document - refine that before you have it start coding (and tell it not to start coding till you are ready). I'm still learning all this - but I was able to take a simple saas idea and spit out a working prototype in a day. I probably won't use the prototype - it generated Nodejs/Express/React code even though I told it it use asp dotnet for the backend - I'll recode it using some existing dotnet backend code (since nodejs is single threaded and I have background tasks) and iterate on the prototype front end React code. I will say the whole prompting experience is like looking over the shoulder of a junior dev - spending a day to get them to do a weeks worth of work. 2 steps forwards, 1 step back, over and over - it can be both exhilerating and friustrating at the same time. That 1 day chewed through my $25 Replit credit - so be prepared to spend. Will be trying claude code next - I have tried replit and bolt.new (good for web) so far, along with various others for basic chat stuff.
-
TOO ALL who answered. Remy is absolutely correct. I was trying something stupid and it didn't work. I thought if I could figure out why the IDE/Compiler got stuck there I might be able figure out how to fix it. And the problem was in the dot pfm file. which are part of the 451 lines above the problem. Thanks for pointing me to those URLz , Remy. They did help. Thanks everyone. I'll refrain from stupid questions... well.... I'll Try to refrain from stupid questions in the future. I've noticed that the Format the code option gives you a kind of Ominous warning. When some one asks you "do you 'Really' want to do this?" it made me think.."hmmm .... maybe not.'
-
suggestion for 2 new su forum: AI usage and AI coding
Javier Tarí posted a topic in Community Management
IMHO, I believe we should have: * One new subforum about using AI from Delphi (not to help with Delphi coding, but for using AI from our Delphi programs * One new subforum on AI agentic coding in/for Delphi: AIs and agentics frameworks (Claude Code, Codex, Cursor...) and it's use as help with Delphi coding -
suggestion for 2 new su forum: AI usage and AI coding
Javier Tarí replied to Javier Tarí's topic in Community Management
Ok, I'll do that But my personal opinion is: that's a mistake; those topics are already capital, although Delphiers are still sleepy about them -
A Conditional Ternary Operator for the Delphi
HeartWare replied to EugeneK's topic in RTL and Delphi Object Pascal
Yes, but who turns that off? Much code (even in System units) will fail with that setting off, and lots of code will be executed unnecessarily (and may even produce wrong results since it isn't supposed to be called). -
[Info & Feedback] DelphiGenAI v1.1.0 — Sharing Updates and an Educational Approach
Maxidonkey replied to Maxidonkey's topic in I made this
I have just updated the DelphiGenAI wrapper to support the OpenAI APIs. Below is the list of changes made compared to version 1.1.0. These enhancements are designed to fully leverage the capabilities of the GPT-5 model while ensuring optimal compatibility with previous models. You can find the complete repository here: https://github.com/MaxiDonkey/DelphiGenAI Version 1.2.0 JSON Normalization Before Deserialization New GenAI.API.Normalizer module (TJSONNormalizer, TWrapKind, TNormalizationRule) to unify polymorphic fields (e.g., string vs. object). Direct integration into the HTTP layer: new Get(..., Path) | Post(..., Path) overloads enabling targeted normalization of a JSON subtree before object mapping. Canceling Background Requests New Responses.AsyncAwaitCancel(response_id) method to cancel an asynchronous response (background = true), with full callback support (OnStart, OnSuccess, OnError). Streaming Enhancements Extended typed coverage for streaming events and outputs (MCP, Code Interpreter, Image Generation, etc.) via new Responses.OutputParams classes (TResponseOutput*, TResponseImageGenerationTool, TResponseCodeInterpreter, etc.). New Types and Parameters InputParams: full coverage for computer interactions, local shell, MCP, web search, code, image generation, reasoning, text/JSON formats, tool choice/hosted tool, and file search filters. OutputParams: states (Created, InProgress, etc.), events (Added, Delta), usage metrics, and statistics. New enums: TOutputIncluding, TReasoningGenerateSummary, TFidelityType, etc. API v1/chat/completions New parameters: prompt_cache_key (prompt caching) safety_identifier (stable ID for safety monitoring) verbosity (low / medium / high) API v1/responses New parameters: max_tool_calls prompt (template reference via TPromptParams) prompt_cache_key, safety_identifier stream_options, top_logprobs, verbosity Structured System and Developer Messages New overloads: TMessagePayload.Developer(const Content: TArray; const Name: string = '') TMessagePayload.System(const Content: TArray; const Name: string = '') Improves parity between plain text and structured content flows. -
Delphi Developer Job Offer (Germany) / Delphi entwickler
NR2024 posted a topic in Job Opportunities / Coder for Hire
⚡️Dear Delphi Developers Community, I'd like to share an open job opportunity for developers in Germany. 👀We are actively seeking a highly qualified Delphi Developer with demonstrated expertise in Delphi programming, as well as proficiency in SQL and experience with ERP systems. This is a full-time, permanent position at a company that specializes in the production of automotive software, located in the Hannover region. The option for remote work, accompanied by periodic visits to the office, may be considered based on the candidate's demonstrated professional qualifications. Proficiency in both spoken and written German is required, with a minimum level of B2. 🖥If you’re interested or know someone who might be a good fit for this role, please feel free to reach out to me on LinkedIn (https://lnkd.in/duRBttdZ) or reach out via email (nina.remizova@heinicke-consulting.com). Thank you! -
Define conditional symbol in .dpr
dummzeuch replied to Vandrovnik's topic in RTL and Delphi Object Pascal
You cannot define a symbol in the .dpr file to be available in the units (it will be available in the .dpr file itself though). You must put it into the .dproj file (Project -> Options). Alternatively you can define it in an include file and include that file in all units that require the symbol. That latter approach is used by most libraries because a library cannot add anything to the project options. -
TGridify, convert a flat table into a pivot-grid in one line of code
Lajos Juhász replied to david berneda's topic in Delphi Third-Party
This is off topic. The rumor says she got divorced and kept the house, yacht and the private jet.- 3 replies
-
- pivot-table
- datamining
-
(and 2 more)
Tagged with: