Здравствуйте, уважаемые форумчане!
Необходимо, чтобы процесс выполнения задачи отображался как в прогрессбаре, так и на панели задач Windows 7/8/8.1. Накопал пример, но он не работает. Как исправить?
Отображение прогресса в панели задач Windows 7 +
Модератор: Модераторы
- BadBoyAlex
- постоялец
- Сообщения: 119
- Зарегистрирован: 08.06.2010 12:42:23
- Откуда: Россия, Белгород
- Контактная информация:
Будет весьма затруднительно, там используется ITaskBarList3 (Delphi XE и старше). Переписывать этот класс под лазарус-лажа.
- Alexx2000
- постоялец
- Сообщения: 490
- Зарегистрирован: 25.10.2006 00:22:07
- Откуда: Мытищи
- Контактная информация:
Давно все переписано. Модуль, пример компонента.
-
Keeper-Volok
- незнакомец
- Сообщения: 4
- Зарегистрирован: 19.10.2016 23:07:49
Подниму старую тему, т.к. сам задался подобной проблемой, и нашёл решение в английском форуме совсем в другой теме.
Там решалась неправильная работа кнопки в таскбаре на мультимониторной системе.
Решение заключается в правильном хендле.
В Lazarus'е нет Application.Handle, отсюда и начинаются проблемы.
Если с COM-интерфейсом ITaskbarList3 использовать Form.Handle, то перед Application.Run в коде проекта надо сделать Application.MainFormOnTaskBar := True;
Это, собственно, и требовалось для работы примера из блога в первом посте.
Надо только добавить в uses ShlObj и ComObj, и объявить недостающий GUID, которого нет в ShlObj.pas
После чего непосредственно применить Application.MainFormOnTaskBar в коде проекта
Либо, как в вышеупомянутом компоненте KASToolBar из исходников DoubleCommander'а, вместо Application.Handle необходимо использовать WidgetSet.AppHandle (требует uses InterfaceBase).
Но если код компонента просто брать, и адаптировать под себя - то тоже не всё будет хорошо.
В его реализации проверяется родительская форма, и работать будет при выборе WidgetSet.AppHandle.
При выборе хендла главной формы в качестве родительской для работы также потребуется Application.MainFormOnTaskBar.
Там решалась неправильная работа кнопки в таскбаре на мультимониторной системе.
Решение заключается в правильном хендле.
В Lazarus'е нет Application.Handle, отсюда и начинаются проблемы.
Если с COM-интерфейсом ITaskbarList3 использовать Form.Handle, то перед Application.Run в коде проекта надо сделать Application.MainFormOnTaskBar := True;
Это, собственно, и требовалось для работы примера из блога в первом посте.
Надо только добавить в uses ShlObj и ComObj, и объявить недостающий GUID, которого нет в ShlObj.pas
Код: Выделить всё
const
IID_ITaskbarList3: TGUID = '{ea1afb91-9e28-4b86-90e9-9e9f8a5eefaf}';После чего непосредственно применить Application.MainFormOnTaskBar в коде проекта
Код: Выделить всё
Application.CreateForm(TForm1, Form1);
{$IFDEF WINDOWS}{$Warnings OFF}Application.MainFormOnTaskBar := True;{$Warnings ON}{$ENDIF}
Application.Run;Либо, как в вышеупомянутом компоненте KASToolBar из исходников DoubleCommander'а, вместо Application.Handle необходимо использовать WidgetSet.AppHandle (требует uses InterfaceBase).
Но если код компонента просто брать, и адаптировать под себя - то тоже не всё будет хорошо.
В его реализации проверяется родительская форма, и работать будет при выборе WidgetSet.AppHandle.
При выборе хендла главной формы в качестве родительской для работы также потребуется Application.MainFormOnTaskBar.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
