Jump to content

Leaderboard


Popular Content

Showing content with the highest reputation on 02/28/20 in all areas

  1. https://community.idera.com/developer-tools/b/blog/posts/get-ready-for-the-10-4-beta-with-update-subscription
  2. David Heffernan

    Array size increase with generics

    Ugh. Just use a generic list and scrap most of this duplicated code.
  3. David Heffernan

    Why upgrade?

    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
  4. Alexander Sviridenkov

    Office files viewer

    RTF, DOCX, DOC, XLS, XLSX, PPT, PPTX, SCX
  5. Attila Kovacs

    Debug visualizers

    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
  6. 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/
  7. FredS

    10.4 Beta with Update Subscription

    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! 🙂
  8. Attila Kovacs

    10.4 Beta with Update Subscription

    Rather later than a monday version again.
  9. Alexander Sviridenkov

    Office files viewer

    New compiled demo - Office file viewer http://delphihtmlcomponents.com/filebrowser.zip
  10. 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;
  11. Lars Fosdal

    10.4 Beta with Update Subscription

    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.
  12. Fr0sT.Brutal

    Array size increase with generics

    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')
  13. FredS

    Why upgrade?

    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..
  14. dummzeuch

    Why upgrade?

    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.
  15. Alberto Fornés

    Install recent Delphi versions on Windows XP

    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.
  16. Fr0sT.Brutal

    ShellExecute and passing of password

    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.
  17. Fr0sT.Brutal

    Why upgrade?

    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?
  18. Anders Melander

    Why upgrade?

    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.
×