Ruby.

Пример:

require 'win32ole'

wso = WIN32OLE.new("Scripting.WindowSystemObject")

wso.EnableVisualStyles = true

form = wso.CreateForm(0,0,0,0)

form.ClientWidth = 150
form.ClientHeight = 100
form.CenterControl()

button = form.CreateButton(10,10,75,25,'Close')

WIN32OLE_EVENT.new(button).on_event('OnClick') do
        form.Close()
end


form.Show()

wso.Run()

QuickStart.jpg

См. также:
Больше примеров в папке Demo\Ruby.
Вначале нужно создать объект WindowSystemObject:

wso = WIN32OLE.new("Scripting.WindowSystemObject")

Далее нужно создать форму и компоненты.

Метод Show отображает форму на экране.

Метод Run реализует цикл обработки оконных сообщений.

Пример 2:

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

require 'win32ole'

def event (v,name)
	WIN32OLE_EVENT.new(v).on_event(name) 
end

o = WIN32OLE.new("Scripting.WindowSystemObject")

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

event(f,'OnMouseMove') do |sender,x,y,flags|
	sender.Form.StatusBar.item(0).Text = String(x)+' x '+String(y)
end

event(f,'OnMouseLeave') do |sender|
	sender.Form.StatusBar.item(0).Text = "No Mouse In Control"
end

event(f,'OnMouseUp') do |sender,x,y,button|
	sender.Form.MessageBox("MouseUp "+String(x)+" x "+String(y)+", Button = "+String(button))
end

event(f,'OnKeyDown') do |sender,key,flags|
	if key != 27 and key!=112 
		sender.Form.MessageBox("KeyDown "+String(key)) 
	end
end

event(f,'OnCloseQuery') do |sender,result|
	canCloseVar = false

	canCloseDialog = f.CreateDialogForm(0,0,510,100)
	canCloseDialog.CenterControl()
	canCloseDialog.TextOut(10,10,"Do you really want to quit this program?")

	yesButton = canCloseDialog.CreateButton(10,30,75,25,"Yes")
	yesButton.Default = true
		
	noButton = canCloseDialog.CreateButton(90,30,75,25,"No")
	noButton.Cancel = true

	aboutButton = canCloseDialog.CreateButton(170,30,75,25,"Help")

	event(yesButton,'OnClick') do |sender|
		canCloseVar = true
		sender.Form.Close()
	end

	event(aboutButton,'OnClick') do |sender|
		o.About()
	end

	event(noButton,'OnClick') { |sender| closeFormHandler(sender) }

	canCloseDialog.HelpButton = aboutButton

	canCloseDialog.ShowModal()
	canCloseDialog.Destroy()

	result.Value = canCloseVar
end

f.CreateStatusBar().Name = "StatusBar"
f.StatusBar.Add(100).AutoSize = true

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

event(button,'OnClick') do |sender|
	sender.Form.MessageBox("Button "+sender.text+": OnClick")
end

cancelButton = f.CreateButton(100,10,75,25,"Close")

def closeFormHandler(sender)
	sender.Form().Close()
end

event(cancelButton,'OnClick') { |sender| closeFormHandler(sender) }

label1 = f.TextOut(10,60,"WindowSystemObject")
label1.Font.Size = 16
label1.Color = 255
label1.Font.Bold = true

f.TextOut(10,100,"This sample shows how to handle events from WindowsSystemObject using JScript.\x0D\x0DClicking any mouse button invokes OnMouseUp event handler.\x0D\x0DMoving mouse inside this window invokes OnMouseMove event handler.\x0D\x0D(The current mouse position is displayed in the status bar)\x0D\x0DMoving mouse outside this window invokes OnMouseLeave event handler.\x0D\x0DClicking Demo or Close buttons invokes OnClick event handler.\x0D\x0DPressing any key invokes OnKeyDown event handler.\x0D\x0DTry to close this window to invoke OnCloseQuery event.")

fileMenu = f.Menu.Add("File")
exitMenuItem = fileMenu.Add("Exit",27)

event(exitMenuItem,'OnExecute') { |sender| closeFormHandler(sender) }

helpMenu = f.Menu.Add("Help")

aboutMenuItem = helpMenu.Add("About","F1")

event(aboutMenuItem,'OnExecute') { |sender| o.About() }

f.Show()

o.Run()

Документация по WSO 1.1. Последние изменения:Wed Aug 12 18:10:22 2015. (C) Веретенников А. Б. 2004-2015