-
Content Count
628 -
Joined
-
Last visited
-
Days Won
11
Posts posted by corneliusdavid
-
-
On 6/26/2025 at 5:53 AM, EfDev said:Did you have difficulty to set up Inno for the first time?
No--just simple INI-file style entries. It has good documentation and comes with several examples. Here are some InnoSetup Examples I added.
-
1 minute ago, Vandrovnik said:What about clients connected directly to central database server through a VPN?
Whether through VPN or direct IP to server, it's still a long internet distance for transferring large datasets resulting in serious lag.
-
6 hours ago, Die Holländer said:Could you clarify what you mean by "cheapest way" and can you tell more about the cost and your environment?
By cheapest, I mean that they didn't want to use RDP and the only other way to get everyone to use a central program/database from various geographical locations would be to rearchitect the program as a web app. Examples would be to rip out all the local database calls and replace them with REST calls and write a new webserver app to serve up those REST calls or convert the app to a true web app, perhaps by using UniGUI. But I also said "quickest" and even though expense was a factor, the database had already been moved and we didn't have the time (months) to rewrite everything because users were losing productivity every day.
So why weren't these decisions considered ahead of time? The company was sold and people suddenly brought on board. I have a full-time job and had been keeping this program in maintenance mode as a side gig for several years, so had to make adjustments quickly.
6 hours ago, Die Holländer said:Their website doesn’t provide any information about pricing, which I believe could negatively impact their sales.
Potential customers are discouraged when they have to contact a company just to get basic cost information.
It would be helpful if they included some example use cases along with the associated costs.
For example, if I already have a cloud-based database solution (e.g., MSSQL/Azure File storage/Office365) with 30 users andseveral Delphi applications, what would be the estimated cost of implementing a VirtualUI solution?
Yeah, I was a little worried about price and you do have to work through the sales people but every situation is different so they listen to what you need first; and while they have a standard policy of a minimum of 50 users, they worked with us to lower that for our situation and gave us a bid which the company for which I was contracting, accepted right away. The cost is per-user, with an annual contract; I think it came out to a little under $2,000 a year for the company's small user group. With 30 users, it'll probably be at least 3 times that. They will give you a 30-day trial and even extend it if you need. They're easy to work with and are not pushy.
By the way, their tech support is great. They walked through the installation and configuration with me; later, we had a couple of problems with a web certificate which they explained and got us back up quickly.
-
I support an old application written in Delphi XE where the client doesn't want to spend a lot to majorly upgrade but the users live in various parts of North America and used the app on their local Windows machines to access the central database. This worked OK (not great) when they were all on the west coast but when users were added from an eastern province in Canada, the additional distance made accessing data unbearably slow. So we looked for a different solution.
The quickest and cheapest way was to add Thinfinity VirtualUI to the Delphi code and set up a server where the Delphi app could access the data locally and all users use the app through a web browser--with very minimal changes to the code (still Delph XE VCL!). It works great and everyone is happy.
-
1
-
-
-
6 hours ago, Remy Lebeau said:Except in this case, as the properties shown are not declared as published, so not streamed by the DFM at all.
Right. I mentioned that as the only other way that properties could be set before FormCreate was called. To do that of course, he'd have to set a published label or editbox (or some component) at design-time.
-
On 4/1/2025 at 12:49 PM, Darian Miller said:Is there a resource that lists exactly what VCL Style Utils improves in 12.3?
I wouldn't say there's anything specifically for 12.3 but check out the extended utils that allow you to modify styles at run-time and also the non-client area enhancements. I haven't seen anything like that the "What's New" sections of recent releases of Delphi.
-
9 minutes ago, Ian Branch said:yes, it has been working for years.
Very strange. Not sure how that's ever worked--unless you were overriding the constructor or calling BeforeConstruction or AfterConstruction. The values from the DFM are streamed in and set after it's created and before FormCreate is called so that's the only other way values can be set before the event handler is fired but according to the code you showed, that's not how sQuery is being set.
-
26 minutes ago, corneliusdavid said:If so, Create is likely being called before you have a chance to set sQuery.
I'm going to correct myself before someone else does: I was thinking that maybe sQuery was being passed in or somehow set before it was created but since it's a private variable of the form being created, it couldn't possible be set before it was created. DUH!
-
3 minutes ago, Ian Branch said:var StatsGridForm := TStatsGridForm.create(nil);
...
StatsGridForm.sQuery := Format(''' ...
Right there: You are creating the form (which calls FormCreate) right before you set sQuery; therefore, sQuery is blank in FormCreate!
Are you sure this was working exactly this way in previous versions of Delphi?
6 minutes ago, Ian Branch said:Hmmm... Title should read: Is this a change in 12.3??
Yeah, I was wondering about that.
-
Is the sub-form auto-created when the application starts? If so, Create is likely being called before you have a chance to set sQuery.
-
11 hours ago, dummzeuch said:advancements in AI code transformation
AI is pretty advanced but relies on a large code base from which to learn. Doesn't most COBOL code reside only on ancient government data centers that were developed before the internet--or at least before code was put on any internet-connected devices? Perhaps having AI rewrite it in JavaScript would help shorten the conversion time even further? Of course, it would lengthen the debugging time exponentially...
-
After much contemplation (and asking Claude AI for advice), I'm proposing a new programming language with roots in Delphi (thus the name) but with some interesting and revolutionary ideas that will take into account concepts never before attempted in software development. Some of these ideas include syntax checking that changes based on the time of day, optimization that improves when builds are automated, and crypto-mining to lessen the cost of the IDE. Some will argue that that reporting compilation errors to social media could hurt the reputation of some programmers but I think it will incentivize them to become better (or at least more careful) programmers.
What do you think? Read the full article here.
-
2
-
7
-
-
You'd have to create an issue on the Github repository and wait for someone to fix it--or better yet, clone it, fix it yourself, and create pull request!
-
12 hours ago, Paul Dardeau said:interested in learning how to make a cross-platform desktop application (windows/macos/linux). My existing Delphi knowledge is completely VCL oriented
Thank you, @havrlisan, for the plug for my book. I wrote that specifically for the Delphi programmer who already has VCL experience and wants to leverage their knowledge to expand to other platforms.
I also have Andrea Magni's book and it's an excellent deep-dive into understanding and working with Firemonkey.
Be aware that Linux development with Delphi requires at least the Enterprise version and does not officially support Firemonkey (yet).
-
2
-
-
I sent Tim an email about month ago. It took him a week but he did reply. I imagine the reply would've been quicker if I was a current customer.
-
Just now, Ian Branch said:FWIW, I use an Application based Time-out that shuts the application down if there hasn't been any application activity, mouse or keyboard, for a defined period.
I've done that in the past as well. In fact, there's a component in my Github library, CloseApplication, to do that. I don't know the habits or the code on this current project well enough to confidently apply that yet. For example, if I set a 3-hour timeout but someone is still in the office at 7:00 PM and I'm wanting to update at 9:00 PM, then the app could still be open. I like the idea of being able to "Remotely stop applications with user notifications."
Now, my only problem is that this old project I've inherited is still in Delphi 7--this App Watcher component is in D12 so I probably can't use it yet.
-
Yes, and I've done that as well in some situations but I want the users to run the updated version the next day when they come into the office; if they left it running, they'll still be using the old version still in memory. Of course, I could add something that checks every minute or so and prompts to restart the app or something.
7 minutes ago, aehimself said:A lot of us use this technique in updating our applications.
Or use this--thanks for the link. So many choices!
-
1
-
-
This looks like a great solution to add to a project I inherited where the users are accustomed to running the app from a network server. I have access to the server to manage the database and update the app but sometimes they leave it running at the end of the day which locks the app from being updated.
-
21 hours ago, JohnLM said:The first thing that came to mind for part 1 was a recusive function. I'm pretty sure that's how it should be coded,
That's what I was tempted to do as well and got part 1 done relatively quickly using that method. BUT BEWARE! It's a trap! As soon as you gleefully submit the correct answer and see what you have to do for part 2, your heart sinks because ...
the number of iterations go up so high that even after running the recursive functions on my fast computer for over 24 hours, it was nowhere near getting an answer! I read some reddit comments on this and realized my method could take several thousand YEARS to finish! LOL!
Instead, you have to analyze the problem, learn the patterns, then then craft something much more intelligent--in other words, more time than I had.
-
On 2/22/2025 at 3:47 PM, JohnLM said:On 12/5/2024 at 6:58 AM, corneliusdavid said:like Day 4, not really sure how to search a matrix of characters for patterns in every direction.
AoC 2024 Day 04 Part 1
I finally finished this puzzle a week after I posted this. I was so close but the small test was not getting the right answer until I added a row of "Q"s around the entire perimeter of the 2-D array (extra row top and bottom, extra column at the start and end of each row); I must've had an off-by-one error somewhere but could not see it.
These challenges are definitely outside of the normal tasks I have to do at my day job; but I like stretching my mind!
-
4 minutes ago, JohnLM said:I hope they did not change it to something completely different.
There is 0.01% chance of that happening. There are still many parts of today's IDE similar to Delphi 1 from 30 years ago and even Borland Pascal before that. Some of the same hot keys and many of the sub-windows in the IDE. There are often additions and incremental changes and subtle (and not so subtle) ways of interacting but there's just too much that would need to be re-tested if they made a huge interface change. The Welcome Page has been where the bulk of the "pull the rug out from under you" changes have taken place and that's not a critical part of the daily programming task.
-
1
-
-
On 2/15/2025 at 4:47 PM, JohnLM said:My question was which coordinate is the 8th asteroid?
There's a key phrase in the explanatory text for this problem: "The asteroids are much smaller than they appear on the map, and every asteroid is exactly in the center of its marked position." So if we assume a scale like a baseball field is the square area and a golf ball in the very middle is the asteroid, then the only time an asteroid would block the view from another asteroid is if there is a DIRECT line through it; in other words, only vertical, horizontal or diagonal lines crossing another asteroid. Therefore, any asteroid whose view angle to another asteroid does not fit that is assumed to be visible.
And therefore,
On 2/15/2025 at 4:47 PM, JohnLM said:Q2- or is it [3,4] - the yellow highlighted cell?
yes, I believe this is correct.
-
6 minutes ago, JohnLM said:don't know the tricks and techniques you all know. So... at least I can count chars.
Even if some tricky function were called to return the number of characters in a string, at some lowest point, there would still need to be an iterator to check each character. The only thing I'd say about your code is you have an unnecessary variable (ch) and character assignment (ch := s[c]).
I suppose one "trick" to make your code shorter would be to replace all periods with blanks leaving a line with just hashtags; then you could simply get the Length of the line to get the count of asteroids in that line, something like this (not tested):
s := StringReplace(m1.Lines.Strings[r], '.', '', [rfReplaceAll]); Inc(ac, s.Length);
D5-D7 ISAPI vs D12.3 ISAPI
in Network, Cloud and Web
Posted
Is your ISAPI DLL multi-threaded?
Here's what I think is happening: the web server is handling an action (indexAction) and before it's finished and can return the result, you're trying to call another action on the same server by making a Get request out to the internet and back to the localhost. But since the server is still trying to get a response to the first request and if your ISAPI server is single-threaded, it can't process the second request until the first request is finished; therefore, it's probably timing out and returning blank.
Instead of making another HTTP request, why not just call the desired action directly? And by "call the action directly" I making make a procedural call within your code--not an external HTTP request which goes out to the internet and back to the current server. Why would you do that, anyway?
Now, you said it worked when built under D5/D7? Perhaps that was an earlier version of Indy that had a bug or there was some other setting different. Or I'm way off in my understanding of what's really going on.