Как использовать встроенные в Windows иконки в своём приложении
Сперва необходимо узнать, константы, которые соответствуют определённым иконкам.
Все они определены в API unit (windows.pas) в Delphi:
IDI_HAND
IDI_EXCLAMATION
IDI_QUESTION
Следующий пример рисует иконку вопроса на панели:
var
DC: HDC;
Icon: HICON;
begin
DC := GetWindowDC(Panel1.Handle);
Icon := LoadIcon(0, IDI_QUESTION);
DrawIcon(DC, 5, 5, Icon);
ReleaseDC(Panel1.Handle, DC);
end;
Here is the translation of the content into Russian:
Задача заключается в использовании встроенных иконок Windows в вашем приложении на Delphi!
Вы на правильном пути, относясь к единице windows.pas и используя константы, такие как IDI_QUESTION. Вот разбивка того, что вы сделали до сих пор:
Вы импортировали необходимую единицу (windows.pas), которая содержит определения для различных идентификаторов иконок.
Вы использовали эти ID для загрузки иконки с помощью функции LoadIcon, указав handle модуля (0) и ID иконки (IDI_QUESTION).
Вы нарисовали загруженную иконку на панели с помощью функции DrawIcon, указав устройство контекста (DC), координаты x (5), координаты y (5) и иконку сама (Icon).
Теперь давайте улучшим пример:
Предложенные улучшения:
Обработка ошибок: Добавьте обработку ошибок, чтобы убедиться, что функции LoadIcon и DrawIcon возвращают успешные значения перед продолжением.
Выравнивание иконки: Вместо того, чтобы жестко кодировать координаты x и y (5), рассмотрите более гибкий подход, например, рассчитывая позицию иконки на основе ее размера или выравнивайте ее с краями панели.
Handle панели: Вы передали Panel1.Handle в функцию GetWindowDC, но вам нужно освободить это handle, когда вы будете использовать его, чтобы избежать утечек памяти.
Вот обновленная версия вашего кода:
var
DC: HDC;
Icon: HICON;
begin
DC := GetWindowDC(Panel1.Handle);
try
Icon := LoadIcon(0, IDI_QUESTION);
if Icon = 0 then
raise Exception.Create('Failed to load icon');
DrawIcon(DC, // x-координата
Panel1.ClientWidth div 2, // центрируйте иконку горизонтально
5, // y-координата (ปรгрузите как нужно)
Icon);
finally
ReleaseDC(Panel1.Handle, DC);
end;
end;
Следуя этим предложениям, вы создадите более robust и maintainable код-сниппет, который эффективно использует встроенные иконки Windows в вашем приложении на Delphi.
С помощью API единицы (windows.pas) в Delphi можно использовать встроенные иконки Windows, например, IDI_HAND, IDI_EXCLAMATION, IDI_QUESTION, рисуя их на панелях с помощью функций LoadIcon и DrawIcon.
Комментарии и вопросы
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.