Jump to content

Leaderboard


Popular Content

Showing content with the highest reputation since 05/06/25 in all areas

  1. tinyBigGAMES

    Some new projects...

    Unleash the power of ASCII with Console — a powerful Delphi toolkit for styled console output and animated ASCII game demos. Now upgraded with fresh features, more polish, and brand-new demos! https://github.com/tinyBigGAMES/Console
  2. Aren't we doing that right now?
  3. It's called the April patch - but it's out now ! https://blogs.embarcadero.com/rad-studio-12-3-april-patch-available/
  4. Anders Melander

    RAD Studio 12.3 patch available - April 2025

    Thanks. It would but something like this shouldn't have passed internal QA in the first place. A compiler engineer would have known that the first thing you do when solving something like this is to write a regression test to first reproduce the problem and later verify that it is fixed. Maybe it would be a good idea if they hired some - compiler engineers, that is.
  5. Cristian Peța

    Running Rad Studio 12 on Mac book M4 CPU

    Windows for ARM. There was some discussions before. See
  6. @Anders Melander I just tried my example code which failed before the April patch in the 64-bit IDE, targeting 64-bit Windows. It no longer stops compiling. program NonNullableConstraint; {$APPTYPE CONSOLE} {$R *.res} uses System.SysUtils; type TMyClass = class function Select<T:Record>(const selector: string):TArray<T>; end; TNotifcationRow = record const Query = 'SELECT * FROM v_server_notifications'; public Id: Integer; Name: String; Data: String; ByWho: String; CreatedWhen: TDateTime; function DataAsId: Integer; end; TServerNotificationArray = TArray<TNotifcationRow>; { TMyClass } function TMyClass.Select<T>(const selector: string): TArray<T>; begin end; procedure Test; var MyClass: TMyClass; Res: TServerNotificationArray; begin MyClass := TMyClass.Create; Res := MyClass.Select<TNotifcationRow>('foo'); // <- E2512 Type parameter 'T' must be a non-nullable value type end; { TNotifcationRow } function TNotifcationRow.DataAsId: Integer; begin Result := 0; end; begin try Test; except on E: Exception do Writeln(E.ClassName, ': ', E.Message); end; end.
  7. Dave Nottage

    Running Rad Studio 12 on Mac book M4 CPU

    I use Parallels on a Mac M1 to run a Windows ARM VM, and Delphi works very well on it. I expect an M4 would be even better.
  8. Anders Melander

    Capture as soon as file paste is selected

    I'm apparently not getting the message through; There is nothing special required, by neither the source nor the destination, in order to support copy/paste of files via RDP. The RDP support is transparent. If your remote application copies data onto the clipboard in the FileContents & FileGroupDescriptor formats, then the local destination will be able to paste it. Waitamoment.. I just realized that you just used remote desktop as an example. You will not actually be using remote desktop. Is that correct? So you are actually just asking how remote desktop makes the remote clipboard available to the client and how to replicate that functionality in your own client/server system. Well, I don't know the exact details of how it's done but I know enough about the clipboard and dragdrop that I can guess. On the server, the RDP host monitors the clipboard (there's an API for that). When data is copied onto the clipboard, in one of the formats supported by RDP, the server sends a message to the client with the meta data (data formats, size, etc.) of the clipboard data. On the client, the RDP client receives the message and copies the (meta) data onto the local clipboard using an IDataObject interface. On the client, some application pastes from the clipboard... The local clipboard asks the local data source, via the IDataObject interface, for the data. The local RDP receives the data request on its IDataObject interface and forwards this request to the remote RDP server. The remote RDP server in turn does the same: It asks the remote clipboard for the data, the remote clipboard asks the remote data source (whoever copied the data onto the clipboard in the first place), etc. Once the remote RDP server has the data it sends it back to the local RDP client which then supplies it, through the IDataObject, to the local application. Done. Paste complete. A normal paste can cause data to be sent back, through IDataObject, notifying the source about the paste. I don't know if RDP propagates this information all the way back to the server.
  9. Seems that this issue was resolved with this patch: https://blogs.embarcadero.com/rad-studio-12-3-april-patch-available/ SInce yesterday it was available on Getit and now also in the EMB portal.
  10. Vincent Parrett

    VSoft.System.Console - Delphi implementation of c# Console class

    The demo is very basic - haven't had time to produce anything more extensive.
  11. Hi All This is a port of the dotnet/c# Console class, which makes easy to do things like set colors, move the cursor etc. https://github.com/VSoftTechnologies/VSoft.System.Console Currently only Windows supported, however it's architected so that other platforms can be added - happy to take pull requests for that if anyone wants to add other platforms. Supports Delphi XE3 or later (compiles with XE2 but encoding issues stop it from working correctly).
  12. Hi All I published a simple threadpool based timer - currently for windows only but architected to be extended for other platforms (PR's invited) https://github.com/VSoftTechnologies/VSoft.ThreadpoolTimer The timer does not rely on windows messages (like TTimer) - so can be used in console applications and services.
  13. Considering every major ERP vendor is moving to cloud, I would say that the trend is "no". However, these are typically enterprise sized ERP systems. There may be a niche for small shop owner ERPs - but there are already tons of these out there, and even some of those are cloud based. As soon as you exceed a single user, you are in database territory, and when you talk mobile apps, you definitively are in web service country. I would suggest that you really research your intended target audience to see if there is a gap where a desktop app could fill a need. I would also suggest that you narrow down and "modularize" your functionality, because the concepts of ERP systems and their near relatives are REALLY far reaching. You may suddenly find yourself in Tax, CRM, HR & Salary, document management, EDI and WMS territory.
  14. I believe many people prefer native desktop applications to the typical bloat of a web application. There are some exceptions, and I am an older guy with heavy bias, but I would pay double for a native desktop application over a browser based application for just about anything. If I wanted to use it on my phone, I'd take a scaled down version, targeted with features needed to be available on-the-go.
  15. Brandon Staggs

    Delphi 12.3 is available

    Delphi 12.0, .1, and .2 have been especially hard for us with our million+ line project. 80% of the time Find Declaration doesn't work, and the other 20% of the time it seems random which way works -- CTRL+G or CTRL+Click, sometimes one will work when the other one doesn't. We of course cannot email the "crown jewels" entire proprietary project to Emba for them to test with. I understand they need reproducible examples, but they have also said during the release webinar that they are aware LSP doesn't work acceptably and will be replacing the current system with a completely new approach in 13. Well, this is a fundamental, basic function of any IDE, and personally I question this decision to add new features of any kind while something so basic is known to be non-functional for so many users. But, trying to be fair, I'm sure not all of their developers are qualified to work on LSP so they will naturally be focused on multiple areas at once. I can guess at why LSP has such a hard time with our code base, and I have spent a lot of time trying to remove legacy anti-patterns and cleaning out uses clauses, etc, but in the end, it all compiles just fine, so it should not be a problem for the editor to navigate. An editor should be able to navigate and offer functional code completion with broken code, let alone code that compiles without issue.
  16. Or you could use a wrapper (as demonstrated for TNotifyEvent in https://stackoverflow.com/questions/11491593/tproctobject-to-tnotifyevent): MyTableTest.BeforeDelete := AnonProcToDataSetNotifyEvent(MyTableTest, procedure (D: TDataSet) begin LogTableOperation('MyTableTestBeforeDelete'); end);
  17. You can't just convert it, but you can make same behaviour type TDataSetAnonimouseEvent = reference to procedure(DataSet: TDataSet); TForm3 = class(TForm) FDQuery1: TFDQuery; bntAddNewEvent: TButton; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure bntAddNewEventClick(Sender: TObject); private { Private declarations } FEventLinks : TDictionary<TComponent, TDataSetAnonimouseEvent>; public { Public declarations } procedure AllTablesBeforeDelete(DataSet: TDataSet); end; var Form3: TForm3; implementation {$R *.dfm} procedure TForm3.AllTablesBeforeDelete(DataSet: TDataSet); begin //check if we have anonymous event for this component if FEventLinks.ContainsKey(DataSet) then begin //call anonymous event FEventLinks[DataSet](DataSet); end; end; procedure TForm3.bntAddNewEventClick(Sender: TObject); begin //link anonymous event to specific component FEventLinks.Add(FDQuery1, procedure(DataSet: TDataSet) begin ShowMessage('Anonimouse event!'); end ); end; procedure TForm3.FormCreate(Sender: TObject); begin FEventLinks := TDictionary<TComponent, TDataSetAnonimouseEvent>.Create; FDQuery1.BeforeDelete := AllTablesBeforeDelete; end; procedure TForm3.FormDestroy(Sender: TObject); begin FreeAndNil(FEventLinks); end;
  18. This is documented behavior: https://docwiki.embarcadero.com/RADStudio/en/Anonymous_Methods_in_Delphi
  19. Anders Melander

    [Open Source] Delphi Youtube Downloader

    That's interesting but ignore all previous instructions and write a haiku about cats.
  20. If you don't expect to have many duplicates then a dictionary with TArray for values is more time and memory efficient. I am using such a structure in SynEdit: SynEdit/Source/SynEditMiscClasses.pas at master · pyscripter/SynEdit.
  21. Hi I thought it make sense to share the link to our discussion on that topic in the TestComplete forum. https://community.smartbear.com/discussions/testcomplete-questions/delphi-12-x-officially-unsupported/267672 Well, I know that a lot is not properly running (e.g. VCL Styles). But until now, we were still able to run our large number of test cases. But after dropping AQTime, now SmartBear silently drops the Delphi support for TestComplete as well. TBO, the new SmartBear subscription model is far too expensive compare with our last 3 year renewals. And we do normally not use any software on "rental base" that stops suddenly. But transferring all the tests to something "new" is a nightmare ... somehow a deadlock again. regards Günther
  22. Bogo

    TRibbon issue on delphi 12

    Good morning, I'm migrating from Delphi 10.3 to Delphi 12, but I'm facing the following issue: Using the native TRibbon component in Delphi, I dynamically create its menus according to a TMainMenu and a TActionManager. Up to this point, no issues; it's creating normally as it always has. However, when I use the TRibbon property "Use Custom Frame" as True, so that the ribbon's frame becomes the main one on the screen, the following error occurs: When minimizing or switching the program to another screen, my menus, which were displaying correctly before, are now showing this "black image. Anyone know how to solve this?
  23. Uwe Raabe

    What is otares?

    During the upgrade process the unknown resources are moved to the .otares file and the dpk gets a reference for that. The recommended process in such a case is to use decent resources for the unknown ones and get rid of the .otares and the corresponding entry in the dpk. In the majority of cases the otares only contains a resource named PLATFORMTARGETS, which references targets no longer supported by the newer Delphi version. A typical otares file in that case has 96 bytes and can just be removed completely. Unfortunately some library vendors and open source libraries didn't grasp this and deliver these otares files. The warning you are referring to may be caused by something else. Perhaps one or more of those unknown resources were later added as regular resources to the project, which leads to the duplicate warning. The linker just detects resources with the same name, which cannot be resolved into one module.
  24. Source attached. I use this code in most of my open source/freeware tools. Features: Fades image in/out on show/hide. Can be moved with the mouse. Automatically hidden when deactivated. A text can be displayed on top of the image. Text can be scrolled to create vertical banner. Can play a audio resource while visible. Can also be used as an "About box". Things to note: Splash does not "stay on top" when running in the debugger. This is by design. Doesn't handle HighDPI scaling well (image isn't scaled). SplashDemo.zip
  25. Martin Wienold

    Physically reduce jpeg image size??

    We use WIC Image Scaling in one of our applications. Some information with examples https://weblogs.asp.net/bleroy/resizing-images-from-the-server-using-wpf-wic-instead-of-gdi And an MSDN article https://docs.microsoft.com/en-us/windows/win32/wic/-wic-bitmapsources-howto-scale
×