Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Избавление от значка в панели задач Windows после закрытия динамической формы FMX: пошаговое руководство

Delphi , Файловая система , DLL и PlugIns

Прежде чем приступить к решению проблемы, стоит отметить, что в вопросе описывается ситуация, когда создается модальное окно FireMonkey (FMX) внутри динамически загружаемой библиотеки (DLL), и после закрытия этого окна значок программы остается в панели задач Windows. Это нежелательное поведение, которое необходимо исправить.

Шаги для решения проблемы:

Шаг 1: Изменение процедуры ShowMainForm

В функции ShowMainForm необходимо убрать вызов Application.Terminate, так как это приводит к неожиданному завершению работы приложения, включая его сообщение-цикл. Вместо этого, после закрытия формы, необходимо просто освободить ресурсы, связанные с формой.

Шаг 2: Обработка сообщений окна приложения

Для корректной работы с окнами в FMX необходимо зарегистрировать обработчик сообщений окна, используя функцию RegisterApplicationHWNDProc из модуля FMX.Platform.Win. Это позволит системе корректно обрабатывать создание и уничтожение окон.

uses
  FMX.Platform.Win;

var
  _AppHandle: HWND;

function GetAppHandle: HWND;
begin
  Result := _AppHandle;
end;

function InitializeDLL(AppHandle: HWND): HRESULT; stdcall;
begin
  try
    if AppHandle = 0 then Exit(E_HANDLE);
    if _AppHandle <> 0 then Exit(E_FAIL);
    InitGDIP;
    _AppHandle := AppHandle;
    RegisterApplicationHWNDProc(GetAppHandle);
    Result := S_OK;
  except
    Result := E_UNEXPECTED;
  end;
end;

procedure FinalizeDLL; stdcall;
begin
  FreeGDIP;
  // Дополнительно можно освободить другие ресурсы
end;

Шаг 3: Вызов FinalizeForms

Перед освобождением GDI+ можно вызвать FinalizeForms, чтобы освободить другие ресурсы, используемые FMX, например, менеджер стилей, фильтров и т.д. Однако, следует быть осторожным, чтобы не вызвать эту функцию дважды, что может привести к ошибкам доступа.

Шаг 4: Удаление DLL при закрытии хост-приложения

В функции FormDestroy хост-приложения необходимо не только освободить библиотеку, но и убедиться, что все ресурсы, созданные в DLL, корректно освобождены.

procedure TFormHost.FormDestroy(Sender: TObject);
begin
  if FLibHandle <> 0 then begin
    FinalizeDLL; // Предполагается, что функция FinalizeDLL существует
    FreeLibrary(FLibHandle);
    FLibHandle := 0;
  end;
end;

Шаг 5: Тестирование изменений

После внесения изменений, необходимо тщательно протестировать приложение, чтобы убедиться, что значок в панели задач исчезает после закрытия формы и что приложение не приводит к сбоям при закрытии.

Заключение

Следуя этим шагам, вы должны устранить проблему с оставшимся значком в панели задач после закрытия динамической формы FMX. Важно помнить о корректном освобождении ресурсов и правильной обработке сообщений окон.

Создано по материалам из источника по ссылке.

При работе с модальным окном FireMonkey в динамически загружаемой библиотеке после его закрытия значок программы остается в панели задач Windows, что требует исправления.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: DLL и PlugIns ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-05 10:45:42/0.0034639835357666/0