MSEGUI and FPGUI was Re: Debian removes FPC/Lazarus lazarus / 32-Linux ---------------------------------------------------------------------- cdbc · 2026-02-27 12:34 Hi Rob Take a long hard look at fpGUI, it ticks ALL your boxes and is easy to work with, did I mention ZERO dependencies! Regards Benny edit: ...and it looks good too ---------------------------------------------------------------------- zeljko · 2026-02-27 12:44 No, someone must implement fpgui widgetset ---------------------------------------------------------------------- cdbc · 2026-02-27 12:53 Hi Rob Yes and Yes, I only use the shown 'designer' to design the UI, via pointing and clicking and then the rest takes place inside Lazarus, incl. compiling... Note: I also use the 'Pasbuild' tool from Graeme, as it's nifty too, but ALL my coding takes place in Lazarus  Regards Benny edit: zeljko is right, the /LCL/-version of fpGUI, needs some TLC, but I use the pure fpGUI-library, it's easy =^ ---------------------------------------------------------------------- cdbc · 2026-02-27 13:01 Hi Here's a gui demo-app  ...in 1 source-file... Code: Pascal  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i program fpgui_mig_Demo;{$mode objfpc}{$H+}{-$define dbg}                                 /// for public domain \\\uses            /// made for your amusement by Benny Christensen a.k.a. cdbc \\\  classes, sysutils, fpg_cmdlineparams,  fpg_main, fpg_form, fpg_base, fpg_label, fpg_edit, fpg_button, fpg_panel,  fpg_mig_cc, fpg_miglayout, fpg_stylemanager, fpg_style_plastic;  { using the new MIG-layout-manager }type  { TMainForm }  TMainForm = class(TfpgForm)  private    lblNavn:  TfpgLabel;    edtNavn:  TfpgEdit;    btnGem:   TfpgButton;    stbInfo: TfpgPanel;    procedure HandleFormKeyPress(Sender: TObject; var KeyCode: word;                                 var ShiftState: TShiftState; var Consumed: boolean);    procedure SetupLayout;  public    procedure AfterCreate; override;  end;       var cmd: ICmdLineParams = nil; lstyle: string = 'plastic-dark'; procedure TMainForm.AfterCreate;begin  inherited AfterCreate;  Left:= 100; Top:= 100; Width:= 365; Height:= 140;  WindowTitle := 'MigLayout Demo <'+lstyle+'>';  { setup components - note we don't have to set X, Y, Width, Height here! }  lblNavn := TfpgLabel.Create(self);  lblNavn.Text := 'Your Name:';   edtNavn := TfpgEdit.Create(self);  edtNavn.Text := '';   btnGem := TfpgButton.Create(self);  btnGem.Text := 'Save Data';   stbInfo:= TfpgPanel.Create(Self);            { <--- i'm missing a statusbar, }  stbInfo.Alignment:= taLeftJustify;              { so this'll have to do %) }  stbInfo.Style:= bsLowered;                          { baby steps \o/\ö/\o/ }  stbInfo.Height := 25;      { defining a preferred height for StatusBar /gg }  stbInfo.Text:= '[Ctrl + Q] = Quit';   SetupLayout; { employs the MIG-Layout-manager :o) }  OnKeyPress:= @HandleFormKeyPress; { convenience with 'Ctrl+Q' to close/quit }end; procedure TMainForm.HandleFormKeyPress(Sender: TObject; var KeyCode: word;                                       var ShiftState: TShiftState; var Consumed: boolean);var ct: boolean;begin  ct:= ssCtrl in ShiftState;  case KeyCode of    $51: if ct then begin         Consumed:= true; { <- important }           Close; { Ctrl + Q ~ fpg_key_q }         end;  end;end; (* Note from Graeme @ https://for um.lazarus.freepascal.org/index.php/topic,73452.msg576274/topicseen.ht ml#msg576274The .Fill on the LC (layout constraint) will allow all cells to grow and take upall available space. Meaning it will push your StatusBar (panel) all the way down.The .Debug is simply so you can visually see how mig calculated the cell sizesand component sizes. *) procedure TMainForm.SetupLayout;var layout: TfpgMigLayoutManager;begin  { initialize MigLayout }  layout := TfpgMigLayoutManager.Create;  { Graeme: LC.Fill is key, note: '.Debug' facilitates grid-lines when designing }  layout.LC.Fill{$ifdef dbg}.Debug{$endif};   layout.AddLayoutComponent(lblNavn, TfpgMigCC.Create);    { simplified by /gg }    { growx = stretch horz }  layout.AddLayoutComponent(edtNavn, TfpgMigCC.Create.GrowX); { simplified by /gg }   layout.AddLayoutComponent(btnGem, TfpgMigCC.Create);     { simplified by /gg }   layout.AddLayoutComponent(stbInfo, TfpgMigCC.Create.DockSouth); { simplified by /gg }  { activate our layout }  LayoutManager:= layout;end; begin  fpgApplication.Initialize;  if fpgApplication.GetInterface(ICmdLineParams,cmd) then begin { nifty little com-obj }    { i don't like spaces in cmdline params, so i alias it ;) }    fpgStyleManager.RegisterClass(lstyle,TfpgPlasticDarkStyle);    { if the user provided a style-choice, we'll roll with that }    if cmd.HasOption('style') then lstyle:= cmd.GetOptionValue('style');    fpgStyleManager.SetStyle(lstyle); { or we'll just use some plastic :o) }  end;   with TMainForm.Create(nil) do try    Show;    fpgApplication.Run;  finally Free; end;end. To compile it you'll need fpgui-framework >= 2.0.3 + fpc >= 3.2.2 Regards Benny ---------------------------------------------------------------------- Fred vS · 2026-02-27 13:11 Hello Rob. Hmm, if I may, MSEgui projects can also be used with the Lazarus IDE. ---------------------------------------------------------------------- Fred vS · 2026-02-27 13:22 Re-hello Rob. If the goal is to have a program that uses "pure Wayland", neither fpGUi nor MSEgui have this option (maybe never did given the lack of enthusiasm from the developers). However, both work perfectly with XWayland. ---------------------------------------------------------------------- Fred vS · 2026-02-27 13:29 Quote from: robert rozee on February 27, 2026, 02:20:55 pmQuote from: Fred vS on February 27, 2026, 02:11:24 pm[...] MSEgui projects can also be used with the Lazarus IDE. hi Fred   :-) i have EXISTING lazarus projects, created using the lazarus IDE. can MSEgui build these lazarus projects into ELF binaries with just minimal changes to my source code? cheers, rob   :-) Hmm, it all depends on what you mean by "minimal changes." You can use all the method code, but for graphical widgets, you'll need to perform the conversion using the MSEide or ideU form designer. The same applies to fpGUI and its UIdesigner. ---------------------------------------------------------------------- cdbc · 2026-02-27 13:38 Hi Rob The amount of changes, depend on how /well/ your app-layout is, i.e.: "Separation of Concerns" -> GUI-layer separated from Controlling/Presenting-layer and Business-Model-layer... Meaning: it's just the gui/form code that I swap in/out, the presenter and model are the same as in a Qt4/5/6-gui (or Gtk2/3/4/n). If your business logic is entangled in the gui, there will be some work to do... Regards Benny ---------------------------------------------------------------------- Fred vS · 2026-02-27 13:53 Re-re hello Rob. Could you please provide a list of the LCL widgets you use in your projects? A screenshot of the result would also be helpful. I would love to assist you with the conversion. ---------------------------------------------------------------------- Zoran · 2026-02-28 17:22 No, your project cannot be easily ported to fpGUI or MseGui. That's it. ---------------------------------------------------------------------- PascalDragon · 2026-02-28 17:40 Quote from: zeljko on February 27, 2026, 01:44:33 pmNo, someone must implement fpgui widgetset Well, there exists a fpGUI widgetset for the LCL, however it might need some love to work properly... ---------------------------------------------------------------------- Fred vS · 2026-02-28 17:40 Quote from: Zoran on February 28, 2026, 06:22:45 pmNo, your project cannot be easily ported to fpGUI or MseGui. That's it. Indeed, the first porting can be difficult, especially understanding the different mechanisms of fpGUI or MSEgui. But once you succeed, it's like learning to ride a bicycle—you never forget. And every new porting is a fun game. ---------------------------------------------------------------------- inky · 2026-03-01 13:44 readme in lcl/interfaces/fpgui describes how to use it with lazarus: copy its src directory to this lcl/interfaces/fpgui then in Project Options -> Compiler Options -> Additions and Overrides, choose LCLWidgetType: fpgui, and fpGUIPlatform: x11. right now that lcl code is abandoned and doesn't work: https://github.com/graemeg/fpGUI/issues/142 sorry pasting from the other thread to this one. ---------------------------------------------------------------------- PascalDragon · 2026-03-02 20:50 Quote from: inky on March 01, 2026, 02:44:24 pmright now that lcl code is abandoned and doesn't work: https://github.com/graemeg/fpGUI/issues/142 Issues with the lcl-fpgui widgetsets should be reported on the Lazarus bugtracker, not the fpGUI one (unless it really is an fpGUI issue). ---------------------------------------------------------------------- Graeme · 2026-03-03 19:25 I've been in recent communications with someone that is interested in continuing development of lcl-fpgui widgetset, and they want to bring it up to date with fpGUI 2.x release. So *fingers-crossed* :-)