Jump to content

hsvandrew

Members
  • Content Count

    35
  • Joined

  • Last visited

  • Days Won

    2

hsvandrew last won the day on November 30 2021

hsvandrew had the most liked content!

Community Reputation

23 Excellent

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. I've used TNetHTTPRequest to setup a request with headers successfully like this: NetHTTPRequest1.CustomHeaders['Content-Type'] = 'text/html'; Typical object setup is like this NetHTTPClient1 := TNetHTTPClient.create(nil); NetHTTPRequest1 := TNetHTTPRequest .create(nil); NetHTTPRequest1.Client := NetHTTPClient1; Usage NetHTTPRequest1.post( url , data , outcome );
  2. hsvandrew

    Delphi 11.2 - Ubuntu Debugger error

    Instructions for linux can be a bit tricky because there are slight differences between versions. If the above doesn't work for you, like it didn't for me on Centos9 (October 2024), install the yum packages as per the script above Find your python 3 library using sudo find / -name libpython3*.so* For example, mine was /usr/lib64/libpython3.9.so.1.0 Run the symbolic link command (ln) as in the script, but using the correct path as you found using find. You might find multiple libpython files. You want the one that looks similar to mine. Hope this helps someone.
  3. hsvandrew

    SplashForm freeze

    The Delphi VCL is not multi-threaded. The code that's running to create all those forms will block code like your animation from working. Its rarely a good idea to actually 'create every form' on startup like this. I know that's how Delphi does it, but its less than ideal. App startup will either be slow because You have some code running in an initialization section somewhere, either in your code or the many libraries you may be using. You have a database connection on a form, perhaps to a database that may not be connectable, and this is causing a delay until it times out when creating a form Generally I would suggest these principles: Create forms when they are first used rather than at startup or during an idle stage when the user won't notice Move operations that aren't VCL/drawing related into threads, allowing the UI to still update whilst they run i.e. disk operations, database operations etc If these things don't work, even though it will have other impacts, you could consider creating a launcher app that shows the splash screen whilst then launching the real app. This will cause a few issues with taskbar/icons etc, but maybe a solution for a very slow startup that can't otherwise be coded around with the above 2 suggestions. Delphi can sometimes encourage people to create enormous forms with thousands of components. This is the only reason I can think of in a modern computing environment other than an IO delay for any noticeable 'load time' during creation of forms on startup.
  4. hsvandrew

    Using Deplhi TWebmodule with parameter

    Hi Jim, To handle parameters built into the URL rather than as query parameters you'll need to do the following: Assign a partial path to the 'pathInfo' of your WebModule Action i.e. /getname/* Then, in your ActionHandler you'll want to access the path part of the URL, break it into an array split by / and then execute based on the parts that matter var paths: TArray<string> = Request.PathInfo.split(['/']); //Check array length etc if sameText(paths[2],'add') then //Do add function else if sameText(paths[2],'delete') then //Do add function object.delete( paths[3] ); Hope that makes sense. I haven't tested this exact code so there might be slight syntax issues.
  5. I agree with you. I just have to create a solution within a team where someone higher than me doesn't get this 🙂
  6. hsvandrew

    Delphi 12 VCL painting differs through RDP

    I don't know how much access to this server you have, but I would start by connecting to its console session either physically or via something like Anydesk and logging in there, then running your app to see how the base operating system settings are affecting your application. This will then determine if its ONLY via RDP or across the entire machine. If you determine its only in RDP, review the settings in the remote desktop connection (MSTSC) app, by selecting LAN (10mbps or higher) and ensuring all are ticked ON It is also possible for a system admin to disable some of these options server side via policy.
  7. I'm just wondering how others have created system wide locks to manage sharing a resource such as a single log file with multiple processes (I know, not ideal) Two examples are as follows: {$IFDEF useSemaphore} procedure systemWideLock( name: string; proc: TProc; timeout: integer = 0 ); var hSem: THandle; nameWS: array[0..255] of WideChar; begin StringToWideChar(name,nameWS,254); hSem := CreateSemaphore(nil,1,1,nameWS); try WaitForSingleObject(hSem,INFINITE); proc(); except end; ReleaseSemaphore(hSem,1,nil); end; {$ENDIF} {$IFDEF useFile} procedure systemWideLock( name: string; proc: TProc; timeout: integer = 0 ); var fs: TFileStream; locked: boolean; begin locked := false; while not locked do begin try fs := TFileStream.create('C:\temp\File.lock',fmCreate); locked := true; except end; sleep(random(3)); // can be removed end; try proc(); except end; FreeAndNil(fs); end; {$ENDIF} The challenge with the Semaphore, whilst being a much faster mechanism, is that, if for some reason code execution gets stuck between lock and unlock (let's say a dialog appears in a silent process or the process gets into an endless loop), end tasking the application will not release the semaphore, resulting in the need to reboot Windows. The file approach seems to work better in that a file lock releases when the process terminates (apparently timing might vary but it happened ok in my testing), and you can argue if the sleep should be removed or the time changed, but either way its orders of magnitude slower. Are there any other lock types that could be used that release upon process termination?
  8. hsvandrew

    Delphi 12 is available

    Or maybe, after the failures that have been 10.4,11 and 12, 13 could buck the trend and the show superstition for what it is and be amazing... Like do people really think the gods don't know you're staying on the forth floor even if the humans didn't number it 4?
  9. hsvandrew

    Delphi 12 is available

    First impressions of the installer: someone from 1990 tried to replicate the modern Visual Studio installer and failed. Looks ugly and embarrassing. Proportions are wrong, padding is wrong, looks amateur. Let's see if Code Insight finally works as we haven't been able to upgrade since 10.3.3....
  10. hsvandrew

    TEdgeBrowser - how to fix a blank display

    Just in-case it helps someone, I've spent hours trying to work out why my TEdgeBrowser (chromium) was blank in one app, whilst working fine in the simple demo app. Turns out CoInitializeEx(nil,COINIT_MULTITHREADED); will stop TEdgeBrowser from working. This adjustment replaces CEF4Delphi, where this method was called and all worked ok. Of course you also need the WebView2Loader.dll in the same folder as your application and to have installed Chromium Edge.
  11. hsvandrew

    VLC Player 64bit

    For the future benefit of anyone having a similar problem, here is the solution and possible keywords for resolution. The code/freeware/project I was using was uTLibVLC FDllHandle was declared as an integer. I suspect the clue to help me realise there was a problem was that LoadLibrary for the libvlc.dll resulted in a negative integer whereas the other DLL's had positive handles i.e. integer overflow Changing FDllHandle : integer; to FDllHandle : HMODULE; fixed the problem.
  12. hsvandrew

    VLC Player 64bit

    Does anyone have VLC player (the 64bit DLL) working in Delphi? I load the 64bit DLL like this DLL := ‘C:\Program Files\VideoLAN\VLC\libvlc.dll’; FDllHandle := LoadLibrary(PChar(ExtractFilePath(DLL)+‘libvlccore.dll’)); FDllHandle := LoadLibrary(PChar(DLL)); But all the GetAProcAddress functions fail, even though I can see the exports in the DLL.
  13. I don't know if its just Delphi developers that are negative on ChatGPT but it does seem fairly unreasonable. Firstly, our IDE struggles to put begin's and ends and other basic structures in place at present, yet a newish product in its early versions can be given an english statement about what you require and knock out code in multiple languages. For example you can ask it to write a class about a patient going to hospital or ask it to show a delphi example of how a function in curl might be coded. Sure, not every output of code is perfect in every day but seriously, show me the previous system that was even close to this amazing and giant step in computing. This breakthrough is as least as important as the internet and iPhone were to changing the world. If you watch this video and don't see how much this is going to impact business systems, something is wrong with you.
  14. hsvandrew

    Class Completion

    Thank you @Achim Kalwa I hadn't installed that part of the excellent work by Andreas Hausladen (I use the other critical bits). Still amazes me that these key failures never get actually fixed. Even the alpha sort option doesn't actually work properly.
  15. hsvandrew

    Class Completion

    Is there an option (or plugin) to get class completion to work in a way where all new procedures & functions will appear at the bottom of the unit or in the same order as its declared, rather than in some kind of alpha sorted location? The help topic https://docwiki.embarcadero.com/RADStudio/Sydney/en/Using_Class_Completion says "If your declarations and implementations are sorted alphabetically, class completion maintains their sorted order. Otherwise, new routines are placed at the end of the implementation section of the unit, and new declarations are placed in private sections at the beginning of the class declaration." But I don't really know what this means in practice and I can't find any logical settings to control the behaviour... Example: TFoo = class(Tobject) public //Containers procedure Zoo; //Animals procedure Cat; procedure Dog; end; I want the same order to be preserved when creating the implementation.
×