-
Content Count
569 -
Joined
-
Last visited
-
Days Won
11
Everything posted by corneliusdavid
-
I have two different, very simple, cross-platform projects I'm using for development testing, one works fine, the other used to but is now getting a strange error when I try to deploy it to my Android device: The project that deploys fine has the same base project filename as the folder in which it resides. The second project (the one with the problem), DelphiVersions, is one of several projects in a folder, each project's name is appended with the type of platform it's for. The folder name is V:\DelphiVersions and I have DelphiVersionsConsole, DelphiVersionsVCL, and DelphiVersionsMobile in that folder. The last one, of course, uses FireMonkey, and is deployed to Android and iOS. I'm using Delphi 10.4 and had this working a few months ago but since Android 11 and API 30 was released I wanted to have more direct control over where and which SDK was installed and found this excellent blog that helped me get there. This also meant I switched to using OpenJDK and changed the location of the SDK and tools. Should still be good, right? As I examined the project trying to figure this out, I deleted temporary files, even removed Android support from the project and re-added it, and checked a few other things. The only thing I can think of that is different where deployment is concerned, is that the DelphiVersions one has "Mobile" appended to the end of the project name and one of the build tools must assume the project name is the same as the folder name. The obvious thing to try is rename the project to just DelphiVersions to match the folder name--I did that but it gave a similar error, this time with the path "V:\DelphiVersions\bin\DelphiVersions.apk" not found. So mismatched project name is not the source of the problem. Another thing to note is that I have projects for several versions of Delphi in sub folders and for Delphi 10.4 it's in a "104Sydney" folder and it actually generates "V:\DelphiVersions\104Sydney\DelphiVersionsMobile\bin\DelphiVersionsMobile.apk" (the file is actually where it should be!). I also looked at the deployment file list and the manifest file--still no clue. Why is the deployment process removing the first two sub-levels of folders in the filename?
-
Android project deployment messed up
corneliusdavid replied to corneliusdavid's topic in Cross-platform
I decided to move up to Delphi 11 and just use their default platform installer for Android. I also decided to retire the old Android ZTE phone. I'm able to compile, debug, and run both Android and iOS apps from Delphi 11 now. I was still getting the weird error listed in my previous post for the DelphiVersions project though, even after deleting all temporary files and recompiling. Finally, I just renamed the project to DelphiVersionsMobileBroken, created a new blank mobile app, added the forms, removed the default form, set up the icons and version info--and it works! Something was seriously amiss--but everything is back working now--and in Delphi 11. Whew! -
Android project deployment messed up
corneliusdavid replied to corneliusdavid's topic in Cross-platform
Back to the DelphiVersions project, I deleted all temporary files, even including the .dproj, .deployproj, and .res files and opened the project back up, reset some simple version info and rebuilt (still using Delphi 10.4). Now, it's not even getting to the deploy stage because it can't finish building the package, giving me this error: "Resource package cannot be an empty string (at 'src' with value '@drawable/splash_image')" and references the file, splash_image_def.xml. But looking more carefully at Delphi build output, I think one of the SDK tools is configured incorrectly: [PAClient Error] Error: E2312 Unable to execute '"C:\Users\Public\Documents\Embarcadero\Studio\AndroidSDK\build-tools\30.0.3\aapt.exe" package -f -M "V:\DelphiVersions\104Sydney\DelphiVersionsMobile\AndroidManifest.xml" -F "V:\DelphiVersions\104Sydney\DelphiVersionsMobile\bin\DelphiVersionsMobile-unsigned.apk" -I "C:\Users\Public\Documents\Embarcadero\Studio\AndroidSDK\platforms\android-30\android.jar" -S "V:\DelphiVersions\104Sydney\DelphiVersionsMobile\res" -A "V:\DelphiVersions\104Sydney\DelphiVersionsMobile\assets" "V:\DelphiVersions\104Sydney\DelphiVersionsMobile\library" "V:\DelphiVersions\104Sydney\DelphiVersionsMobile\classes"' (Error 1) Maybe I should reinstall Delphi 10.4's Android development. -
Android project deployment messed up
corneliusdavid replied to corneliusdavid's topic in Cross-platform
I was testing on an old ZTE with Android 7.1.1. I switched over to my Google Pixel with Android 11 and can debug just fine now--thanks! -
Android project deployment messed up
corneliusdavid replied to corneliusdavid's topic in Cross-platform
The Output Directory for the project is blank for all targets, so it should just be going to the default folder--and indeed the .apk file is generated in the folder I would expect: V:\DelphiVersions\104Sydney\DelphiVersionsMobile\bin. I added a new FM project to the project group and it deployed to my Android device and ran. I can't debug it because it gets an error: "tcp:64311: cannot resolve name: No address associated with hostname" but I can run without debugging--I had noticed that error with other Android projects as well. That's a separate problem but it bothers me and I'd like to get that resolved as well. -
Strategies for minimizing app start time
corneliusdavid replied to PeterPanettone's topic in General Help
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. -
Strategies for minimizing app start time
corneliusdavid replied to PeterPanettone's topic in General Help
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. -
Strategies for minimizing app start time
corneliusdavid replied to PeterPanettone's topic in General Help
Well, it seemed to be the direction the conversation was going--and I was adding to the 2nd suggestion of the OP. -
Strategies for minimizing app start time
corneliusdavid replied to PeterPanettone's topic in General Help
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. -
What is part of your contiuos integration?
corneliusdavid replied to Mike Torrettinni's topic in General Help
Does anyone use TaskRunner for automated builds/CI? -
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.
-
It's installed in my Delphi 11.
-
Parnassus Bookmarks for Delphi 11 Alexandria?
corneliusdavid replied to PeterPanettone's topic in Delphi IDE and APIs
YES! I use this multiple times a day. -
Lost the Build Groups pane in D11.0
corneliusdavid replied to Angus Robertson's topic in Delphi IDE and APIs
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. -
Lost the Build Groups pane in D11.0
corneliusdavid replied to Angus Robertson's topic in Delphi IDE and APIs
It doesn't work for me either. Delphi 10.4.2 does show Build Groups. I can't imagine it's anything we did. -
wuppdi Welcome Page for Delphi 11 Alexandria?
corneliusdavid replied to PeterPanettone's topic in Delphi IDE and APIs
Why? Were they causing a problem? -
Is your package using something that pulls in getit or welcomepage? I've never seen this and have compiled components in D11.
-
Why empty dynamic arrays = NIL?
corneliusdavid replied to Mike Torrettinni's topic in Algorithms, Data Structures and Class Design
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. -
Why empty dynamic arrays = NIL?
corneliusdavid replied to Mike Torrettinni's topic in Algorithms, Data Structures and Class Design
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. -
Stream in controls at run time created by REST Debugger
corneliusdavid replied to david_navigator's topic in RTL and Delphi Object Pascal
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. -
Why empty dynamic arrays = NIL?
corneliusdavid replied to Mike Torrettinni's topic in Algorithms, Data Structures and Class Design
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. -
Stream in controls at run time created by REST Debugger
corneliusdavid replied to david_navigator's topic in RTL and Delphi Object Pascal
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? -
Stream in controls at run time created by REST Debugger
corneliusdavid replied to david_navigator's topic in RTL and Delphi Object Pascal
Exactly. So just put the code in the OnCreate of the form and they'll be created at run time. -
Stream in controls at run time created by REST Debugger
corneliusdavid replied to david_navigator's topic in RTL and Delphi Object Pascal
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? -
Stream in controls at run time created by REST Debugger
corneliusdavid replied to david_navigator's topic in RTL and Delphi Object Pascal
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.