Jump to content

corneliusdavid

Members
  • Content Count

    633
  • Joined

  • Last visited

  • Days Won

    11

Everything posted by corneliusdavid

  1. corneliusdavid

    bpl module can't be found

    Are you trying to install a Design-time package that relies on a XE2-compiled runtime package? That won't work, of course. What are are the required the packages of this Delphi project? Can you share the DPK of the package you're compiling/installing?
  2. corneliusdavid

    Claude a.i and I

    I've found it to be helpful as well in many situations. Just this morning, I was updating an old Delphi XE program that needed to get a list of available drives and forgot what the procedure was called. Sure, I could've looked it up but Claude reminded me of GetLogicalDriveStrings much quicker. Earlier this week, I wanted to try out Claude Code on my Windows machine. I learned it required Linux and didn't work on my currently installed WSL version 1. (The web-based) Claude helped me figure out which version of WSL I had, install WSL 2, then even though it was installed, WSL 1 was still the default so it helped me change that. Then, I had to go through a similar process with nodejs and npm. I learned several new "wsl" commands and got it up and running. It would've taken me many hours hunting down forums and blog posts to put all those pieces together--I probably would've given up. It's not great at writing whole programs or untangling a huge library of code but it can sure save time in many instances.
  3. corneliusdavid

    {$IFNDEF broken?

    Perhaps this was a re-type error but that line with "{$IFNDEF GELATI" is missing the closing curly brace: {$IFNDEF GELATI} // <-- need to close with } Otherwise, it's dimming/not-dimming as I would expect. If GELATI is not defined, then code in a "{$IFNDEF GELATI}" would execute and therefore not be dimmed--because {$IFNDEF} = if the symbol is NOT DEFINED.
  4. corneliusdavid

    D5-D7 ISAPI vs D12.3 ISAPI

    OK, that makes sense. You're using TPageProducers, right? So the HTML in each of those page producers could have something like this: <#HEADER> <body> <h1>Page Title</h1> <p>Content ...</p> </body> <#FOOTER> And the OnHTMLTag event of the page producer would replace the #HEADER and #FOOTER with your header and footer content. Then, instead of making a procedural call to the WebAction or making an HTTP Get call, just get the result of the TPageProducer.Content and you'll end up with the same thing.
  5. corneliusdavid

    D5-D7 ISAPI vs D12.3 ISAPI

    I cannot fathom why you would want to do that. Regardless of why it's not working (your original question), calling an HTTP Get to the server from which you're running in seems like such a waste of execution time: it has to package a request string, call out to the internet, figure out the address is local, look for a server listening at that address, then send the request to the server. The server, then, has to parse the request, figure out which action will handle the request, and call the appropriate procedure which then packages a response string, sends it back to the caller which finally returns to your calling procedure. Why not just call the procedure you need directly?? You already know what is supposed to happen, which method you want to handle it and what parameters it needs. Maybe I'm missing something but the more I think about it, the more puzzled I am. That's probably for the best. That may be true--IIS may be just as confused about getting a request from itself as I am about the concept! Me too, but I don't think this one needs to be understood--just avoided!
  6. corneliusdavid

    D5-D7 ISAPI vs D12.3 ISAPI

    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.
  7. No--just simple INI-file style entries. It has good documentation and comes with several examples. Here are some InnoSetup Examples I added.
  8. corneliusdavid

    Alternative for RDP solution

    Whether through VPN or direct IP to server, it's still a long internet distance for transferring large datasets resulting in serious lag.
  9. corneliusdavid

    Alternative for RDP solution

    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. 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.
  10. corneliusdavid

    Alternative for RDP solution

    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.
  11. corneliusdavid

    Is this a change in 12.3??

    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.
  12. corneliusdavid

    VCL Styles Utils...

    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.
  13. corneliusdavid

    Is this a change in 12.3??

    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.
  14. corneliusdavid

    Is this a change in 12.3??

    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!
  15. corneliusdavid

    Is this a change in 12.3??

    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? Yeah, I was wondering about that.
  16. corneliusdavid

    Is this a change in 12.3??

    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.
  17. 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.
  18. corneliusdavid

    AI Rewrite and COBOL Port Announced for Immediate Development

    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...
  19. corneliusdavid

    IDE keyboard shortcut lost

    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!
  20. corneliusdavid

    FMX learning resources?

    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).
  21. corneliusdavid

    ElevateDB / ElevateSoft website down and support not reachable

    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.
  22. 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.
  23. 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. Or use this--thanks for the link. So many choices!
  24. 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.
×