сквозь Lazarus :)

Jul 06, 2015 11:29

Как всегда - захотелось "бантиков" :)
В Win7 есть прогрессбар на кнопках taskbar'а, почему бы не испробовать.

Добавляю в OnCreate формы:
CoInitializeEx(nil, COINIT_APARTMENTTHREADED );
hr := CoCreateInstance( CLSID_TaskbarList, nil, CLSCTX_INPROC_SERVER, ITaskbarList3, iTaskBarlist);
if Succeeded( hr ) then iTaskBarlist.HrInit;

В OnStartTimer:
ProgressBar1.Position := 0;

В OnTimer:
ProgressBar1.Position := ProgressBar1.Position + 1;
iTaskBarlist.SetProgressValue( Application.MainForm.Handle, ProgressBar1.Position, ProgressBar1.Max );

В OnStopTimer:
iTaskBarlist.SetProgressState( Application.MainForm.Handle, TBPF_NOPROGRESS );

Запускаю - хрен - никакого прогресса на кнопке :(

Наконец, практически случайно нахожу, в проекте после
Application.Initialize;
нужно вставить
Application.MainFormOnTaskBar := true;

И все заработало!
Правда получил варнинг:
test.lpr(19,15) Warning: Symbol "MainFormOnTaskBar" is not portable

То есть - только Винда.

UPD. Только написал, как сразу нашел вот это (для Делфи):
The MainFormOnTaskBar property controls how Windows taskbar buttons are handled by VCL.
If the property is true, a taskbar button represents the application's main form and displays its caption. If false, a taskbar button represents the application's (hidden) main window and bears the application's Title.
MainFormOnTaskBar must be true to use Windows Vista Aero effects. These include live taskbar thumbnails, Dynamic Windows, Windows Flip, and Windows Flip 3D.

UPD2. Можно избежать использования MainFormOnTaskBar.
в OnCreate формы определяем handle приложения:
appHandle := WidgetSet.AppHandle;
и везде вместо Application.MainForm.Handle используем appHandle

lazarus

Previous post Next post
Up