Leaderboard
Popular Content
Showing content with the highest reputation since 07/12/25 in Posts
-
Hey Y'All, With a possible code challenge in mind, I've created a framework to aid programmers with creating card games. You can find it here: objpas-card-framework Opinions, advice and PRs are very welcomed!! Especially because I'm aiming at getting a set of Delphi packages, and I need someone to create them. Cheers, Gus
-
MechaHitler surely
-
No, you should use separate units for each form and keep the {$R *.dfm} directive in each. The * makes it match with the unit name and the IDE will keep unit and form file names in synch. Please refrain from packing multiple forms into one unit. Otherwise you will most likely flood this forum with questions about the problems you get, while the correct answer will always be: Don't do that!
-
If the NTA offers advantages to your plugin you can always add that later. Whether that's the case depends on what your plugin does.
-
Looking for CBuilder/VS help on C open source project
Vincent Parrett replied to Vincent Parrett's topic in Job Opportunities / Coder for Hire
Thanks to the help of @Keesver and @pmcgee I now have quickjs-ng building with MINGW in WSL for Win32 and Win64. It would have been nice to get them building with native windows tooling but alas that's just too hard due to how the project is setup (ifdef hell). My next challenge will be to get his automated on our CI servers (server 2019) which currently do not have wsl installed. I added a windows resource file (winver.rc) so I can set the version number. #include <windows.h> 1 VERSIONINFO FILEVERSION 1,0,0,0 PRODUCTVERSION 1,0,0,0 FILEFLAGSMASK 0x3fL FILEFLAGS 0x0L FILEOS 0x40004L FILETYPE 0x2L FILESUBTYPE 0x0L BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040904b0" BEGIN VALUE "FileDescription", "QuickJS NG" VALUE "FileVersion", "1.0.0.0" VALUE "ProductName", "QuickJS NG" VALUE "Comment", "Compiled by VSoft Technologies Pty Ltd" END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x409, 1200 END END FWIW - this is the makefile I ended up with - just provide the ARCH on the command line, e.g make -f Makefile_win ARCH=64 Makefile_win ARCH ?= 32 ifeq ($(ARCH),32) CC = i686-w64-mingw32-gcc CFLAGS = -O2 -fPIC -Wall -D_GNU_SOURCE -DCONFIG_VERSION=\"V16\" LDFLAGS = -static -shared RC_COMPILER = i686-w64-mingw32-windres --preprocessor=i686-w64-mingw32-gcc --preprocessor-arg=-E --preprocessor-arg=-xc-header --preprocessor-arg=-DRC_INVOKED RC_FLAGS = --target=pe-i386 else CC = x86_64-w64-mingw32-gcc CFLAGS = -O2 -fPIC -Wall -D_GNU_SOURCE -DCONFIG_VERSION=\"V16\" LDFLAGS = -static -shared RC_COMPILER = x86_64-w64-mingw32-windres RC_FLAGS = endif OUT_DIR = Win$(ARCH) RC_FILE = winver.rc RES_FILE = $(OUT_DIR)/winver.o SRC = quickjs.c libunicode.c libregexp.c cutils.c libbf.c quickjs-libc.c OBJS = $(patsubst %.c,$(OUT_DIR)/%.o,$(SRC)) TARGET = $(OUT_DIR)/quickjs-ng$(ARCH).dll all: $(OUT_DIR) $(TARGET) $(OUT_DIR): mkdir -p $(OUT_DIR) $(OUT_DIR)/%.o: %.c | $(OUT_DIR) $(CC) $(CFLAGS) -c $< -o $@ $(RES_FILE): $(RC_FILE) | $(OUT_DIR) $(RC_COMPILER)$(RC_FLAGS) -i $(RC_FILE) -o $(RES_FILE) $(TARGET): $(OBJS) $(RES_FILE) $(CC) $(LDFLAGS) -o $@ $^ clean: rm -rf win$(ARCH) Thanks again for all the help. -
Multi-phase extension module initialization has been implemented. See Multi-phase module initialization implemented ยท pyscripter/python4delphi ยท Discussion #505 for details. What this means is that you can now create python extension modules with P4D that can be used with sub-interpreters including those created with the new concurrent.interpreters module of python 3.14.
-
I know... I know... (On the other hand I sold all my Tesla stocks).
-
Looking for CBuilder/VS help on C open source project
Vincent Parrett replied to Vincent Parrett's topic in Job Opportunities / Coder for Hire
Yes, ActiveScripting has been abandoned by Microsoft - which would be fine if they just made sure it continued to work for a while, but they recently completely broke it - https://www.finalbuilder.com/resources/blogs/finalbuilder-and-automise-on-windows-11-24h2 We have a ton of existing javascript, as do our customers (each action has events customers can write scripts on), so it's not simply a a case of swapping out scripting languages. I did look at p4d a while ago but ran into issues - I don't remember the specifics (something around threading - finalbuilder is multi threaded). It's on my todo list to look at again when time permits. We currently have iron python support, but have been telling customers not to use it for some time due to memory issues. Swapping that out for for P4D might sound like a no brainer but Iron Python allows people to use .net framework classes. What ever happens, we're going to have some unhappy customers. Tech debt sucks! -
Looking for CBuilder/VS help on C open source project
Vincent Parrett replied to Vincent Parrett's topic in Job Opportunities / Coder for Hire
I'm looking to replace MS ActiveScripting in FinalBuilder. -
NGC (normalized grey-scale correlation) - Image Recognition Library for Delphi
GabrielMoraru posted a topic in I made this
I just released my NCG library as open source on GitHub. The full library description and documentation here. Discussions: I think it might be the only NGS Pascal library out there... The program works quite fine but it speed is not impressive... on the other hand is does not have any optimization and it is single threaded. If you have multiple patterns to look into the "big" image, each one could go into a thread. On a CPU with 12 cores, like mine, this code could easily behave as and OCR ๐ Pre-compiled demo program also available. Enjoy. ____ Related to image processing: You will find also some basic image processing code in my LightSaber lib. There is another library that I will make it also open source that adds metadata to an image, so you can autorotate it based on exif, add "stars" to it (how much you like, it), pregenerated thumbnail (to save some time CPU next time you show it), etc. So, stay tuned... ๐ ____ PS: On Git hub, vote only the libraries you like ๐ ๐ ๐ I invest time in those that get votes ๐ -
How upgrading from Delphi 7 to Delphi 12 eliminated 15 monthly support tickets and unlocked Linux deployment In May 2024, we were contacted by a European leader in natural gas measurement systems. Their software was partly built in Delphi 7 and partly in C#. It had become difficult to maintain. The company wanted to migrate to Delphi 12, modernize the UI, and enable Linux deployment, without breaking existing functionality. Our team faced and handled the following challenges: The project relied on Delphi 7. That version lacked full Unicode support. The framework used ANSI strings by default, and this created critical limitations for modern global applications. The legacy app only ran on 32-bit Windows, using outdated Win32 APIs and hardcoded paths (C:\Data\). This prevented deployment on Linux cloud servers (AWS/Ubuntu). The app was built on obsolete BDE components and unsupported libraries. Here's what we did: โ Migrated from Delphi 7 to Delphi 12 โ Replaced BDE and Indy 9 with FireDAC and Indy 10 โ Refactored code for cross-platform compatibility โ Delivered a modernized UI with preserved workflow familiarity We achieved: - 15 support tickets per month were reduced to zero - Windows-only application is now cross-platform - Overall, the application is more prepared for future challenges A few months later, the client returned for an estimate to migrate other Delphi projects to a web-based platform. If you want to see the full story, with the challenges and solutions broken down, follow the link https://www.softacom.com/cases/modernizing-industrial-software-with-delphi-12/
-
Annoying warning message a'attribute declaration must precede definition'
Michaell replied to tester1234's topic in General Help
@weirdo12 I had today the same Clang problem, thanks for your post. -
Share a data between two units in dynamic loaded BPL.
PeterBelow replied to CRO_Tomislav's topic in VCL
If a "host" application is designed to use form classes implemented in dynamically loaded packages the host app has ( should have) no idea how the form classes are named. To make this into a truely modular and extensible application you need a design like the one used by the RAD Studio IDE. The app only knows where it has to look for extension modules to load (a folder or a registry or other configuration store listing the module file names). The modules register the form classes when loaded into a factory class or list implemented in a statically bound package used by host and all form modules. The host app can then enumerate the available forms using this factory to offer the selection to the user, check if such a form has already been created by searching through the Screen.Forms collection by class name, and, if not found, create an instance using a local variable that cannot be accessed from other parts of the app. If a form reference is needed elsewhere it has to be retrieved from Screen.Forms or another list, e.g. (for MDI child forms) the MDI frame form's MDIChildren collection. Doing it this way decouples the modules and even makes it possible to add modules without having to rebuild the host app. If one of the dynamically loaded forms uses a data module it should override the constructor and check for the presence of the DM before calling the inherited constructor and create an instance of the DM if necessary. I have a strict policy of immideately deleting the IDE-created global variables for forms and DMs if these are not part of the host app and are autocreated and live until the app closes. That prevents all manner of problems caused by accessing global references that may not be valid. -
How can I force a record to be allocated on the heap ?
David Heffernan replied to dormky's topic in Algorithms, Data Structures and Class Design
This is all documented. Obviously we can tell you the answers but once you know about New, you can read the documentation to find out the rest of the details. It's really useful to know how to do that. -
FmxLinux bundling with Delphi and RAD Studio
Darian Miller replied to Sherlock's topic in Cross-platform
Now there's a marketing line for FMX :o -
FmxLinux bundling with Delphi and RAD Studio
Dalija Prasnikar replied to Sherlock's topic in Cross-platform
I said it cannot be reworked, not that it is unusable. That reworking part stands for any other framework, too. You cannot change foundations without demolition. Problem with FMX is that because foundations are not exactly great, many things that should be improved cannot easily be done. For instance, layout alignment logic is totally insane. It does not auto align layouts from insertion order, but from controls existing x, y positions. Try hiding one view and showing it again, and the whole layout will be broken. You have to manually recalculate the whole thing which completely defeats the purpose of auto-alignment. Then like I mentioned before, no separation between low and high level code. Separating those would totally dismantle whole thing. Poor support for multi-threading - because almost everything is directly connected to UI part that cannot be touched from background threads. It is hard to design fast and responsive UI under such constraints. And you cannot fix that without separating low level and high level code, as well as base, primitive classes. and list goes on... -
FmxLinux bundling with Delphi and RAD Studio
Uwe Raabe replied to Sherlock's topic in Cross-platform
The original FMX styles were actually vector based. IIRC that was replaced by bitmaps for performance reasons. -
FmxLinux bundling with Delphi and RAD Studio
Dalija Prasnikar replied to Sherlock's topic in Cross-platform
It means that you touch one class in one (base unit) and the whole framework gets dragged in. Cyclic dependencies between units are enormous and there is no clean separation between low level code dedicated to direct interaction with graphics engine and high level code. Not related to the term... but there is also another architectural deficiency because a lot of layout and painting logic is totally illogical. Resulting in two things - harder to achieve your design goal (implement design you need) and second constant unnecessary recalculations and iterations through view hierarchy because changes that could be contained to small part are propagated all over - making the whole thing slower. -
FmxLinux bundling with Delphi and RAD Studio
Arnaud Bouchez replied to Sherlock's topic in Cross-platform
Indeed, from the business point of view, they want to push people buying the Entreprise or Architect editions... so get more money... But the weird point is that the (very competent) guy behind FMXLinux made it after quitting EMB... weird talent/HR management for sure. -
Components visible:= false, true; may reorder components.
-
FmxLinux bundling with Delphi and RAD Studio
Dalija Prasnikar replied to Sherlock's topic in Cross-platform
How to rework FMX? Burn it down and start fresh, with people who know how to properly structure GUI framework, would be the only proper choice. Not the viable one though. -
The funny thing is, there was a OpenGl Layer for Windows working really well at this time. (I'm also a lifetime customer, my "lifetime" was 4 or 5 month.....). After the purchase the OpenGl part was dropped, not longer usable, and older Delphi not more supported. It was one of the worth purchase i have ever done.
-
FmxLinux bundling with Delphi and RAD Studio
Stefan Glienke replied to Sherlock's topic in Cross-platform
It still baffles me that DXScene or VGScene were usable given the years it took FMX to properly work. -
FmxLinux bundling with Delphi and RAD Studio
Alexander Elagin replied to Sherlock's topic in Cross-platform
I felt the same when AnyDAC, now FireDAC, was sold to EMB (or whatever was its name back then) when I just paid its renewal for another year. Needless to say I never got my money back nor got access to FireDAC which I avoid since then because of such attitude. Luckily, DevArt (UniDAC) offered a great alternative. I just hope that FmxLinux and CrossVCL will remain property of KSDev. -
FmxLinux bundling with Delphi and RAD Studio
Arnaud Bouchez replied to Sherlock's topic in Cross-platform
I don't see this announcement as a good sign. From the management/project point of view, they bought a license from the FMX initial developper, who left EMB last year (IIRC) to re-create his own company https://www.fmxlinux.com - EMB dev team was not able to do it on their own anymore. Sad. I worry about Delphi future if they need to rely on external coders for new targets or features. From the technical point of view, Linux was supported - with FPC as compiler - 10 years ago http://web.archive.org/web/20091213100642/http://www.ksdev.com/dxscene/index.html when FMX was called DXScene. So is it a real progress to be able to have back a feature I got 10 years ago, when I bought my lifetime licence to DXScene? BTW the "LifeTime" of my DXScene license did last 1 year only, since it stopped when EMB bought DXScene - I really felt it was some kind of theft at that time. Now their "LifeTime" license is $349 - I really wonder if it is worth it...