Forum > General

Is Lazarus IDE a viable choice to write a non-trivial Desktop App in 2023?

(1/1)

pyeri:
Evening Folks!

So, for my upcoming side project which is a cross-platform desktop productivity app (soon to be open sourced, Apache 2.0 licensed), I wanted to evaluate the viability of Lazarus IDE for the same. Many of my concerns in this regard can be found in this reddit thread I had posted few days ago.

Ordinarily, .NET (WinForms) would have been my first choice here but I've rejected that choice considering it's not cross-platform (one of my goals is ubiquity, users of Windows/Mac/Linux should be able to use my tool). There is also the case of a continual decline in market share of Windows OS over the past decade in favor of Mac Books and Linux Distros like Ubuntu, so a "windows only" solution isn't quite future-proof from that aspect, me thinks.

The app I'm going to write is non-trivial though and very much feature-filled, which is why I'm stuck with Java (Swing) and Pascal (Lazarus IDE) as the final shortlist. I had briefly considered C/C++ also but neither I'm a system programmer, nor I want to needlessly add machine level complexity on top of user level complexity (which is already a pretty tough nut to crack as it is!).

Basically, I want these features:

1) Ability to multi-task in the background with timer control or something (resident in the system tray).
2) Editable grid control, preferably not data-bound (there is TTable or something for that, right?)
3) A Tabbed Pane or Notebook container (possibly a second layer of tabs within tab as I want to have things like text-notes in each one)
4) Native connectivity to Sqlite databases for storing details about tasks and milestones.
5) Good networking API, some features will require making HTTP/HTTPS web requests to fetch online information.
6) Seamless support for event binding for things like dropdowns, text boxes, check and radio buttons, etc.
7) A long text or memo control, preferably with syntax highlighting (I think there is TSynEditor or something but syntax highlighting for coding languages has to be manual, right?)

What do you think? How does Lazarus IDE fare for a non-trivial app with these features?

I might want to add more features as the development progresses which I can't think of now but the LCL seems to be powerful enough from what I've researched so far. But I've heard equally good things about Java/Siwng also and the Eclipse IDE. What do you think are the pros and cons of Swing/Lazarus in this regard?

cdbc:
Hi
Yes, to FPC/Lazarus.
They tick all your boxes  ;)
The best example of a feature-rich and complex multi-platform application is
   ....Tadaaaa: Lazarus itself  :D
To name a couple of others, have a look at @AlexTP's "cudatext" and @dbannon's "TomBoyNG"...
There are plenty others, we've even got our own AI-specialist: dr. Schuler @schuler ex: https://github.com/joaopauloschuler/neural-api/blob/master/examples/StringManipulation/StringManipulation.lpr
The Java-stuff, I'll leave for others to deal with...
Regards Benny

Zvoni:
1) Yes. Timer-Control/Class or even direct multithreading
2) TStringGrid and/or its descendants
3) No idea, never used one, but i think there are some
4) SQLite native connection-class, but careful: The bindings are from 2014 (i think), so there might be some things missing you might expect today
5) Synapse and Indy come to mind
6) Pretty much the whole set
7) Yes, TSynEdit, but IIRC there already exist highlighting dictionaries for a lot of languages

No idea about Java/Swing Eclipse

TRon:

--- Quote from: cdbc on November 28, 2023, 12:38:35 pm ---To name a couple of others, have a look at @AlexTP's "cudatext" and @dbannon's "TomBoyNG"...

--- End quote ---
In addition to what cdbc wrote another good example that 'ticks' some of your boxes is Double Commander though there are plenty of other good examples some of which are listed here per category.

And in addition to what Zvoni wrote, Lazarus comes default with a tabbed and/or notebook component, and there are 3th party packages that offer it (or something alike it) as well.

So yes, Lazarus is able to tick all your boxes but do realize that if you are unfamiliar with a RAD like Delphi/Lazarus that it might take some time to getting used to.

