View previous topic :: View next topic |
Author |
Message |
CodeScript Moderator Team
Joined: 08 Jun 2003 Posts: 1060 Location: India
|
Posted: Wed Jul 23, 2003 2:42 am Post subject: Change any system(global) cursor to a custom cursor |
|
|
Change any system(global) cursor to a custom cursor :
This script shows U how to change system or global cursors.
This can be helpful if U are working across two applications linked to each other in some way and inform end user that the current status - busy/waiting etc.
For simple applications within your dialog U can use "Dialog cursor" command in VDS; Don't use this
You should note that this changes the system cursor and if your app crashes in middle then the changed cursor remains. This can severely annoy the user.
To avoid that you can store the copied cursor handle to a safe place - registry/ini and restore it when your app is restarted.
Else the user has to go to contol panel ->mouse->pointers and restore it.
This has been explained in the comments of this sample but I have not implemented it in my current script.
This is just a primer as to what U can do with cursors using API.
U can do many more simpler things with cursors !! e.g change arrow to appstarting etc.
I just wrote this example as i needed this for my VDS tray helper project.
I have added constants for various system cursors in the script comments.
And if any one needs rainbow.ani used in the example it is in second box.
Just copy the code to notepad, Save as rainbow.uue and extract the cursor using winzip.
Tested on XP. Should work on 9x also.
So Enjoy.
AS USUAL THIS SCRIPT USES NON VDS DLL AND API
SAVE YOUR WORK AND RUN THE SCRIPT AT YOUR OWN RISK.
Code: |
Title Change System Cursor by CodeScript
DIALOG CREATE,Change System Cursor by CodeScript,-1,0,356,119,CLASS MYWIN,NOMIN
DIALOG ADD,STYLE,STYLE1,,11,B,,
DIALOG ADD,GROUP,GROUP1,1,-1,361,128,,,SIZE
DIALOG ADD,BITBTN,ChangeCursor,39,110,123,35,,Change Cursor,,STYLE1
DIALOG ADD,BITBTN,Reset,39,110,123,35,,Reset Cursor,,STYLE1
DIALOG SHOW
DIALOG HIDE,Reset
LOADLIB USER32
:RESIZE
goto EVLOOP
:Evloop
wait event
goto @event()
:ChangeCursorBUTTON
DIALOG HIDE,ChangeCursor
DIALOG SHOW,Reset
#LOAD A CUROR FROM FILE AND GET ITS HANDLE
#U can replace rainbow,ani by a cursor name you have placed
#in the app directory
%A = @lib(user32,LoadImageA,INT:,0,rainbow.ani,2,0,0,$10)
%H = @strdel(@WINEXISTS(#MYWIN),1,1)
IF %H
%I = @LIB(user32,GetCursor,INT:,)
#"Make a copy of your current cursor
#so that U can restore it :-)"
%J = @LIB(user32,CopyImage,INT:,%I,2,0,0,$4000)
#If U R concerned "what if my application crashes?"
#write the value of %J to a INI file/registry
#so that if there is an entry in the ini then
#your application restores the system cursor from that handle value
#when the application is restarted
#this can prevent annoyance to the end user
#otherwise the user has to go to control panel->mouse->pointers
#and reset the cursor. Not easy for a newbie to computers
%K = @lib(user32,SetSystemCursor,INT:,%A,32512)
#"Now change the system cursor "32512" i.e.OCR_NORMAL or Standard arrow
#to %A your custom cursor".
REM You can change other system cursors too:
REM Their constants are as follows:
REM 32650 - OCR_APPSTARTING Standard arrow and small hourglass
REM 32512 - OCR_NORMAL Standard arrow
REM 32515 - OCR_CROSS Crosshair
REM 32649 - OCR_HAND Windows 2000: Hand
REM 32513 - OCR_HELP Arrow and question mark
REM 32513 - OCR_IBEAM I-beam
REM 32648 - OCR_NO Slashed circle
REM 32646 - OCR_SIZEALL Four-pointed arrow pointing north, south, east, and west
REM 32643 - OCR_SIZENESW Double-pointed arrow pointing northeast and southwest
REM 32645 - OCR_SIZENS Double-pointed arrow pointing north and south
REM 32642 - OCR_SIZENWSE Double-pointed arrow pointing northwest and southeast
REM 32644 - OCR_SIZEWE Double-pointed arrow pointing west and east
REM 32516 - OCR_UP Vertical arrow
REM 32514 - OCR_WAIT Hourglass
ELSE
ERROR -1
end
goto EVLOOP
:ResetBUTTON
DIALOG HIDE,Reset
DIALOG SHOW,ChangeCursor
%K = @lib(user32,SetSystemCursor,INT:,%J,32512)
%K = @lib(user32,DestroyCursor,BOOL:,%J)
goto EVLOOP
:Close
REM "You SHOULD add these lines above the close label
REM so that the system cursor is restored back to original one at EXIT"
%K = @lib(user32,SetSystemCursor,INT:,%J,32512)
REM Once you have restored the cursor you can
REM destroy the CURSOR copy U made and replenish the memory.
%K = @lib(user32,DestroyCursor,BOOL:,%J)
FREELIB USER32
exit
|
Code: |
_=_ Part 001 of 001 of file Rainbow.cab
_=_
begin 666 Rainbow.cab
M35-#1@````"N`@```````"P``````````P$!``$`````````2`````$``Q4.
M)0``````````X2[Y;2``<F%I;F)O=RYA;FD`B:LP=%X"#B5;@("-`A#A4```
M`P!`-```#C!"MO].^_X3A=$*022(!.`2TEFEE):VZUQ9(DMX9=40(JF=W_CY
MA8$?7OF9'_/C[+R!21'Z@&@``)H!`B@B@+P'^8-_X27]!;)HQD0F4`@)N@DM
M:T**+J+;%82<!`E$G:8[\?[]+/\`0```1@"*!F`*91$/1!8\^[VF(_D[H(/%
M.9WYDYV0D5;?2J7Y^)FY/5G^_$GU<_(S,NI]??GK'4([G\;/@NF;YZOU9]:W
MCUVM#BV?'9U,;#I[E[H:>BS6]NF]-SY/CZV7'NT)XF+J]FEHTMAQZL`'L]?.
M<P66N\N%G';Q5WYK/\ZO7QGH<8_QS,DPO_CZN#SDP2:VX">MGM+YKZ?!?;1[
M<>"Z=P[7K5[?7MU:.&_\+7M;8O/[]G5CX+S[M]^?K]HFK0U@G]^J;M*J+EV.
M\HY:A3A<7#8WM=T'53X,POM\OPS?M@I9?[4Y-U7`'HWY7W/B#^_UBEZ>>_J9
M<71GOXP*,3K[J`HLU#DH]*/"E0__M$"@//H=0@57GM:-4=1&&T/:FX>M+.X8
M9KI'AZY!6(>PP%48Y5?4&TMS_OVE>?@$!A`74&0Z0&D=M05@/-`M^H(H#*`N
MF\H-0B)T8YRW&PM*&,E<$)%!)08$!+6AMA"8YX<%,)*ZH"J#:0P@MD+9S"F'
M,4&I(H$,XC&(VR!`4!M&Q78[L2S@D<`&=1A49M"!3<8&31&,\4K!B0L0&4%B
M@K:"\F`">-@S6P/"Q%6HC*`Q@LQL^C:(BF"#<,IE9!#$2&V#Y`44&`\0S(9_
+`1'%D2*@2%6DP"\`
`
end
|
_______________________________________________________________________________ _________________ Regards
- CodeScript
Give your application a professional look with the VDSGUI Extension |
|
Back to top |
|
|
Boo Valued Contributor
Joined: 31 Oct 2003 Posts: 599 Location: Gulf Breeze, Florida USA
|
Posted: Mon Oct 25, 2004 3:46 am Post subject: |
|
|
Hi Codescript,
Is there a way to change the edit cursor (i.e. the edit caret) globally?
Thanks,
- Boo |
|
Back to top |
|
|
SnarlingSheep Professional Member
Joined: 13 Mar 2001 Posts: 759 Location: Michigan
|
|
Back to top |
|
|
Boo Valued Contributor
Joined: 31 Oct 2003 Posts: 599 Location: Gulf Breeze, Florida USA
|
Posted: Tue Oct 26, 2004 4:19 am Post subject: |
|
|
Thanks Sheep. Any chance of an example in VDS? |
|
Back to top |
|
|
SnarlingSheep Professional Member
Joined: 13 Mar 2001 Posts: 759 Location: Michigan
|
Posted: Tue Oct 26, 2004 4:21 am Post subject: |
|
|
Maybe tomorrow _________________ -Sheep
My pockets hurt... |
|
Back to top |
|
|
Boo Valued Contributor
Joined: 31 Oct 2003 Posts: 599 Location: Gulf Breeze, Florida USA
|
Posted: Tue Oct 26, 2004 4:24 am Post subject: |
|
|
You rule! |
|
Back to top |
|
|
SnarlingSheep Professional Member
Joined: 13 Mar 2001 Posts: 759 Location: Michigan
|
|
Back to top |
|
|
Boo Valued Contributor
Joined: 31 Oct 2003 Posts: 599 Location: Gulf Breeze, Florida USA
|
Posted: Tue Oct 26, 2004 11:01 pm Post subject: |
|
|
Cool. Thanks.
No way to do it globally?
Cheers,
- Boo |
|
Back to top |
|
|
SnarlingSheep Professional Member
Joined: 13 Mar 2001 Posts: 759 Location: Michigan
|
Posted: Tue Oct 26, 2004 11:38 pm Post subject: |
|
|
Not that I know of. _________________ -Sheep
My pockets hurt... |
|
Back to top |
|
|
Boo Valued Contributor
Joined: 31 Oct 2003 Posts: 599 Location: Gulf Breeze, Florida USA
|
Posted: Wed Oct 27, 2004 2:46 am Post subject: |
|
|
Hi Sheep,
Thanks again.
By the way... This may be a dumb question, but is there a way to set the IBeam cursor (i.e. the little cursor that displays in an edit box and over text that can be copied) to a custom cursor using API?
Thanks,
- Boo |
|
Back to top |
|
|
SnarlingSheep Professional Member
Joined: 13 Mar 2001 Posts: 759 Location: Michigan
|
Posted: Wed Oct 27, 2004 7:53 pm Post subject: |
|
|
Yes, in CodeScripts code, where it says:
%K = @lib(user32,SetSystemCursor,INT:,%J,32512)
replace 32512(OCR_NORMAL) with 32513(OCR_IBEAM)
That's why he put in the remarks:
Quote: | REM You can change other system cursors too:
REM Their constants are as follows: |
_________________ -Sheep
My pockets hurt... |
|
Back to top |
|
|
Boo Valued Contributor
Joined: 31 Oct 2003 Posts: 599 Location: Gulf Breeze, Florida USA
|
Posted: Wed Oct 27, 2004 10:47 pm Post subject: |
|
|
Ah, duhhh! Thanks Sheep. |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum You can attach files in this forum You can download files in this forum
|
|