Отображение прогресса в панели задач Windows 7 +

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Отображение прогресса в панели задач Windows 7 +

Сообщение BadBoyAlex » 15.08.2014 12:36:16

Здравствуйте, уважаемые форумчане!
Необходимо, чтобы процесс выполнения задачи отображался как в прогрессбаре, так и на панели задач Windows 7/8/8.1. Накопал пример, но он не работает. Как исправить?
Аватара пользователя
BadBoyAlex
постоялец
 
Сообщения: 119
Зарегистрирован: 08.06.2010 12:42:23
Откуда: Россия, Белгород

Re: Отображение прогресса в панели задач Windows 7 +

Сообщение Stertor » 25.08.2014 18:07:37

Будет весьма затруднительно, там используется ITaskBarList3 (Delphi XE и старше). Переписывать этот класс под лазарус-лажа.
Аватара пользователя
Stertor
новенький
 
Сообщения: 20
Зарегистрирован: 10.08.2014 18:11:12

Re: Отображение прогресса в панели задач Windows 7 +

Сообщение Alexx2000 » 26.08.2014 08:00:55

Давно все переписано. Модуль, пример компонента.
Аватара пользователя
Alexx2000
постоялец
 
Сообщения: 487
Зарегистрирован: 25.10.2006 00:22:07
Откуда: Мытищи

Re: Отображение прогресса в панели задач Windows 7 +

Сообщение Keeper-Volok » 23.05.2017 17:52:27

Подниму старую тему, т.к. сам задался подобной проблемой, и нашёл решение в английском форуме совсем в другой теме.
Там решалась неправильная работа кнопки в таскбаре на мультимониторной системе.

Решение заключается в правильном хендле.
В 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;


Lazarus.png


Либо, как в вышеупомянутом компоненте KASToolBar из исходников DoubleCommander'а, вместо Application.Handle необходимо использовать WidgetSet.AppHandle (требует uses InterfaceBase).

Но если код компонента просто брать, и адаптировать под себя - то тоже не всё будет хорошо.
В его реализации проверяется родительская форма, и работать будет при выборе WidgetSet.AppHandle.
При выборе хендла главной формы в качестве родительской для работы также потребуется Application.MainFormOnTaskBar.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Keeper-Volok
незнакомец
 
Сообщения: 4
Зарегистрирован: 20.10.2016 00:07:49


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Lucifer, Yandex [Bot] и гости: 6

Рейтинг@Mail.ru