Jump to content

corneliusdavid

Members
  • Content Count

    409
  • Joined

  • Last visited

  • Days Won

    6

Everything posted by corneliusdavid

  1. corneliusdavid

    Strategies for minimizing app start time

    I read an article years ago about how office workers complained of the slow speed of elevators in a tall building, especially at 8:00 in the morning when everyone was arriving for work. Without changing anything with the elevators at all, the building owners simply installed big mirrors in the lobby and the complaints nearly stopped. A lot of times, it's just a distraction that is needed or visual activity which gives the impatient user a feeling like there's something going on and significantly reduces the stress of waiting.
  2. corneliusdavid

    Strategies for minimizing app start time

    On a more serious note, I often use a ListBox or something and show the types of things that are being loaded which are taking time, such as opening datasets or connecting to a remote resource. Not only does it inform the user of what is happening but also might show (visually) where the bottlenecks are when there's a pause in the scrolling list of activities.
  3. corneliusdavid

    Strategies for minimizing app start time

    Well, it seemed to be the direction the conversation was going--and I was adding to the 2nd suggestion of the OP.
  4. corneliusdavid

    Strategies for minimizing app start time

    Have you ever used Discord? When it starts or is loading something that takes a few seconds, it displays a series of funny "status" messages, similar to the ones I found here: https://gist.github.com/meain/6440b706a97d2dd71574769517e7ed32 If you can't minimize the ASP time but want to entertain the user, that might be a simple and fun way to do it.
  5. corneliusdavid

    What is part of your contiuos integration?

    Does anyone use TaskRunner for automated builds/CI?
  6. corneliusdavid

    ToolsAPI for D11 Welcome Page?

    Does anyone know if there will be documentation and/or source for supporting the new Welcome Page plugins in Delphi 11? I like this version's Welcome page much better than previous versions and it's nicely configurable but would still like to be able to create my own additions. I see several WelcomePage.Plugin.XXX packages in the \bin folder and listed under "Known IDE Packages" in the registry but there doesn't seem to be any corresponding source code in the source\ToolsAPI folder of the Delphi 11 installation.
  7. corneliusdavid

    KSVC gone missing.

    It's installed in my Delphi 11.
  8. corneliusdavid

    Parnassus Bookmarks for Delphi 11 Alexandria?

    YES! I use this multiple times a day.
  9. corneliusdavid

    Lost the Build Groups pane in D11.0

    Not for me. I had never used Build Groups before, opened a project group, clicked the Build Groups button and saw the Project pane go blank. That was last night. Tried it again this morning and it works fine. Defined a Build Group, compiled, closed down Delphi 11, brought it back up, reopened the Build Group--still see it. That was weird but at least it works again.
  10. corneliusdavid

    Lost the Build Groups pane in D11.0

    It doesn't work for me either. Delphi 10.4.2 does show Build Groups. I can't imagine it's anything we did.
  11. corneliusdavid

    wuppdi Welcome Page for Delphi 11 Alexandria?

    Why? Were they causing a problem?
  12. corneliusdavid

    Delphi 11 Installing vcl component

    Is your package using something that pulls in getit or welcomepage? I've never seen this and have compiled components in D11.
  13. corneliusdavid

    Why empty dynamic arrays = NIL?

    No, a TList is similar to the dynamic array with no elements in this case, it's just declared but doesn't point to anything yet until the Create constructor is called, THEN it points to the allocated memory for the TList. Even though TList, at that point, doesn't have any items, it still has other properties like Count which is initialized at Create to 0. The dynamic array isn't a class, in other words, it doesn't have other properties, such as Count, which is why you have to use the Length() function.
  14. corneliusdavid

    Why empty dynamic arrays = NIL?

    And to further clarify my "array declaration" statement, a dynamic array declaration doesn't allocate the space for it until its length is set to at least 1.
  15. So what I would suggest is either try out Uwe's code above or look at the GExperts code (it's open source) to figure out how they do it. Also, since you're specifically wanting to use the three components generated by the REST Debugger, you could compare the components it creates with the values in the paste buffer and do a little parsing to set the values for those specific components.
  16. corneliusdavid

    Why empty dynamic arrays = NIL?

    To expand on what Uwe said, an array declaration allocates space for the variable and creates it when it's declared, much like an integer or string. Changing it's length sort-of redeclares it. This is in contrast to the TList<T> where the declaration doesn't allocate space for the variable (instantiate it) so you have to actually call its Create constructor. Before it's "created" then, it's nil.
  17. Or do you want the user to actually use the REST Debugger, click the Copy Components button, and go to your running application and do the paste while it's running? So you want to convert the pasted objects to "create" statements--is that what you're after?
  18. Exactly. So just put the code in the OnCreate of the form and they'll be created at run time.
  19. Pasting components to the form is essentially creating the components and hooking them to the form. How does this code not do exactly that? What else are you looking for?
  20. Any component can be created in code at runtime. Here's the code for your posted set of components: var RESTClient1: TRESTClient; RESTRequest1: TRESTRequest; RESTResponse1: TRESTResponse; begin RESTClient1 := TRESTClient.Create(Self); RESTClient1.Name := 'RESTClient1'; RESTClient1.BaseURL := 'https://api-eu1.XXXXXXXXXXXXXXX/ORD'; RESTClient1.Params := <>; RESTRequest1 := TRESTRequest.Create(Self); RESTRequest1.Name := 'RESTRequest1'; RESTRequest1.AssignedValues := [rvConnectTimeout, rvReadTimeout]; RESTRequest1.Client := RESTClient1; RESTRequest1.Method := rmPOST; with RESTRequest1.Params.Add do begin Kind := pkHTTPHEADER; Name := 'x-api-compleat-key'; Value := '0aXXXXXXXXXXXXXXXXXXXXXX94'; end; with RESTRequest1.Params.Add do begin Kind := pkREQUESTBODY; Name := 'body9BE6CF603159471FB026D7FF6FC3D2DB'; Value := ; ContentType := ctAPPLICATION_JSON; end; RESTRequest1.Response := RESTResponse1; RESTResponse1 := TRESTResponse.Create(Self); RESTResponse1.Name := 'RESTResponse1'; end; The GExperts IDE plugin has a very easy way to generate this. After it's installed, simply right+click on a component and select "Components to Code" and the code to generate the component is copied to the clipboard. Then just paste them into your code editor. It does one component at a time so I had to combine the three RESTxxx components into the VAR section after each one but it's really as simple as that.
  21. corneliusdavid

    web scraping or web parsing for project?

    I would suggest looking at one of Embarcadero's latest acquisitions, ApiLayer; they have a web-scraping API. Don't know anything about it but "Turn web pages into actionable data" (scraped from their website) sounds like what you're trying to do.
  22. corneliusdavid

    IOS 15 suppoort

    Thank you for these details!
  23. corneliusdavid

    Parnassus Bookmarks for Delphi 11 Alexandria?

    Bookmarks and Navigator are my favorite Delphi IDE plugins--hope it's not much longer!
  24. corneliusdavid

    Regex help please..

    LOL! We all get stuck in a train of thought once in a while! I've definitely been there. 😎
  25. corneliusdavid

    Regex help please..

    I think I would split the string on semicolons and run the regex on each individual address. function ValidEmail(const EmailAddress: string): Boolean; const EMAIL_REGEX = '^((?>[a-zA-Z\d!#$%&''*+\-/=?^_`{|}~]+\x20*|"((?=[\x01-\x7f])' + '[^"\\]|\\[\x01-\x7f])*"\x20*)*(?<angle><))?((?!\.)' + '(?>\.?[a-zA-Z\d!#$%&''*+\-/=?^_`{|}~]+)+|"((?=[\x01-\x7f])' + '[^"\\]|\\[\x01-\x7f])*")@(((?!-)[a-zA-Z\d\-]+(?<!-)\.)+[a-zA-Z]' + '{2,}|\[(((?(?<!\[)\.)(25[0-5]|2[0-4]\d|[01]?\d?\d))' + '{4}|[a-zA-Z\d\-]*[a-zA-Z\d]:((?=[\x01-\x7f])[^\\\[\]]|\\' + '[\x01-\x7f])+)\])(?(angle)>)$'; var Emails: TStringList; begin Result := True; Emails := TStringList.Create; try Emails.Delimiter := ';'; Emails.StrictDelimiter := True; Emails.DelimitedText := EmailAddress; for var i := 0 to Emails.Count - 1 do if not IsMatch(Emails[i], EMAIL_REGEX) then begin Result := False; Break; end; finally Emails.Free; end; end;
×