• Welcome to Powerbasic Museum 2020-B.
 

News:

Forum in repository mode. No new members allowed.

Main Menu

PB10 - Spinner control

Started by Patrice Terrier, April 12, 2011, 09:41:01 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Patrice Terrier

This is a Spinner control, to inform the user that a lengthy process or critical task is running.



This controls is provided on the form of a PB10.SLL file to be imbedded within an EXE or DLL.
The graphic resource animations are stored in a dedicated folder to ease their customization.

The spinner itself uses a distinct thread, it is top-most and auto-centered in the parent window.

Note: The zSpinnerInit function returns the Spinner window handle as a DWORD.

The resource animations are using the GDImage/WinLIFT proprietary image format with the .SKI extension, however you can still use the .PNG extension.

Added:

  • CPU reduction + nSpeedDelay parameter to customize the speed animation.

...
Patrice Terrier
GDImage (advanced graphic addon)
http://www.zapsolution.com

Patrice Terrier

#1
Forget to say, that you can move the spinner around, if you are able to catch it with the mouse ;)

...
Patrice Terrier
GDImage (advanced graphic addon)
http://www.zapsolution.com

José Roca

Hi Patrice,

When trying to compile it with my headers, I get error 632: GetModuleHandle: COMMON NAME IS A DUPLICATE.

Do you have compiled the SLL using your own declarations and declaring GetModuleHandle as COMMON ?

Patrice Terrier

#3
José,

I am always compiling from a DOS prompt using COMPILE.BAT like this:

D:\PowerTry\PBWIN /I.\; D:\PowerTry\Jose_WinAPI %1

However in zSpin.sll i am using my own headers, to produce the smallest code, whatever the PowerBASIC version being used.
So far i am only using PB10 for test, and i stay with PB9 for all my code production.


'+--------------------------------------------------------------------------+
'|                                                                          |
'|                               zSpin 1.00                                 |
'|                                                                          |
'|                        Animated spinner control                          |
'|                                                                          |
'+--------------------------------------------------------------------------+
'|                                                                          |
'|                         Author Patrice TERRIER                           |
'|                                                                          |
'|                         copyright(c) 2011-2011                           |
'|                                                                          |
'|                Patrice Terrier http://www.zapsolution.com                |
'|                                                                          |
'+--------------------------------------------------------------------------+
'|                  Project started on : 04-11-2011 (MM-DD-YYYY)            |
'|                        Last revised : 04-11-2011 (MM-DD-YYYY)            |
'+--------------------------------------------------------------------------+

#COMPILE SLL "zSpin.sll"

'----------------------------------------------------------------------
%TRUE               = 1
%FALSE              = 0
%NULL               = 0
%IDC_ARROW          = 32512&
%CS_VREDRAW         = &H1
%CS_HREDRAW         = &H2
%HTCAPTION          = 2
%WM_CREATE          = &H1
%WM_TIMER           = &H113
%WM_NCHITTEST       = &H084
%WM_DESTROY         = &H2
%AC_SRC_OVER        = &H00
%AC_SRC_ALPHA       = &H01
%ULW_ALPHA          = &H00000002

TYPE BLENDFUNCTION
  BlendOp AS BYTE
  BlendFlags AS BYTE
  SourceConstantAlpha AS BYTE
  AlphaFormat AS BYTE
END TYPE

TYPE SIZEL
  cx AS LONG
  cy AS LONG
END TYPE

TYPE RECT
  nLeft AS LONG
  nTop AS LONG
  nRight AS LONG
  nBottom AS LONG
END TYPE

TYPE POINTAPI
  x AS LONG
  y AS LONG
END TYPE

TYPE tagMSG
  hwnd AS DWORD
  message AS DWORD
  wParam AS LONG
  lParam AS LONG
  time AS DWORD
  pt AS POINTAPI
END TYPE

TYPE WNDCLASSEX
  cbSize AS DWORD
  style AS DWORD
  lpfnWndProc AS LONG
  cbClsExtra AS LONG
  cbWndExtra AS LONG
  hInstance AS DWORD
  hIcon AS DWORD
  hCursor AS DWORD
  hbrBackground AS DWORD
  lpszMenuName AS ASCIIZ PTR
  lpszClassName AS ASCIIZ PTR
  hIconSm AS DWORD
END TYPE

