Как сделать анимированную картинку в статус-баре?

Раздел посвящен программированию с использованием Power Basic.
jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Как сделать анимированную картинку в статус-баре?

Сообщение jangle » 01.02.2007 (Чт) 11:54

Нашел только пример прогрессбара в статус баре, а как сделать анимированную картинку? Например отображающую процесс подключения к серверу

Dark Machine
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 126
Зарегистрирован: 26.05.2004 (Ср) 13:12

Сообщение Dark Machine » 01.02.2007 (Чт) 15:16

Кусочек из собственного проекта.
Здесь по таймеру меняется иконка. Все иконки в ресурсе
CB_Tray() - каллбэк ф-ция обработки трей диалога
DIALOG SHOW MODELESS hTrayDlg CALL CB_Tray

Код: Выделить всё

CALLBACK FUNCTION CB_Tray()
    '
    STATIC active%
    STATIC ti     AS NOTIFYICONDATA
    STATIC p     AS POINTAPI
    STATIC lOK  AS LONG

    SELECT CASE CBMSG

    ' Создали диалог и показали, что программа готова
    CASE %WM_INITDIALOG
        lOk = 1
        GOSUB RecallReader
        Shell_NotifyIcon %NIM_ADD, ti
        SetTimer hTrayDlg, %TIMER_1, lPollMsec, BYVAL %NULL

    ' Здесь меняется иконка по таймеру
    CASE %WM_TIMER
        GOSUB RecallReader

    ' Завершение программы
    CASE %WM_DESTROY
        Shell_NotifyIcon %NIM_DELETE, ti

    ' А здесь иконка меняется извне - напр. из другой процедуры
    ' используя вот эту команду
    ' DIALOG POST hTrayDlg,  %WM_USER+%DLG_TYPE_01, %SHOW_WARN, 0

   CASE %WM_USER + %DLG_TYPE_01
       IF CBLPARAM = %SHOW_WARN THEN
           ' меняем иконку и тултип
           ti.hIcon    = LoadIcon(hInst,BYVAL MAKLNG(%IDR_WARN,0))
           ti.szTip     = "  WARNING! "
           Shell_NotifyIcon %NIM_MODIFY, ti
       END IF
                 
..
..
..

RecallReader:

       IF AlreadyCalled = %TRUE THEN RETURN

       CALL LoadIni
       CALL CheckInternet

       ti.cbSize = SIZEOF(ti)
       ti.hWnd   = hTrayDlg
       ti.uID      = hInst
       ti.uFlags  = %NIF_ICON OR %NIF_MESSAGE OR %NIF_TIP
       ti.uCallbackMessage = %WM_TRAY
       ti.szTip    = "  Connecting ..."
       ' IMG_NUM - номер иконки в ресурсе
       ti.hIcon    = LoadIcon(hInst,BYVAL MAKLNG( IMG_NUM ,0))

       Shell_NotifyIcon %NIM_MODIFY, ti
..
..

PBDN
Обычный пользователь
Обычный пользователь
 
Сообщения: 59
Зарегистрирован: 21.10.2006 (Сб) 22:10

Re: Как сделать анимированную картинку в статус-баре?

Сообщение PBDN » 02.02.2007 (Пт) 9:07

jangle писал(а):Нашел только пример прогрессбара в статус баре, а как сделать анимированную картинку? Например отображающую процесс подключения к серверу


Я просто анимашку скрываю или открываю в таких случаях

Код: Выделить всё
#COMPILE EXE
#DIM ALL

%USEMACROS = 1
'~~~~~~~~~~~~~~~~~~~~~~~
#RESOURCE "anim.pbr"
'anim.rc содержит
'=========
'103  AVI    DISCARDABLE "Findfile.avi"  //<- поменять на свой фильмец
'~~~~~~~~~~~~~~~~~~~~~~~~
#INCLUDE "WIN32API.INC"
#INCLUDE "COMMCTRL.INC"

%IDC_BTN_SHOWANIMATION = 1001
%IDC_SYSANIMATE32_1    = 1002

CALLBACK FUNCTION cbProc()
  STATIC trigger AS LONG
    SELECT CASE AS LONG CBMSG
      CASE %WM_INITDIALOG
        CONTROL SHOW STATE CBHNDL, %IDC_SYSANIMATE32_1 , %SW_hide
      CASE %WM_COMMAND
        SELECT CASE AS LONG CBCTL
          CASE %IDC_BTN_SHOWANIMATION
            IF CBCTLMSG = %BN_CLICKED OR CBCTLMSG = 1 THEN
               SELECT CASE AS LONG trigger
                 CASE 0
                   CONTROL SHOW STATE CBHNDL, %IDC_SYSANIMATE32_1 , %SW_SHOW
                   CONTROL SET TEXT CBHNDL,%IDC_BTN_SHOWANIMATION, "StopAnimation"
                 CASE 1
                   CONTROL SHOW STATE CBHNDL, %IDC_SYSANIMATE32_1 , %SW_hide
                   CONTROL SET TEXT CBHNDL,%IDC_BTN_SHOWANIMATION, "StartAnimation"
               END SELECT
               trigger=trigger XOR 1
            END IF
        END SELECT
    END SELECT
END FUNCTION

FUNCTION PBMAIN()
    LOCAL hDlg  AS DWORD

    InitCommonControls
   
    DIALOG NEW  %HWND_DESKTOP, "Example", 70, 70, 201, 121, %WS_POPUP OR %WS_BORDER OR %WS_DLGFRAME OR %WS_CAPTION OR %WS_SYSMENU _
        OR %WS_MINIMIZEBOX OR %WS_CLIPSIBLINGS OR %WS_VISIBLE OR %DS_MODALFRAME OR %DS_CENTER OR %DS_3DLOOK OR _
        %DS_NOFAILCREATE OR %DS_SETFONT, %WS_EX_WINDOWEDGE OR %WS_EX_CONTROLPARENT OR %WS_EX_LEFT OR %WS_EX_LTRREADING OR _
        %WS_EX_RIGHTSCROLLBAR, TO hDlg
    CONTROL ADD BUTTON, hDlg, %IDC_BTN_SHOWANIMATION, "ShowAnimation", 48, 88, 96, 20
    CONTROL ADD "SysAnimate32", hDlg, %IDC_SYSANIMATE32_1, "#103", 16, 12, 172, 44, %WS_CHILD OR %WS_VISIBLE OR _
        %ACS_TRANSPARENT OR %ACS_CENTER OR %ACS_AUTOPLAY

    DIALOG SHOW MODAL hDlg, CALL cbProc
END FUNCTION   

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Сообщение jangle » 02.02.2007 (Пт) 14:58

ок, спасибо, попробую применит это на практике


Вернуться в Power Basic

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 20

    TopList