<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; WSH: WSO — пример работы с иконкой в SystemTray]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=3906&amp;type=atom" />
	<updated>2009-11-21T20:48:59Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=3906</id>
		<entry>
			<title type="html"><![CDATA[Re: WSH: WSO — пример работы с иконкой в SystemTray]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=30951#p30951" />
			<content type="html"><![CDATA[<p>Перевод предыдущего примера на VBScript. Отличие лишь в том, что в событии onResize() проверяются размеры клиентской части формы на равенство нулю.<br /></p><div class="codebox"><pre><code>Option Explicit

Dim objWSO
Dim objImageList
Dim objTrayIcon
Dim objForm


Set objWSO = WScript.CreateObject(&quot;Scripting.WindowSystemObject&quot;)

Set  objImageList = objWSO.CreateImageList()
With objImageList
    .Load objWSO.LoadImage(&quot;c:\Windows\winnt.bmp&quot;)
End With

Set  objTrayIcon = objWSO.CreateTrayIcon()
With objTrayIcon
    .Hint = &quot;TrayIcon Test&quot;
    .Images = objImageList
    .ImageIndex = 0
    
    .onClick = GetRef(&quot;TrayIcon_onClick&quot;)
End With

Set  objForm = objWSO.CreateForm(0, 0, 0, 0)
With objForm
    .Icon = &quot;c:\Windows\winnt.bmp&quot;
    .Text = &quot;Тест&quot;
    
    .ClientWidth  = 200
    .ClientHeight = 100
    
    .MinWidth     = 100
    .MinHeight    =  50
    
    .CenterControl()
    
    .MaximizeBox = False
    .SizeGrip    = True
    
    .onClose  = GetRef(&quot;Form_onClose&quot;)
    .onResize = GetRef(&quot;Form_onResize&quot;)
    
    .Show()
End With


Do
    objWSO.Run()
    
    WScript.Sleep 100
Loop Until objWSO.Controls.Count = 0

Set objForm      = Nothing
Set objTrayIcon  = Nothing
Set objImageList = Nothing
Set objWSO       = Nothing

WScript.Quit 0
&#039;=============================================================================

&#039;=============================================================================
Sub Form_onClose(Sender)
    Sender.Destroy()
End Sub
&#039;=============================================================================

&#039;=============================================================================
Sub Form_onResize(Sender)
    With Sender
        If .ClientHeight = 0 And .ClientHeight = 0 Then
            .Hide()
            
            objTrayIcon.Active = True
        End If
    End With
End Sub
&#039;=============================================================================

&#039;=============================================================================
Sub TrayIcon_onClick(Sender)
    Sender.Active = False
    
    With objForm
        .Show()
        .Restore()
    End With
End Sub
&#039;=============================================================================</code></pre></div><p><em>Как в предыдущем, так и в этом примере для ясности можно подставить любую имеющуюся реальную иконку «*.ico» вместо «c:\Windows\winnt.bmp».</em></p>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2009-11-21T20:48:59Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=30951#p30951</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[WSH: WSO — пример работы с иконкой в SystemTray]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=30950#p30950" />
			<content type="html"><![CDATA[<p>В библиотеке <a href="http://veretennikov.org/Default.aspx?f=WSO%2fDefault.aspx">WindowSystemObject (WSO)</a> есть класс <strong>TrayIcon</strong>, который создаёт иконку в области SystemTray (около часиков). В документации и примерах нет описания его использования. Восполним данный пробел примером на JScript.</p><p><em>Описание примера:</em><br />При сворачивании окна приложения в области SystemTray появляется иконка (кнопка окна на панели задач при этом скрывается). При щелчке на этой иконке окно приложения восстанавливается, а иконка убирается.</p><p><em>Особенности:</em><br />1. В объектной модели <strong>WSO</strong> у класса <strong>Form</strong> отсутствует событие минимизации окна — используется событие onResize(), при высоте окна меньше 30.<br />2. При скрытии окна происходит выход из метода Run() — используется цикл по условию наличия форм oWso.Controls.Count. Выход из скрипта при разрушении формы методом Destroy().<br /></p><div class="codebox"><pre><code>var oWso = new ActiveXObject(&quot;Scripting.WindowSystemObject&quot;)
var cTray = oWso.CreateImageList()
cTray.Height=32
cTray.Width=32
cTray.Load(oWso.LoadImage(&quot;c:\\Windows\\winnt.bmp&quot;))
var Tray=oWso.CreateTrayIcon()
Tray.Hint=&quot;TrayIcon Test&quot;
Tray.Images=cTray
Tray.ImageIndex=0
Tray.Active=true

var f = oWso.CreateForm(0,0,0,0)
f.Icon=&quot;c:\\Windows\\winnt.bmp&quot;
f.Text = &quot;Тест&quot;

f.ClientWidth = 100
f.ClientHeight = 100
f.CenterControl()

f.MaximizeBox =false
f.SizeGrip=true

f.onClose=function(Sender)
{Sender.Destroy()}

f.onResize=function(Sender)
{
if (Tray.Active)
{
Tray.Active=false
}
else if (Sender.Height &lt;30)
{
Tray.Active=true
f.Hide()
}
}

Tray.onClick=function(Sender)
{
f.Show()
f.Restore()
}

f.Show()
Tray.Active=false
while (oWso.Controls.Count)
{
oWso.Run()
WScript.Sleep(100)
}</code></pre></div><p>Автор идеи — <strong>badik</strong>.</p>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2009-11-21T20:43:17Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=30950#p30950</id>
		</entry>
</feed>
