Leaderboard
Popular Content
Showing content with the highest reputation on 02/28/20 in all areas
-
https://community.idera.com/developer-tools/b/blog/posts/get-ready-for-the-10-4-beta-with-update-subscription
-
Array size increase with generics
David Heffernan replied to Mike Torrettinni's topic in Algorithms, Data Structures and Class Design
Ugh. Just use a generic list and scrap most of this duplicated code. -
The most significant issue is that Set8087CW and SetMXCSR are not threadsafe. It's a bit of effort to fix it because you need to patch things like the code that handles external exceptions, which also interacts with fp unit control state. I wrote a comprehensive explanation of the issues, and how I addressed them. On request from Emba staff. I submitted that doc as a QC report. Emba then killed QC and asked me to resubmit all my disappeared QC reports. That pissed me off. Doc is here https://drive.google.com/file/d/0B2MV9dPR57BUbnVvNW0zaEFnYTg/view?usp=drivesdk
-
Office files viewer
Alexander Sviridenkov replied to Alexander Sviridenkov's topic in Delphi Third-Party
RTF, DOCX, DOC, XLS, XLSX, PPT, PPTX, SCX -
Why don't we have a bunch of cool visualizers in the IDE when it's pretty easy to make? (let's see how video embedding works, youtube had a very bad video quality) In the video there is a TStringList Visualizer I put together. Visualizer.mp4
-
Devart, a recognized vendor of professional database management software and Delphi data access components for developers and DBAs, has released SecureBridge 9.2 with support for Android 64-bit development. The vendor also supported the keyboard-interactive authentication in the TScSSHServer component, which allows the SSH server to prompt the user to input their password. The full list of new and improved features inсludes: Support for Android 64-bit development; Support for the latest Lazarus version 2.0.6; A new method TScSFTPClient.ReadDirectoryToList to retrieve a directory listing; Support for keyboard-interactive authentication in TScSSHServer; Improved server certificate validation in the TLS/SSL protocol on Android. SecureBridge offers components that can be used as clients and servers for SSH, SFTP, SSL, FTPS, HTTP/HTTPS, WebSocket, and SignalR protocols to protect data flow over an untrusted network. It is also compatible with data access components to prevent data interception and theft. To learn more about the current release, please visit https://blog.devart.com/securebridge-now-supports-android-64-bit.html About Devart Devart is one of the leading developers of database tools and administration software, ALM solutions, data providers for various database servers, data integration and backup solutions. The company also implements Web and Mobile development projects. For additional information about Devart, visit https://www.devart.com/
-
Wasn't there also a clause that you can't even talk about it for 2 years after? Pretty sure its still legal to say; I won't be on it! 🙂
-
10.4 10.4 Beta with Update Subscription
Attila Kovacs replied to ŁukaszDe's topic in Delphi IDE and APIs
Rather later than a monday version again. -
New compiled demo - Office file viewer http://delphihtmlcomponents.com/filebrowser.zip
-
Array size increase with generics
Uwe Raabe replied to Mike Torrettinni's topic in Algorithms, Data Structures and Class Design
Not sure if this works for you, but at least it works for me with 10.3.3. Let's start with a TJSONInterceptor descendant for a generic TObjectList<T>. Note that <T> represents the type of a list item, not the type of the list itself. type TObjectListInterceptor<T: class> = class(TJSONInterceptor) public procedure AfterConstruction; override; function TypeObjectsConverter(Data: TObject): TListOfObjects; override; function TypeObjectsReverter(Data: TListOfObjects): TObject; override; end; procedure TObjectListInterceptor<T>.AfterConstruction; begin inherited; ObjectType := T; end; function TObjectListInterceptor<T>.TypeObjectsConverter(Data: TObject): TListOfObjects; var list: TObjectList<T>; I: Integer; begin list := TObjectList<T>(Data); SetLength(Result, list.Count); for I := 0 to list.Count - 1 do Result[I] := list[I]; end; function TObjectListInterceptor<T>.TypeObjectsReverter(Data: TListOfObjects): TObject; var list: TObjectList<T>; obj: TObject; begin list := TObjectList<T>.Create; for obj in Data do list.Add(T(obj)); Result := list; end; Now lets assume you have a list of TMyObject classes. So you need to declare these two aliases: type TMyObjectList = TObjectList<TMyObject>; { this one is actually not needed, just for readability } TMyObjectListInterceptor = TObjectListInterceptor<TMyObject>; Now we can declare a container class with a field of type TMyObjectList: type TMyClass = class private [JsonReflect(ctTypeObjects, rtTypeObjects, TMyObjectListInterceptor)] FContent: TMyObjectList; { this could as well be TObjectList<TMyObject> } FCount: Integer; FPage: Integer; FPageCount: Integer; public constructor Create; destructor Destroy; override; end; constructor TMyClass.Create; begin inherited Create; FContent := TMyObjectList.Create(); end; destructor TMyClass.Destroy; begin FContent.Free; inherited Destroy; end; -
10.4 10.4 Beta with Update Subscription
Lars Fosdal replied to ŁukaszDe's topic in Delphi IDE and APIs
Note that even if every update subscriber gets access to the beta, they are still under NDA and may not discuss testing 10.4 Denali in public. -
Array size increase with generics
Fr0sT.Brutal replied to Mike Torrettinni's topic in Algorithms, Data Structures and Class Design
I use this // *************************************************************************** // Static class that helps perform some actions over dynamic arrays // *************************************************************************** TArrHelper<T> = class public class procedure Delete(var Arr: TArray<T>; Index: Integer); class procedure Insert(var Arr: TArray<T>; Index: Integer; const Item: T); class procedure Grow(var Arr: TArray<T>); inline; class procedure Trunc(var Arr: TArray<T>); inline; class procedure Add(var Arr: TArray<T>; const Item: T); overload; inline; class procedure Add(var Arr: TArray<T>; const ArrToAdd: TArray<T>); overload; class function Add(var Arr: TArray<T>): Ptr<T>.P; overload; class function First(const Arr: TArray<T>): T; inline; class function FirstPtr(const Arr: TArray<T>): Ptr<T>.P; inline; class function Last(const Arr: TArray<T>): T; inline; class function LastPtr(const Arr: TArray<T>): Ptr<T>.P; inline; end; TArrHelper<string>.Add(StrArr, 'foo') -
In Godzilla and beyond, at least for me.. Occasionally I run Rio when there are a lot of compiler directives in a file. Rio is a better Notepad++ than Berlin but eventually you need to run the code and it all ends by closing Rio and re-opening Berlin..
-
Actually it's much easier to get money from management for an update whenever it is being released than skipping a few versions and then argue that a particular release is so important that you must buy it. It's even easier with a subscription because then you don't have to argue at all, once you got the subscription. This gets worse with company size. Of course that particular reason might not be valid for you or your company.
-
Install recent Delphi versions on Windows XP
Alberto Fornés replied to dummzeuch's topic in Delphi IDE and APIs
I have installs with Delphi 10.3.3 on Windows XP, some problems with vcl themes (datatime picker don't work), so I don't use it with that SO, but it works. -
Anyway if a user has admin rights in your system, he is able to dump process memory or even debug it. If he hasn't, encrypt your data and transfer it in any manner.
-
Why it took him so long? These versions are very similar. I could understand complexity of D7=>D2009 migration due to Unicode; x32=>x64 is even easier in most cases. But 10.2=>10.3?
-
Tell them you agree. If the applications are in maintenance mode then I don't see any reason to upgrade, potentially introducing new problems with no benefit to the company or its customers. Keeping Delphi, and 3rd party libraries, up to date is a costly investment and unless a product is being actively developed that investment might not yield a sensible return. Whenever someone mentions the idea of a completely rewriting something from scratch I simply respond "Like Netscape?" https://www.joelonsoftware.com/2000/04/06/things-you-should-never-do-part-i/ I've been through a couple of successful complete rewrites myself, but they were architectural rewrites that were done incrementally. We basically refactored everything one tiny thing at a time until we finally arrived at the destination, many years later. And we stayed with Delphi. An incremental rewrite isn't really possible when you're replacing the platform.