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

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 состоит только из графических виджетов или компонентов и кроссплатформенной библиотеки двумерной отрисовки. В нём не реализованы уровни баз данных, трёхмерная графика, парсеры 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.

Ссылки

править