28 апреля 2020

Варианты добавления favicon в uniGUI

    Favicon (сокр. от англ. FAVorite ICON – "значок для избранного") – значок веб-сайта или веб-страницы. Отображается браузером во вкладке перед названием страницы, а также в качестве картинки рядом с закладкой, во вкладках и в других элементах интерфейса. © Wikipedia

    В марте 1999 года компания Microsoft выпустила браузер Internet Explorer 5, который первым стал поддерживать "значки для избранного " (иконки сайта). С тех пор эта крошечная картинка есть у каждого сайта. Запустив свое первое веб-приложение, созданное на Delphi с использованием библиотеки uniGUI, я увидел в закладке браузера иконку Delphi.


Обычно для добавления сайту иконки достаточно поместить ее в корневой каталог сайта под названием "favicon.ico ". Но у сайта на UniGUI нет корневого каталога. А положить favicon.ico в каталог с модулем ничего не дает. Исправить эту маленькую неприятность можно различными способами.

    Способ первый – самый очевидный. Так как наше веб-приложение написано на Delphi, то добавим ему иконку, как обычной программе. Заходим в параметры проекта, и выбираем иконку, которую хотим использовать в качестве иконки сайта.


Компилируем проект. Обновляем страницу в браузере и видим, что иконка стала такой, как мы хотели.


    Второй способ – решение от автора uniGUI. В проекте на uniGUI обязательно есть один специализированный data module типа TUniGUIServerModule. Это singleton-объект, реализующий серверные функции веб-приложения. Итак, выбираем в проекте этот модуль, находим в инспекторе объектов свойство "Favicon" и загружаем в него нашу иконку.


Компилируем проект. Обновляем страницу в браузере и видим, что этот способ тоже рабочий.

    Способ третий – дополняющий первые два. А, что делать, если хочется менять иконку сайта без перекомпиляции проекта, т.е. классическим способом "поместить в корневой каталог сайта под именем favicon.ico"? Для этого достаточно написать всего одну строчку кода. Снова открываем наследника TUniGUIServerModule и создаем в нем обработчик события OnBeforeInit.
procedure TServerModule.UniGUIServerModuleBeforeInit(Sender: TObject);
begin
  try
    Favicon.LoadFromFile(sFaviconPath + 'Favicon.ico');
  except
  end;
end;
где sFaviconPath – это путь к файлу с иконкой. Например, он может быть задан в ini-файле или, как сделал я, он может быть эквивалентен каталогу, из которого запускается приложение. Теперь во время запуска веб-приложения иконка будет загружаться из внешнего файла, а при его отсутствии будет использована иконка добавленная одним из первых двух способов. Обращаю внимание, что загружать favicon нужно не из обработчика события OnCreate, а именно из обработчика события OnBeforeInit.

    Как видите, эта простая задача имеет такие же простые решения.

Комментариев нет:

Отправить комментарий