View previous topic :: View next topic |
Author |
Message |
Hippo Contributor
Joined: 08 Feb 2005 Posts: 53
|
Posted: Thu Feb 10, 2005 3:11 pm Post subject: Minimize to System Tray |
|
|
How do I go about minimizing my application to the system tray. The VDS help file doesnt really mention anything about doing this. Is it possible? |
|
Back to top |
|
|
Serge Professional Member
Joined: 04 Mar 2002 Posts: 1480 Location: Australia
|
Posted: Thu Feb 10, 2005 3:32 pm Post subject: |
|
|
yes it is
1. create your interface but don't put DIALOG SHOW at the end
2. add DIALOG ADD,TASKICON,SystemTray to your interface code
2. before :EVLOOP use WINDOW HIDE, ... to hide your window
3. add :SystemTrayCLICK to handle the event when someone clicks on the icon in the system tray - for example, you will want to use WINDOW NORMAL,... to show the interface of your program
4. add a button to minimise the window to the system tray which is just another WINDOW HIDE,... command
it all comes down to "using mirrors" - minimising the program to the system tray is really about hiding it, while maximising it from the system tray is just making it appear
that's what i do anyway - may be someone else has a better way of doing it
serge _________________
|
|
Back to top |
|
|
Mac Professional Member
Joined: 08 Jul 2000 Posts: 1585 Location: Oklahoma USA
|
|
Back to top |
|
|
WidgetCoder Contributor
Joined: 28 May 2002 Posts: 126 Location: CO, USA
|
Posted: Fri May 20, 2005 4:04 pm Post subject: Minimize to System Tray Taskicon |
|
|
I found a more efficient way to minimize a window to a system tray icon using the MSGEVENT OPTION(see attached). The WM_STYLECHANGED ($0000007D) message would be ideal for this purpose but the VDS runtime doesn't pass it to the msgevent. The WM_NCLBUTTONDOWN message is only sent when the user clicks on the window's non-client area (title bar or buttons) so it's a good alternative.
Code: |
rem MSGEVENTs to capture non-client mouse clicks
rem Trap LEFT mouse button down
option msgevent,$000000A1,WM_NCLBUTTONDOWN
rem Trap RIGHT mouse button down to capture sysmenu/Minimize
option msgevent,$000000A4,WM_NCRBUTTONDOWN
option scale,96
title Min2Tray Demo
dialog create,Min2Tray Demo,-1,0,240,82
dialog add,check,minCK,30,14,180,18,Mininize to system tray,1
dialog show
%%dlg0 = @winexists(Min2Tray Demo)
:evloop
wait event
goto @event()
:TiconRestoreCLICK
dialog remove,TiconRestore
dialog show
window activate,%%dlg0
goto evloop
:WM_NCRBUTTONDOWN
:WM_NCLBUTTONDOWN
rem Non-standard window behaviors should be user optional
If @dlgtext(minCK)
rem Test if window status is 2 = iconized / hide taskbar button
rem info @msgparams(WL)
if @equal(@winpos(%%dlg0,S),2)
dialog hide
dialog add,taskicon,TiconRestore,,Restore
end
End
goto evloop
:Close
exit
|
|
|
Back to top |
|
|
webdaddy Contributor
Joined: 14 Nov 2004 Posts: 151 Location: Raleigh NC
|
Posted: Wed Oct 19, 2005 7:50 pm Post subject: Question |
|
|
In this previous example what is the purpose of
If @dlgtext(minCK)
Where is that text minCK located? I had to rem it out to get this to work with my scripts.
WD _________________ K Wetzel
Programming - Technology - Communications
"The Home of the SLC Security Console"
SLC now available for Linux... |
|
Back to top |
|
|
WidgetCoder Contributor
Joined: 28 May 2002 Posts: 126 Location: CO, USA
|
Posted: Wed Oct 19, 2005 9:14 pm Post subject: |
|
|
The "minCK" was just the name given to the Checkbox element which allows the user to select whether to Minimize to Tray or not. If the checkbox is not selected function "@dlgtext(minCK)" will return null and the window will minimize in the normal fashion.
To answer your question it really serves no purpose with respect to the example's main goal of minimizing a window to the Tray. I included it only as an example of how to make the Min-2-Tray feature optional for the end-user.
A word of caution if your using VDS's TaskIcon and Explorer were to crash and recover as it often does your TaskIcon will disappear leaving your program's window inaccessible to the user. I would recommend using the VDSGUI extension for creating your TaskIcon because it has an "TASKICONCRASHED" event that will notify your program when the Icon needs to be recreated.
When Explorer recreates the taskbar notification area (tray) it sends the following registered window message "TaskBarCreated" but I have NOT been able to successfully trap the message with the following code.
Code: | rem obtain message number set msgevent
loadlib user32.dll
%X = @lib(user32, RegisterWindowMessageA, INT:, TaskbarCreated)
freelib user32.dll
option msgevent,%X,TaskBarCreated
:TaskBarCreated
rem replace icon here
goto evloop
rem Does anyone have any ideas on how this can be done within VDS? |
|
|
Back to top |
|
|
webdaddy Contributor
Joined: 14 Nov 2004 Posts: 151 Location: Raleigh NC
|
Posted: Wed Oct 19, 2005 11:34 pm Post subject: Thanks |
|
|
I will look and see if I can figure out how to intercept the message. I tried using a similar method but it too failed. I believe there might be a message event for this in user32. Will check and see if I can find it. I stumbled over it the other day. _________________ K Wetzel
Programming - Technology - Communications
"The Home of the SLC Security Console"
SLC now available for Linux... |
|
Back to top |
|
|
webdaddy Contributor
Joined: 14 Nov 2004 Posts: 151 Location: Raleigh NC
|
Posted: Wed Oct 19, 2005 11:35 pm Post subject: Wow Im Stupid |
|
|
Oh i'm sorry that IS how you are trying to do it. I missed that fact that you were calling user32. Good luck. Will see if I can figure it out as well. If I do I'll post it to the forum for you. _________________ K Wetzel
Programming - Technology - Communications
"The Home of the SLC Security Console"
SLC now available for Linux... |
|
Back to top |
|
|
WidgetCoder Contributor
Joined: 28 May 2002 Posts: 126 Location: CO, USA
|
Posted: Thu Oct 20, 2005 6:00 am Post subject: option msgevent |
|
|
Since this approach works in Delphi I'm thinking the VDS runtime just isn't passing messages onto the "option msgevent". Wininspector shows that the window like all top level windows does receive the "TaskbarCreated" message. I hope msgevent's deficiencies get addressed in version 6. |
|
Back to top |
|
|
|