DECLARE FUNCTION GetModuleHandle LIB "KERNEL32.DLL" ALIAS "GetModuleHandleA" (lpModuleName AS ASCIIZ) AS DWORD
DECLARE FUNCTION FindWindow LIB "USER32.DLL" ALIAS "FindWindowA" (lpClassName AS ASCIIZ, lpWindowName AS ASCIIZ) AS LONG
DECLARE SUB apiSleep LIB "KERNEL32.DLL" ALIAS "Sleep" (BYVAL dwMilliseconds AS DWORD)
DECLARE FUNCTION GetWindowRect LIB "USER32.DLL" ALIAS "GetWindowRect" (BYVAL hWnd AS DWORD, lpRect AS RECT) AS LONG
DECLARE FUNCTION MoveWindow LIB "USER32.DLL" ALIAS "MoveWindow" (BYVAL hWnd AS DWORD, BYVAL x AS LONG, BYVAL y AS LONG, BYVAL nWidth AS LONG, BYVAL nHeight AS LONG, BYVAL bRepaint AS LONG) AS LONG
DECLARE FUNCTION KillTimer LIB "USER32.DLL" ALIAS "KillTimer" (BYVAL hWnd AS DWORD, BYVAL nIDEvent AS LONG) AS LONG
DECLARE FUNCTION SetTimer LIB "USER32.DLL" ALIAS "SetTimer" (BYVAL hWnd AS DWORD, BYVAL nIDEvent AS LONG, BYVAL uElapse AS DWORD, BYVAL lpTimerFunc AS LONG) AS LONG
DECLARE FUNCTION GetClassInfoEx LIB "USER32.DLL" ALIAS "GetClassInfoExA" (BYVAL hInst AS DWORD, lpszClass AS ASCIIZ, lpWndClass AS WNDCLASSEX) AS LONG
DECLARE FUNCTION RegisterClassEx LIB "USER32.DLL" ALIAS "RegisterClassExA" (pcWndClassEx AS WNDCLASSEX) AS WORD
DECLARE FUNCTION CreateWindowEx LIB "USER32.DLL" ALIAS "CreateWindowExA" (BYVAL dwExStyle AS DWORD, lpClassName AS ASCIIZ, lpWindowName AS ASCIIZ, BYVAL dwStyle AS DWORD, BYVAL x AS LONG, BYVAL y AS LONG, _
                BYVAL nWidth AS LONG, BYVAL nHeight AS LONG, BYVAL hWndParent AS DWORD, BYVAL hMenu AS DWORD, BYVAL hInstance AS DWORD, lpParam AS ANY) AS DWORD
DECLARE FUNCTION UpdateWindow LIB "USER32.DLL" ALIAS "UpdateWindow" (BYVAL hWnd AS DWORD) AS LONG
DECLARE FUNCTION GetMessage LIB "USER32.DLL" ALIAS "GetMessageA" (lpMsg AS tagMSG, BYVAL hWnd AS DWORD, BYVAL uMsgFilterMin AS DWORD, BYVAL uMsgFilterMax AS DWORD) AS LONG
DECLARE FUNCTION IsDialogMessage LIB "USER32.DLL" ALIAS "IsDialogMessageA" (BYVAL hDlg AS DWORD, lpMsg AS tagMSG) AS LONG
DECLARE FUNCTION TranslateMessage LIB "USER32.DLL" ALIAS "TranslateMessage" (lpMsg AS tagMSG) AS LONG
DECLARE FUNCTION DispatchMessage LIB "USER32.DLL" ALIAS "DispatchMessageA" (lpMsg AS tagMSG) AS LONG
DECLARE FUNCTION GetDC LIB "USER32.DLL" ALIAS "GetDC" (BYVAL hWnd AS DWORD) AS DWORD
DECLARE FUNCTION UpdateLayeredWindow LIB "USER32.DLL" ALIAS "UpdateLayeredWindow" (BYVAL hWnd AS DWORD, BYVAL hdcDst AS DWORD, pptDst AS POINTAPI, psize AS SIZEL, BYVAL hdcSrc AS DWORD, pptSrc AS POINTAPI, _
                BYVAL crKey AS DWORD, pblend AS BLENDFUNCTION, BYVAL dwFlags AS DWORD) AS LONG
