FreeBasic
Главная
Вход
Регистрация
Среда, 24.04.2024, 09:30Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Библиотеки для FreeBasic » Библиотека Window9 для Freebasic » Может ли библиотека управлять прогрессом на панели задач?
Может ли библиотека управлять прогрессом на панели задач?
VitaminДата: Вторник, 01.06.2021, 12:00 | Сообщение # 1
Лейтенант
Группа: Пользователи
Сообщений: 55
Репутация: 4
Статус: Offline
Есть ли в библиотеке функции для управления прогрессом на панели задач Windows?

Добавлено (01.06.2021, 13:09)
---------------------------------------------
Сам спросил, сам отвечаю - есть такие функции, только в справке по библиотеке об этом ничего нет. 
Вот оригинальный код решения этого вопроса: ProgressBar на окне TaskBar
Правда на Windows XP вылетает ошибка, что не есть хорошо, поэтому подредактировал код:


Код
#Include "window9.bi"

Dim As Integer ev, pct
Dim As HWND hwnd
Dim As RECT rec
Dim As ITaskbarList3 Ptr tl3

hwnd = OpenWindow("", 0, 0, 300, 80)

ProgressBarGadget(1, 10,10, 260, 20, 0, 100) ' полоска прогресса в окне

CoInitialize(Null) ' подключение COM объекта
CoCreateInstance(@CLSID_TaskBarList,Null,CLSCTX_INPROC_SERVER,@IID_ITaskBarList3,@tl3) 

If tl3 Then ' если элемент поддерживается в текущей Windows
   tl3->lpVtbl->HrInit(tl3)
   tl3->lpVtbl->SetProgressValue(tl3,hwnd,0,100) ' начальная установка прогресса
   tl3->lpVtbl->SetProgressState(tl3,hwnd,TBPF_NORMAL) ' нормальный режим (зелёный)
EndIf ' TBPF_PAUSED - режим паузы (желтый); TBPF_ERROR - режим ошибки (красный)

GetClientRect(hwnd, @rec) ' получам координаты окна
rec.right /= 2 : rec.bottom /= 2
If tl3 Then tl3->lpVtbl->SetThumbnailClip(tl3,hwnd, @rec)

Do
  ev = WindowEvent()
  If ev = 0 Then
    If pct = 101 Then
      FreeGadget(1)
      SetWindowText(hwnd, "Ошибка")
      If tl3 Then tl3->lpVtbl->SetProgressState(tl3,hwnd,TBPF_ERROR)
    Else
      SetWindowText(hwnd, Str(pct))
      SetGadgetState(1, pct)
      If tl3 Then tl3->lpVtbl->SetProgressValue(tl3,hwnd,pct,100)
      pct += 1
    Endif
    Sleep 20
  Endif
  Sleep(1)
Loop Until ev = EventClose

If tl3 Then
  tl3->lpVtbl->Release(tl3)
  CoUninitialize() ' отключение COM объекта
EndIf
 
Форум » Библиотеки для FreeBasic » Библиотека Window9 для Freebasic » Может ли библиотека управлять прогрессом на панели задач?
  • Страница 1 из 1
  • 1
Поиск: