Вверх ↑
Главный модератор
Ответов: 2997
Рейтинг: 395
#1: 2010-10-04 10:47:08 ЛС | профиль | цитата
WSO & Python

WSO писал(а):

Интерпретатор языка и стандартные библиотеки свободно и бесплатно доступны как в бинарной форме, так и в виде исходных кодов на сайте http://www.python.org.
ActiveState предоставляет ActivePython - реализацию интерпретатора для Windows, которая доступна на сайте http://www.activestate.com, и имеет поддержку COM, необходимую для использования WSO. Для полного взаимодействия с WSO написан небольшой модуль wso.py, в котором описана процедура getref для получения ссылок на процедуры и передачи их в WSO.

Примеры на этом языке тестировались на версии ActivePython 2.3.

Модуль wso.py подключается например следующим образом:


from wso import *

или


import wso

при использовании первого варианта все имена модуля добавляются к текущему пространству имен, и для доступа к процедуре getref не требуется указывать имя модуля. Во втором случае для доступа к процедуре getref требуется указывать имя модуля в виде: wso.getref. Более подробно о подключении модулей можно прочитать в документации Python.

Для использования wso нужно подключить модули поддержки COM. Это делается в модуле wso.py (таким образом, если используется этот модуль их можно отдельно не подключать) следующим образом:


import pythoncom
import win32com.client

дополнительно можно подключить модуль WSOConsts, в котором объявлены константы.

Создание объекта WindowSystemObject осуществляется например так:


o = win32com.client.Dispatch("Scripting.WindowSystemObject")

Задание обработчиков событий с использованием модуля wso осуществляется через второй или третий уровень с использованием процедуры getref, например:


def OnMouseUp (sender,x,y,button,flags):
sender.Form.MessageBox("OnMouseUp")

form.OnMouseMove = getref(OnMouseUp)



Заметки:
требуется указывать точно все параметры в обработчике событий или указывать некоторые первые из них и далее *arg, например
def OnMouseUp (sender,x,y,*arg):
sender.Form.MessageBox("OnMouseUp")

Примеры на языке Python находятся в каталоге WSO в подкаталоге DemoPython. Один из примеров:


#WindowSystemObject (WSO) example
#Copyright (C) Veretennikov A. B. 2004

from wso import *
from wsosamples import *

o = win32com.client.Dispatch("Scripting.WindowSystemObject")

f = o.CreateForm(0,0,650,400)
f.CenterControl()

def MouseMove(sender,x,y,flags):
sender.Form.StatusBar[0].Text = str(x)+" x "+str(y)

def MouseExit(sender):
sender.Form.StatusBar[0].Text = "No Mouse In Control"

def MouseUp(sender,x,y,button,flags):
sender.Form.MessageBox("MouseUp "+str(x)+" x "+str(y)+", Button = "+str(button));

def KeyDown(sender,key,flags):
if (key != 27) and (key != 112): sender.Form.MessageBox("KeyDown "+str(key))

def ButtonClick(sender):
sender.Form.MessageBox("Button "+sender.text+": OnClick")

def CloseFormHandler(sender):
sender.Form.Close()

CanCloseVar = 1

def OKResult(sender):
global CanCloseVar
CanCloseVar = 1
sender.Form.Close()

def HelpAbout(sender):
AboutWSO(sender,"Event Handler Sample")

def CanClose(sender,resultptr):
global CanCloseVar
CanCloseVar = 0
j = f.CreateDialogForm(0,0,510,100)
j.CenterControl()
j.TextOut(10,10,"Do you really want to quit this program?")
x = j.CreateButton(10,30,75,25,"Yes")
x.OnClick = getref(OKResult)
x.Default = 1
x = j.CreateButton(90,30,75,25,"No")
x.OnClick = getref(CloseFormHandler)
x.Cancel = 1
x = j.CreateButton(170,30,75,25,"Help")
x.OnClick = getref(HelpAbout)
j.HelpButton = x
j.Color = 0xFF00FF
j.ShowModal()
j.Destroy()
resultptr.Put(CanCloseVar)

Button = f.CreateButton(10,10,75,25,"Demo")

Button.AddEventHandler("OnClick",getref(ButtonClick))

CancelButton = f.CreateButton(100,10,75,25,"Close")
CancelButton.OnClick = getref(CloseFormHandler)

f.CreateStatusBar().Name = "StatusBar"
f.StatusBar.Add(100).AutoSize = 1
f.OnMouseMove = getref(MouseMove)
f.OnMouseLeave = getref(MouseExit)
f.OnMouseUp = getref(MouseUp)
f.OnKeyDown = getref(KeyDown)
f.OnCloseQuery = getref(CanClose)

x = f.TextOut(10,60,"WindowSystemObject")
x.Font.Size = 16
x.Color = 255
x.Font.Bold = 1
f.TextOut(10,100,"This sample shows how to handle events from WindowsSystemObject using Python.x0Dx0DClicking any mouse button invokes OnMouseUp event handler.x0Dx0DMoving mouse inside this window invokes OnMouseMove event handler.x0Dx0D(The current mouse position is displayed in the status bar)x0Dx0DMoving mouse outside this window invokes OnMouseLeave event handler.x0Dx0DClicking Demo or Close buttons invokes OnClick event handler.x0Dx0DPressing any key invokes OnKeyDown event handler.x0Dx0DTry to close this window to invoke OnCloseQuery event.")

x = f.Menu.Add("File")
x.Add("Exit",27).OnExecute = getref(CloseFormHandler)
x = f.Menu.Add("Help")
x.Add("About","F1").OnExecute = getref(HelpAbout)

f.Show()

o.Run()

карма: 6
Дорогу осилит идущий. Install/Update HiAsm.NET
0