DECLARE FUNCTION ReleaseDC LIB "USER32.DLL" ALIAS "ReleaseDC" (BYVAL hWnd AS DWORD, BYVAL hDC AS DWORD) AS LONG
DECLARE FUNCTION LoadCursor LIB "USER32.DLL" ALIAS "LoadCursorA" (BYVAL hInstance AS DWORD, lpCursorName AS ASCIIZ) AS DWORD
DECLARE SUB PostQuitMessage LIB "USER32.DLL" ALIAS "PostQuitMessage" (BYVAL nExitCode AS LONG)
DECLARE FUNCTION DefWindowProc LIB "USER32.DLL" ALIAS "DefWindowProcA" (BYVAL hWnd AS DWORD, BYVAL uMsg AS DWORD, BYVAL wParam AS DWORD, BYVAL lParam AS LONG) AS LONG
DECLARE FUNCTION DestroyWindow LIB "USER32.DLL" ALIAS "DestroyWindow" (BYVAL hWnd AS DWORD) AS LONG
DECLARE FUNCTION CreateCompatibleDC LIB "GDI32.DLL" ALIAS "CreateCompatibleDC" (BYVAL hdc AS DWORD) AS DWORD
DECLARE FUNCTION CreateCompatibleBitmap LIB "GDI32.DLL" ALIAS "CreateCompatibleBitmap" (BYVAL hdc AS DWORD, BYVAL nWidth AS LONG, BYVAL nHeight AS LONG) AS DWORD
DECLARE FUNCTION SelectObject LIB "GDI32.DLL" ALIAS "SelectObject" (BYVAL hdc AS DWORD, BYVAL hObject AS DWORD) AS DWORD
DECLARE FUNCTION DeleteObject LIB "GDI32.DLL" ALIAS "DeleteObject" (BYVAL hObject AS DWORD) AS LONG
DECLARE FUNCTION DeleteDC LIB "GDI32.DLL" ALIAS "DeleteDC" (BYVAL hdc AS DWORD) AS LONG
DECLARE FUNCTION GetDesktopWindow LIB "USER32.DLL" ALIAS "GetDesktopWindow" () AS LONG
DECLARE FUNCTION IsWindow LIB "USER32.DLL" ALIAS "IsWindow" (BYVAL hWnd AS DWORD) AS LONG
DECLARE FUNCTION SetThreadPriority LIB "KERNEL32.DLL" ALIAS "SetThreadPriority" (BYVAL hThread AS DWORD, BYVAL nPriority AS LONG) AS LONG

DECLARE FUNCTION zTrace LIB "zTrace.DLL" ALIAS "zTrace" (zMessage AS ASCIIZ) AS LONG



...


Patrice Terrier
GDImage (advanced graphic addon)
http://www.zapsolution.com

José Roca

It works if the declares use


#IF %DEF(%UNICODE)
DECLARE FUNCTION GetModuleHandle IMPORT "KERNEL32.DLL" ALIAS "GetModuleHandleA" ( _
   BYREF lpModuleName AS ASCIIZ _                       ' __in LPCSTR lpModuleName
) AS DWORD                                             ' HMODULE
#ELSE
DECLARE FUNCTION GetModuleHandle IMPORT "KERNEL32.DLL" ALIAS "GetModuleHandleW" ( _
   BYREF lpModuleName AS WSTRINGZ _                     ' __in LPCWSTR lpModuleName
) AS DWORD                                             ' HMODULE
#ENDIF ' NOT %UNICODE


but not if they use


DECLARE FUNCTION GetModuleHandleA IMPORT "KERNEL32.DLL" ALIAS "GetModuleHandleA" ( _
   BYREF lpModuleName AS ASCIIZ _                       ' __in LPCSTR lpModuleName
) AS DWORD                                             ' HMODULE

DECLARE FUNCTION GetModuleHandleW IMPORT "KERNEL32.DLL" ALIAS "GetModuleHandleW" ( _
   BYREF lpModuleName AS WSTRINGZ _                     ' __in LPCWSTR lpModuleName
) AS DWORD                                             ' HMODULE

#IF %DEF(%UNICODE)
   MACRO GetModuleHandle = GetModuleHandleW
#ELSE
   MACRO GetModuleHandle = GetModuleHandleA
#ENDIF


I have posted it in the beta forum. Let's see what Bob says.

Doug McDonald

Thank you Patrice, Very cool !! :)

Doug

Jules Marchildon

As always Patrice, you deliver delicious code!!!

Many Thanks!
Best Regards,
Jules

Patrice Terrier

I have attached to this post a set of new spinner animations.

Most of them are meant to be used hover a dark (black) bakground.

Enjoy!

...
Patrice Terrier
GDImage (advanced graphic addon)
http://www.zapsolution.com

Patrice Terrier

Some i wanted to keep for myself...
but i couldn't resist to share them with you ;)

...
Patrice Terrier
GDImage (advanced graphic addon)
http://www.zapsolution.com

Patrice Terrier

Here is a new one i have done.

Fascinating on a dark background...
Patrice Terrier
GDImage (advanced graphic addon)
http://www.zapsolution.com

Patrice Terrier

Imagine, just dreaming...

Must be used on a dark background.
Patrice Terrier
GDImage (advanced graphic addon)
http://www.zapsolution.com

Patrice Terrier

#11
A .ski file is an acronym for "Skin Image", it is an ARGB 32-bit lossless compressed GDImage proprietary format, intended to be used with the WinLIFT Skin Engine.

Its main purpose is to protect the design artwork of graphic creators.
Each Skin theme, and also each Spinner, is the result of several hours (even days) of Photoshop work.

...

Patrice Terrier
GDImage (advanced graphic addon)
http://www.zapsolution.com

Theo Gottwald


Patrice Terrier

Patrice Terrier
GDImage (advanced graphic addon)
http://www.zapsolution.com

Theo Gottwald

You can stop Patrice, any Opponen was out of the market already after your last strike  :D
Your creativity is unbeaten as i see it.