fpGUI

fpGUI
Скриншот программы fpGUI
Тип Библиотека элементов интерфейса (виджетов)
Разработчики Себастьян Гюнтер, Граеме Гелденхуис
Написана на Object Pascal
Операционные системы Unix, Linux, BSD (X11), Windows
Последняя версия 1.4.1 (02 сентября 2015 года)
Репозиторий git.code.sf.net/p/fpgui/…
github.com/graemeg/fpGUI
Лицензия модифицированная GNU LGPL
Сайт fpgui.sourceforge.net

fpGUI (сокр. от англ. Free Pascal GUI) — кроссплатформенный набор элементов управления графического интерфейса пользователя, разработанный Граеме Гелденхуисом. fpGUI является свободным программным обеспечением, выпущенным под модифицированной лицензией LGPL. fpGUI создан при помощи компилятора Free Pascal и написан на языке Object Pascal.

fpGUI состоит только из графических виджетов или компонентов и кроссплатформенной библиотеки двумерной отрисовки. В нём не реализованы уровни баз данных, трёхмерная графика, парсеры XML и т. д. Он так же не зависит от сторонних больших библиотек типа GTK или Qt. Все дополнительные возможности напрямую реализуют то, что доступно в библиотеке компонентов Free Pascal Component Library (FCL), которая является стандартной для компилятора Free Pascal.

Первая версия fpGUI была написана Себастьяном Гюнтером в 2000 году, но к 2002 году проект забросили. fpGUI был преемником более ранней объектно-ориентированной обёртки для GTK, fpGTK, и был начат почти с нуля чтобы позволить множество наборов виджетов, наиболее известный win32. Набор элементов управления использовался для внутренних нужд, но было ещё много нерешённых проблем до того как тулкит смог бы быть полезным и использоваться в реальной жизни для разработки приложений конечными пользователями.

Пример использования

[править | править код]

Приведённая ниже программа отображает одно окно с кнопкой «Quit» в правом нижнем углу. В окне изображены все стандартные встроенные рисунки, используемые в fpGUI.

program stdimglist;  {$mode objfpc}{$H+}  uses   Classes, SysUtils,   fpg_base, fpg_main, fpg_form, fpg_imgfmt_bmp, fpg_button;  type    TMainForm = class(TfpgForm)   private     btnClose: TfpgButton;     procedure   btnCloseClick(Sender: TObject);   protected     procedure   HandlePaint; override;   public     constructor Create(aowner: TComponent); override;     procedure   AfterCreate; override;   end;  { TMainForm }  procedure TMainForm.AfterCreate; begin   SetPosition(100,100,700,500);   WindowTitle := 'fpGUI Standard Image Listing'; end;  procedure TMainForm.btnCloseClick(Sender: TObject); begin   Close; end;  procedure TMainForm.HandlePaint; var   n: integer;   x: TfpgCoord;   y: TfpgCoord;   sl: TStringList;   img: TfpgImage; begin   Canvas.BeginDraw; // begin double buffering   inherited HandlePaint;    sl  := TStringList.Create;   x   := 8;   y   := 8;   fpgImages.ListImages(sl);      for n := 0 to sl.Count-1 do   begin     Canvas.DrawString(x, y, sl[n]+':');          img := TfpgImage(sl.Objects[n]);     if img <> nil then       Canvas.DrawImage(x+130, y, img);      inc(y, img.Height+8);     if y > Height-32 then // largest images are 32 in height     begin       inc(x, 200);       y := 8;     end;   end;    Canvas.EndDraw;   sl.Free; end;  constructor TMainForm.Create(aowner: TComponent); begin   inherited Create(aowner);   // Place button in bottom right corner.   btnClose := CreateButton(self, Width-90, Height-35, 75, 'Quit', @btnCloseClick);   btnClose.ImageName := 'stdimg.quit';   btnClose.Anchors := [anRight, anBottom]; end;  procedure MainProc; var   frm : TMainForm; begin   fpgApplication.Initialize;   frm := TMainForm.Create(nil);   try     frm.Show;     fpgApplication.Run;   finally     frm.Free;   end; end;  begin   MainProc; end. 

Результат работы вышеприведённой программы в Linux.