Delphi. UniGUI. Prompt

В Delphi есть инструкция InputBox, в UniGUI это Prompt, смысл тот же.

Есть разные вариации этой команды, как видно из картинок. А вот как это обрабатывается в коде.

procedure TMainForm.UniButton1Click(Sender: TObject);
begin
  Prompt('Please enter a text', '', mtInformation, mbOKCancel, PromptCallBack);
end;

procedure TMainForm.UniButton2Click(Sender: TObject);
begin
  Prompt('Please enter a text', '', mtInformation, mbOKCancel, PromptCallBack, True);
end;

procedure TMainForm.UniButton3Click(Sender: TObject);
begin
  Prompt('@*Please enter password', '', mtInformation, mbOKCancel, PromptCallBack, False);
end;

procedure TMainForm.UniButton4Click(Sender: TObject);
begin
  Prompt('@@Please enter a text', '', mtInformation, mbOKCancel, PromptCallBackDelay, False);
end;

procedure TMainForm.PromptCallBack(Sender: TComponent; AResult:Integer; AText: string);
begin
  if AResult = mrOK then
  begin
    UniMemo1.Lines.Add(AText);
  end;
end;

procedure TMainForm.PromptCallBackDelay(Sender: TComponent; AResult:Integer; AText: string);
begin
  if AResult = mrOK then
  begin
    Sleep(3000);
    UniMemo1.Lines.Add(AText);
  end;
end;
Posted in Без рубрики | Leave a comment

Delphi. UniGUI. DBGrid. Сортировка

Рассмотрим сортировку на клиенте, на примере своего проекта

Для этого, нужно у каждой колонки грида включить параметр Sortable в True

А также обработать следующее событие грида (на примере FireDAC)

begin
  if Direction then
    qUsers.IndexFieldNames := Column.FieldName
  else
    qUsers.IndexFieldNames := Column.FieldName + ':D';
end;

У меня FireDAC, и поэтому все работает довольно просто )))

Posted in Без рубрики | Leave a comment

Delphi. UniGUI. TreeGrid

Фрэймворк UniGUI не перестает меня радовать. В данном примере посмотрим иерархический грид. Выглядит он так

Иерархичность можно задавать 2 способами, через ключевые поля

TreeKeyFields: Country; State

Либо традиционным способом,

<p>IdField: Id

<p>IdParentField - >ParentId

Довольно удобно, на мой взгляд!

Posted in Без рубрики | Leave a comment

Delphi. UniGUI. ActionColumn

Колонка действий помогает вынести действия со строкой грида, прямо в сам грид, выглядит это так

Как ее настроить?

Continue reading
Posted in Без рубрики | Leave a comment

Delphi. UniGUI. FieldSet

Обнаружил компонент FieldSet, выглядит он так

Это некоторая группировка для полей. Выглядит довольно симпатично. Можно также использовать свойство Collapsible. Видно, что оно применено для правого Fieldset и мы можем сворачивать, разворачивать этот компонент. Компоненты размещены на TUniContainerPanel

Posted in Без рубрики | Leave a comment

Delphi. UniGUI. Шаблон сайта – визитки

Открывая примеры UniGUI, можно подумать, что фрэймворк заточен под веб-приложения (rich internet applications). Очень много логики, очень много компонентов, и это хорошо для сложных проектов. Но что делать, если нужно просто создать страницу? Сайт-визитку? В этом случае поможет данный подход. В данном посте, я просто обрисую идею, что нужно сделать, чтобы получилась красивая интернет страница. Вот, что у нас получится.

Обратите внимание, сверху у нас будет панелька для меню, входа, регистраций.

Под этой панелькой, в центральном поле у нас скролл-бокс, с панелькой, высота, которой превышает высоту скроллбокса.

И вот на этой панельке, мы можем размещать все, что угодно – слайдеры, группы картинок, html – фрэймы, и так далее.

Само программирование будет выглядеть как традиционное программирование в Delphi. То есть, добавили, например слайдер, сделали ему выравнивание alTop, под слайдер добавили что-то ещё, ну и так далее.

Таким образом, можно создавать красивые интернет страницы. И да! Они будут адаптивными.

Вот структура проекта

Posted in Без рубрики | Leave a comment

Delphi. UniTreeMenu на примере TabletApplication

В составе примеров UniGUI есть пример, который мне понравился, это TabletApplication, выглядит это таким образом

Слева у нас UniTreeMenu. Справа UniPageControl, при нажатии на пункт меню, добавляются вкладки. Причем они Closable.

Continue reading
Posted in Без рубрики | Leave a comment

Delphi. UniGUI. UniNativeImageList

Обнаружил интересный компонент UniNativeImageList. Он умеет работать как обычный ImageList, а также обладает суперспособностью подгружать иконки с сайтов

https://fontawesome.com

Библиотека иконок Sencha Pictos

Вот ещё один момент, который важен, цитата с форума UniGUI

NativeImageList keeps images in their native format without any conversion. It allows to keep PNG images with alpha transparency intact. Standard ImageList can not store PNG with alpha channel.

Вот как выглядит настройка компонента

Continue reading
Posted in Без рубрики | Leave a comment

DesignPatterns. Builder

Паттерн строитель

Когда необходимо создать объект (TProduct) из разных блоков. Разные строители (TConcreteBuilder) могут использовать разные технологии.

Main

program Builder;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils,
  uBuilder in 'uBuilder.pas';

var
  b: TBuilder;
  d: TDirector;
  p: TProduct;

begin
  try
    b := TConcreteBuilder.Create();
    d := TDirector.Create(b);
    try
      p := d.Construct();
      Writeln('done');
      Readln;
    finally
      b.Free();
      d.Free();
      p.Free();
    end;

  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.
Continue reading
Posted in Без рубрики | 2 Comments

Delphi. Простой пример функции компаратора для списка

Допустим у нас есть список

  FItems: TObjectList;

Тогда мы можем сделать так

procedure SortByParamName;

  function CompareItemsByParamName(aItemOne, aItemTwo: Pointer): integer;
  begin
    Result := CompareStr(TCurrentValue(aItemOne).paramValueKind.ParamName, TCurrentValue(aItemTwo).paramValueKind.ParamName);
  end;

begin
  FItems.Sort(@CompareItemsByParamName);
end;
Posted in Без рубрики | Leave a comment