-
Content Count
282 -
Joined
-
Last visited
-
Days Won
5
Everything posted by Die Holländer
-
Youtube comments - how are you retreaving them
Die Holländer replied to JohnLM's topic in Network, Cloud and Web
So, is your parsing "slow" or the fetching the API data from Youtube? How did you do the parsing? By running through the Memo of your screenshot? -
Youtube comments - how are you retreaving them
Die Holländer replied to JohnLM's topic in Network, Cloud and Web
Use the Youtube API. uses System.Net.HttpClient, System.JSON; procedure GetYouTubeComments(const VideoID, APIKey: string); var Client: TNetHTTPClient; Response: string; JSON: TJSONObject; begin Client := TNetHTTPClient.Create(nil); try Response := Client.Get( Format('https://www.googleapis.com/youtube/v3/commentThreads?part=snippet&videoId=%s&key=%s', [VideoID, APIKey]) ).ContentAsString; JSON := TJSONObject.ParseJSONValue(Response) as TJSONObject; // Parse JSON to extract comments finally Client.Free; end; end; -
Regression - Delphi 12 - Unable to debug dynamically loaded packages
Die Holländer replied to @AT's topic in Delphi IDE and APIs
The special guest forgot to mention one important development language on his site.. Bito: Supported programming languages Ah.. AI code review agent supported programming languages and tools -
Try after the add BudSys_DB.FieldDefs[4].CreateField(BudSys_DB); or Private: AmountField : TFloatField; Implementation: AmountField := TFloatField.Create(BudSys_DB); AmountField .FieldName := 'Amount'; AmountField .Calculated := True; AmountField .DataSet := BudSys_DB; AmountField .Name := BudSys_DB.Name + AmountField .FieldName; BudSys_DB.FieldDefs.Add('Amount',ftFloat, 0); Destroy: AmountField.Free;
-
Many VCL applications have been developed over the years with direct database access, which has become increasingly problematic in modern software environments. As a result, developers often feel forced to transition to web-based solutions, such as sending JSON over the internet to abstract away direct database access (e.g., for login functionality). However, this shift presents significant challenges. One major hurdle is the need to create endpoints for the countless SQL queries accumulated over time, while also transforming the rich and responsive VCL GUI into web pages. Although modern frameworks offer solutions for this transition, the process of converting database-driven VCL applications remains highly resource-intensive. These frameworks are particularly effective when building applications from scratch. But for developers who prefer to maintain their existing VCL applications and avoid going fully web-based, the question arises: is there a way to address the database access issue without a complete overhaul? Could a solution exist at the database driver level—a kind of bridge between the database server and the client driver (e.g., FireDAC)—that eliminates the need to convert data into formats like JSON and then back into VCL controls or custom DataObjects?
-
Very difficult to understand your question.. You talk about a stringgrid but in the code you posted the grid isn't mentioned. You talk about a value? What value? All the valueS (more values) in the rows of the grid?
-
programmatically determine the edition of RAD Studio 12.3
Die Holländer replied to dmitrybv's topic in Delphi IDE and APIs
Maybe in combination with: bds.exe /ProductInfo:Trial - returns True/False if the product is a Trial version. -
programmatically determine the edition of RAD Studio 12.3
Die Holländer replied to dmitrybv's topic in Delphi IDE and APIs
Enterprise returns Enterprise.. So "Personal" seems the Community Edition. -
programmatically determine the edition of RAD Studio 12.3
Die Holländer replied to dmitrybv's topic in Delphi IDE and APIs
What does the professional edition say in the "Detail" properties of the bds.exe? Also “Personal”? (or Professional) -
programmatically determine the edition of RAD Studio 12.3
Die Holländer replied to dmitrybv's topic in Delphi IDE and APIs
What error do you get when you compile something with dcc32.exe from the Community Edition. Can't you catch this error and make you decision based on that? -
programmatically determine the edition of RAD Studio 12.3
Die Holländer replied to dmitrybv's topic in Delphi IDE and APIs
There is this small component I use for ages (CEVersionInfo) that takes the version info from the Delphi IDE. (Menu-Projects-Project Options-Version Info) In the IDE I put the Delphi version name into the "Comments" field and in the program source you can use it just like: "myEdit.Text:=CEVersionInfo.Comments" I've searched the web for the component but only saw some sites where I didn't dare to click to.. I'm willing to publish the source because there is no copyright involved and it is quite small code. It can take the following info fields: FCompanyname :='<info not available>'; FFileDescription :='<info not available>'; FFileVersion :='<info not available>'; FInternalname :='<info not available>'; FLegalCopyright :='<info not available>'; FLegalTradeMarks :='<info not available>'; FOriginalFilename :='<info not available>'; FProductName :='<info not available>'; FProductVersion :='<info not available>'; FComments :='<info not available>'; FMajorVersion :='<info not available>'; FMinorVersion :='<info not available>'; FRelease :='<info not available>'; FBuild :='<info not available>'; -
Any VCL/FMX Gantt Chart or visual components that can have such functions
Die Holländer replied to ChrisChuah's topic in VCL
Last week I also needed such timeline component and I started with the basic Jedi Timeline component. It is a basic component but with a bit of programming and the use of an extra StringGrid for the right side, a ScrollBox (horizontal scroll) and extra Scrollbar (vertical scroll) I got all the functionality I needed. It has an imagelist property to display images in the timeline. delphi-jedi.org TJvTimeLine -
Could you clarify what you mean by "cheapest way" and can you tell more about the cost and your environment? 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 and several Delphi applications, what would be the estimated cost of implementing a VirtualUI solution?
-
How upgrading from Delphi 7 to Delphi 12 eliminated 15 monthly support tickets and unlocked Linux deployment.
Die Holländer replied to Serge Pilko's topic in Tips / Blogs / Tutorials / Videos
I'm looking forward to the full story of this project. Are you going the Delphi route (webserver, webcore, UniGui, etc..) or (Java)script API - end-points - back-end HTML CSS front-end route? Bravo ! 😎🏅🏆 -
TeeBI free full sources released
Die Holländer replied to david berneda's topic in Delphi Third-Party
Works very well. -
Another example of a datamodule hell and query statements in a GUI form..😒
-
There must be something in the .DFM files where you can see if it is a specific report form, like a component class/name or a specific button name. Can't you search in your .DFM text files for such indicator? The name of the .DFM file is then the same as the .PAS file.
-
Retrieving outlook contact emails
Die Holländer replied to Connie McBride's topic in Algorithms, Data Structures and Class Design
I found some old code to retrieve the list of a group, like "Global Address List" The code here is based on to put the addresses in a TreeView. I checked the code and it is still running OK but I noticed that I don't see the e-mail addresses anymore but instead it reports a string like: "/o=ExchangeLabs/ou=....." Maybe this is because of the exchange server configuration in my environment. see: how-to-get-email-address-from-o-exchangelabs-ou-exchange-administrative-group You have to play with it to see if you get the proper info you want. Maybe you can post the final answer here if you find the proper addresses.. Note that the code has a filter to only show two groups: If (CurGroupName='All Groups') or (CurGroupName='Global Address List') Then... //Uses Outlook2000; Procedure TMailTrans.CreateGALTreeForSendMailItem(aTreeView : TTreeView); Var pProp : PSPropValue; MP : IMAPIProp; strAddress : String; i, j, Check: Integer; myAddressList: AddressList; myAddressLists: AddressLists; myAddressEntries: AddressEntries; myAddressEntry: AddressEntry; CurNode, ChildNode, DetailNode :TTreeNode; CurGroupName : String; begin If NmSpace=NIL Then Begin OutlookApplication1.Connect; NmSpace:=OutlookApplication1.GetNamespace('MAPI'); NmSpace.Logon('', '', False, False); End; myAddressLists := IUnknown(NmSpace.AddressLists) as AddressLists; aTreeView.Items.BeginUpdate; aTreeView.Items.Clear; for i := 1 to myAddressLists.Count do begin CurGroupName:=myAddressLists.Item(i).Name; If (CurGroupName='All Groups') or (CurGroupName='Global Address List') Then Begin CurNode:=aTreeView.Items.Add(Nil,myAddressLists.Item(i).Name); CurNode.ImageIndex:=2; CurNode.SelectedIndex:=2; myAddressList := myAddressLists.Item(i); if Assigned(myAddressList.AddressEntries) then Begin myAddressEntries := myAddressList.AddressEntries; for j := 1 to myAddressEntries.Count do begin strAddress:='Unknown'; myAddressEntry := myAddressEntries.Item(j); if Assigned(myAddressEntry) then Begin if myAddressEntry.MAPIOBJECT<>NIL then Begin if Assigned(myAddressEntry.MAPIOBJECT) then Begin { Check:=IUnknown(myAddressEntry.MAPIOBJECT).QueryInterface(IMailUser,MP); If Check=0 then MP:=IUnknown(myAddressEntry.MAPIOBJECT) as IMailUser else MP:= IUnknown(myAddressEntry.MAPIOBJECT) as IDistList; if S_OK = HrGetOneProp(MP, $39FE001E, pProp) then begin strAddress:=String(pProp.Value.lpszA); MAPIFreeBuffer(pProp); end; // else strAddress:=myAddressEntry.Address; } strAddress:=myAddressEntry.Address; ChildNode:=aTreeView.Items.AddChild( CurNode, myAddressEntry.Name); ChildNode.ImageIndex:=7; ChildNode.SelectedIndex:=7; DetailNode:=aTreeView.Items.AddChild( ChildNode, strAddress); DetailNode.ImageIndex:=6; DetailNode.SelectedIndex:=6; End; End; { DetailNode:=aTreeView.Items.AddChild( ChildNode, myAddressEntry.Address); DetailNode.ImageIndex:=6; DetailNode.SelectedIndex:=6; } End; End; End; end; //Application.Processmessages; end; aTreeView.Items.EndUpdate; end; -
Can't you create a complete Richtext (RichText+TabelText+RichText) during the process and add the whole RichText on the Band?
-
Job opportunity for Delphi and C#/Blazor developer
Die Holländer replied to Konrad.'s topic in Job Opportunities / Coder for Hire
Wow.. That's quite a list of qualifications you want.. C#, .NET, ASP.NET(Blazor), Delphi, C++, JavaScript, HTML5, CSS3, SQL, Python, embedded systems development. -
Maybe this is what you need.. You have to tell TidHTTP that it should return the error JSON message and not only the HTTP error code. Result:=False; idHTTP.Request.ContentType := 'application/json;odata=verbose'; //Tell the idHTTP that it should NOT ignore the (JSON) errormessage returned by the server. idHTTP.HTTPOptions := idHTTP.HTTPOptions + [hoNoProtocolErrorException, hoWantProtocolErrorContent]; //Add the message in a string var. ReceiveData := idHTTP.Put(Param, JsonToSend); if (idHTTP.ResponseCode div 100) = 2 then begin Result:=True; end else Begin //Parse/Show the message aMessage:=CreateErrorMessage(ReceiveData); End;
-
You only show the JSON parsing part. What do you use to perform the Put? (Like TidHTTP?)
-
Yes, these are basically the pages reflecting what Glenn shows in the Youtube video. As you can see almost all of the development, configuration, testing and deploying is based on Visual Studio Code (extensions) and only the "Hello world" webbroker exe is made in Delphi. I was hoping that the "Azure IDE helper plugin" will bypass the Visual Studio Code part. Another thing is that it's also difficult to go through the Azure deploying part by it's dashboard that supports now about 100 zillion Cloud possibilities, options and configurations.
-
Maybe there is something possible with Python4Delphi and Pika...