Handoko:

--- Quote from: pyeri on November 28, 2023, 11:22:57 am ---1) Ability to multi-task in the background with timer control or something (resident in the system tray).

--- End quote ---

For timer, you can use TTimer. This is a TTimer demo:
https://forum.lazarus.freepascal.org/index.php/topic,52780.msg389815.html#msg389815

For system tray, see screenhost below. That is my SideNote tray-mode-program, tested to run properly on Ubuntu Mate, WinXP, Win7.


--- Quote from: pyeri on November 28, 2023, 11:22:57 am ---2) Editable grid control, preferably not data-bound (there is TTable or something for that, right?)

--- End quote ---

This is a searchable grid demo:
https://forum.lazarus.freepascal.org/index.php/topic,37181.msg249361.html#msg249361


--- Quote from: pyeri on November 28, 2023, 11:22:57 am ---3) A Tabbed Pane or Notebook container (possibly a second layer of tabs within tab as I want to have things like text-notes in each one)
--- End quote ---

My SideNote uses tabbed pane, you can see it on the screenshot below.

This is a demo showing how I can avoid multi-form by using TNotebook:
https://forum.lazarus.freepascal.org/index.php/topic,39769.msg274036.html#msg274036


--- Quote from: pyeri on November 28, 2023, 11:22:57 am ---4) Native connectivity to Sqlite databases for storing details about tasks and milestones.
--- End quote ---

This is my demo showing how to create, read, search, add, delete data in SQLite.
https://forum.lazarus.freepascal.org/index.php/topic,65185.msg496461.html#msg496461

Not only SQLite, with very little code modification you can make it to work with other database.


--- Quote from: pyeri on November 28, 2023, 11:22:57 am ---5) Good networking API, some features will require making HTTP/HTTPS web requests to fetch online information.

--- End quote ---

For network programming in Lazarus, you can use LNet, Indy or Synapse:
https://wiki.lazarus.freepascal.org/lNet
https://wiki.freepascal.org/Indy_with_Lazarus
https://wiki.freepascal.org/Synapse

I recently learned how to write TCP chat program, see the screenshot below. I haven't tried but I'm sure Lazarus has no problem to make HTTP/HTTPS requests. The screenshot shows that I only write one program but can compile to it run on Ubuntu Mate and WinXP.


--- Quote from: pyeri on November 28, 2023, 11:22:57 am ---6) Seamless support for event binding for things like dropdowns, text boxes, check and radio buttons, etc.

--- End quote ---

Lazarus default installation provides these visual components:
TMainMenu, TPopupMenu, TButton, TLabel, TEdit, TMemo, TToggleBox, TCheckBox, TRadioButton, TListBox, TComboBox, TScrollBar, TGroupBox, TRadioGroup, TCheckGroup, TPanel, TFrame, TActionList, TBitBtn, TSpeedButton, TStaticText, TImage, TShape, TBevel, TPaintBox, TNotebook, ...
(and a lot more).

If you're not happy with the standard components, you can install these third party components:
https://wiki.lazarus.freepascal.org/Eye-Candy_Controls
https://wiki.lazarus.freepascal.org/KControls
https://wiki.lazarus.freepascal.org/BGRAControls
...
(and many more)


--- Quote from: pyeri on November 28, 2023, 11:22:57 am ---7) A long text or memo control, preferably with syntax highlighting (I think there is TSynEditor or something but syntax highlighting for coding languages has to be manual, right?)
--- End quote ---

Yes, TSynEdit. Read more:
https://wiki.lazarus.freepascal.org/SynEdit_Highlighter

-----------------------------------------

All your questions already answered. Do you still have any reason for not using Lazarus? If yes, please let us know.

I recommend you to see more demos here:
https://wiki.freepascal.org/Portal:HowTo_Demos

If there is any demo you want to see but can't be found in the link, please let us know.

Navigation

[0] Message Index

Go to full version