vruby 2004.08.07

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,5 @@
1
+ =begin
2
+ The names of event handlers includes '????', which is its user-defined name
3
+ declared at argument for addControl method (VRParent.)
4
+ =end
5
+
@@ -0,0 +1,170 @@
1
+ ###################################
2
+ #
3
+ # rscutil.rb
4
+ # Programmed by nyasu <nyasu@osk.3web.ne.jp>
5
+ # Copyright 2000-2001 Nishikawa,Yasuhiro
6
+ #
7
+ # More information at http://www.osk.3web.ne.jp/~nyasu/software/vrproject.html
8
+ # (in Japanese)
9
+ #
10
+ #
11
+ #
12
+ ###################################
13
+
14
+ require 'swin'
15
+
16
+
17
+ =begin
18
+ = rscutil.rb
19
+ Utilities for resources
20
+
21
+ == Base64dumper
22
+ The module to use binary data with base64
23
+ === Class Method
24
+ --- loadString(str)
25
+ Load a object from base64 encoded string.
26
+ === Method
27
+ --- dumpString
28
+ Dumps an object into base64 encoded string.
29
+ =end
30
+
31
+ module Base64dumper
32
+ def self.loadString(str)
33
+ Marshal.load(str.unpack("m")[0])
34
+ end
35
+
36
+ def dumpString
37
+ [Marshal.dump(self)].pack("m")
38
+ end
39
+ end
40
+
41
+
42
+
43
+ module SWin
44
+ class Bitmap
45
+ include Base64dumper
46
+ def self.loadString(str) Base64dumper.loadString(str) end
47
+ end
48
+ end
49
+
50
+ #####
51
+
52
+ module SWin
53
+ class Font
54
+ STRIKEOUT=4
55
+ UNDERLINE=2
56
+ ITALIC=1
57
+ end
58
+ end
59
+
60
+ ## ####--------------------
61
+
62
+ # FontStruct for handling fonts and text attributes.
63
+
64
+ =begin
65
+ == FontStruct
66
+ Subclass of Struct for representing text attributes.
67
+
68
+ === Attributes
69
+ --- fontface
70
+ --- height
71
+ --- style
72
+ --- weight
73
+ --- width
74
+ --- escapement
75
+ --- orientation
76
+ --- pitch_family
77
+ --- charset
78
+ --- point
79
+ --- color
80
+
81
+ === Class Method
82
+ --- new2(args)
83
+ Use new2 instead of new.
84
+
85
+ === Methods
86
+ --- params
87
+ Returns parameters that can be used for parameter of
88
+ SWin::LWFactory.newfont()
89
+ --- spec
90
+ Returns text attributes for parameter of SWin::CommonDialog.chooseFont
91
+ --- bold?
92
+ Returns whether the attributes means bold style
93
+ --- bold=(flag)
94
+ Sets or resets bold style.
95
+ --- italic?
96
+ Returns whether the attributes means italic style
97
+ --- italic=(flag)
98
+ Sets or resets italic style.
99
+ --- underlined?
100
+ Returns whether the attributes means underline style
101
+ --- underlined=(flag)
102
+ Sets or resets underline style.
103
+ --- striked?
104
+ Returns whether the attributes means strike-out style
105
+ --- striked=(flag)
106
+ Sets or resets strike-out style.
107
+ =end
108
+
109
+ FontStruct = Struct.new("FontStruct",
110
+ :fontface,:height,:style,:weight,:width,:escapement,
111
+ :orientation,:pitch_family,:charset,
112
+ :point,:color)
113
+
114
+ class FontStruct
115
+ private_class_method :new
116
+
117
+ def self.new2(*args)
118
+ new(*args.flatten)
119
+ end
120
+
121
+ def params
122
+ to_a[0,9]
123
+ end
124
+
125
+ def spec
126
+ a=self.to_a
127
+ [ a[0,9],a[9],a[10] ]
128
+ end
129
+
130
+ def bold=(flag)
131
+ self.weight = if flag then 600 else 300 end
132
+ end
133
+ def bold?
134
+ (@weight>400)
135
+ end
136
+
137
+ def italic=(flag)
138
+ if flag then
139
+ self.style |= 1 # 1=SWINFONT_ITALIC
140
+ else
141
+ self.style &= 0xfffffffe
142
+ end
143
+ end
144
+ def italic?
145
+ (self.style&1)>0
146
+ end
147
+
148
+ def underlined=(flag)
149
+ if flag then
150
+ self.style |= 2 # 2=SWINFONT_ULINE
151
+ else
152
+ self.style &= 0xfffffffd
153
+ end
154
+ end
155
+ def underlined?
156
+ (self.style&2)>0
157
+ end
158
+
159
+ def striked=(flag)
160
+ if flag then
161
+ self.style |= 4 # 4=SWINFONT_STRIKE
162
+ else
163
+ self.style &= 0xfffffffb
164
+ end
165
+ end
166
+ def striked?
167
+ (self.style&4)>0
168
+ end
169
+ end
170
+
@@ -0,0 +1,250 @@
1
+ ###################################
2
+ #
3
+ # sysmod.rb
4
+ # Programmed by nyasu <nyasu@osk.3web.ne.jp>
5
+ # Copyright 1999-2001 Nishikawa,Yasuhiro
6
+ #
7
+ # More information at http://www.threeweb.ad.jp/~nyasu/software/vrproject.html
8
+ # (in Japanese)
9
+ #
10
+ ###################################
11
+
12
+ require 'Win32API'
13
+
14
+ =begin
15
+ = sysmod.rb
16
+ Win32 Utilities
17
+ =end
18
+
19
+ module MEMCOPY #Thanks, ruby-chan :)
20
+ =begin
21
+ == MEMCOPY
22
+ This is for copying string and memory each other.
23
+
24
+ === Class Methods
25
+ --- MEMCOPY::Str2Mem(dst,src,len)
26
+ Copies src (String) into memory at address dst (Integer).
27
+ --- MEMCOPY::Mem2Str(dst,src,len)
28
+ Copies contents from address dst (Integer) into src (String).
29
+ =end
30
+ begin
31
+ ## Windows2000
32
+ Pmemcpy1 = Win32API.new("NTDLL", "memcpy", ['P', 'L', 'I'], 'L')
33
+ Pmemcpy2 = Win32API.new("NTDLL", "memcpy", ['L', 'P', 'I'], 'L')
34
+ rescue
35
+ ## Windows95/98
36
+ Pmemcpy1 = Win32API.new("CRTDLL", "memcpy", ['P', 'L', 'I'], 'L')
37
+ Pmemcpy2 = Win32API.new("CRTDLL", "memcpy", ['L', 'P', 'I'], 'L')
38
+ end
39
+
40
+ def MEMCOPY::Str2Mem(dst,src,len)
41
+ Pmemcpy2.call(dst,src,len)
42
+ end
43
+ def MEMCOPY::Mem2Str(dst,src,len=dst.length)
44
+ Pmemcpy1.call(dst,src,len)
45
+ end
46
+ end
47
+
48
+ module GAtom
49
+ =begin
50
+ == GAtom
51
+ This is for utilizing Global Atoms.
52
+
53
+ --- GAtom::Add(text)
54
+ Create a new global atom whose name is ((|text|)).
55
+ --- GAtom::Delete(atm)
56
+ Delete ((|atm|)) of global atom.
57
+ --- GAtom::GetName(atm)
58
+ Returns name of ((|atm|)) of global atom.
59
+ =end
60
+
61
+ GlobalAddAtom = Win32API.new("kernel32","GlobalAddAtom",["P"],"I")
62
+ GlobalDeleteAtom=Win32API.new("kernel32","GlobalDeleteAtom",["I"],"I")
63
+ GlobalGetAtomName=Win32API.new("kernel32","GlobalGetAtomName",["I","P","I"],"I")
64
+
65
+ def GAtom::Add(text) (0xffff & GlobalAddAtom.call(text.to_s)) end
66
+ def GAtom::Delete(atm) GlobalDeleteAtom.call(atm) end
67
+
68
+ def GAtom::GetName(atm)
69
+ buffer=" "*256
70
+ r = GlobalGetAtomName.call(atm,buffer,256)
71
+ buffer[0,r]
72
+ end
73
+ end
74
+
75
+ module GMEM
76
+ =begin
77
+ == GMEM
78
+ This is for utilizing Global memories.
79
+
80
+ === Class Methods
81
+ --- GMEM::AllocStr(mode,text)
82
+ Allocates a global memory and set its contents as ((|text|)).
83
+ --- GMEM::Set(gmem,text,len)
84
+ Sets the contents of global memory gmem as ((|text|)).
85
+ --- GMEM::Get(gmem)
86
+ Gets the contents of gmem.
87
+
88
+ --- GMEM::Alloc(size)
89
+ Allocates a global memory.
90
+ --- GMEM::Lock(gmem)
91
+ Locks gmem to access it.
92
+ --- GMEM::Unlock(gmem)
93
+ Unlocks gmem.
94
+ --- GMEM::Free(gmem)
95
+ Frees gmem.
96
+ --- GMEM::Size(gmem)
97
+ Returns the size of gmem.
98
+ =end
99
+
100
+ #GlobalAlloc(method,size)
101
+ GlobalAlloc = Win32API.new("kernel32","GlobalAlloc",["I","I"],"I")
102
+
103
+ GlobalLock = Win32API.new("kernel32","GlobalLock",["I"],"I")
104
+ GlobalUnlock = Win32API.new("kernel32","GlobalUnlock",["I"],"")
105
+ GlobalFree = Win32API.new("kernel32","GlobalFree",["I"],"I")
106
+ GlobalSize = Win32API.new("kernel32","GlobalSize",["I"],"I")
107
+ GlobalFlags= Win32API.new("kernel32","GlobalFlags",["I"],"I")
108
+
109
+ def GMEM::Alloc(*arg) GlobalAlloc.call(*arg) end
110
+ def GMEM::Lock(*arg) GlobalLock.call(*arg) end
111
+ def GMEM::Unlock(*arg) GlobalUnlock.call(*arg) end
112
+ def GMEM::Free(*arg) GlobalFree.call(*arg) end
113
+ def GMEM::Size(*arg) GlobalSize.call(*arg) end
114
+
115
+ def GMEM::AllocStr(mode,text)
116
+ mem = GlobalAlloc.call(mode,text.length+1)
117
+ Set(mem,text,text.size+1)
118
+ mem
119
+ end
120
+
121
+ def GMEM::Set(hglb,text,siz=nil)
122
+ len= if siz then siz.to_i else [size,Size(hglb)].min end
123
+ lp = GlobalLock.call(hglb)
124
+ MEMCOPY::Str2Mem(lp,text.to_s,len)
125
+ GlobalUnlock.call(hglb)
126
+ end
127
+ def GMEM::Get(hglb)
128
+ lp = GlobalLock.call(hglb)
129
+ len = GlobalSize.call(hglb)
130
+ #p format "%x %d, %x",hglb, lp, GlobalFlags.call(hglb)
131
+ raise "Memory not accessible" if len==0
132
+ str = " " * (len+1)
133
+ MEMCOPY::Mem2Str(str,lp,len)
134
+ GlobalUnlock.call(hglb)
135
+ str
136
+ end
137
+ end
138
+
139
+ module SMSG
140
+ =begin
141
+ == SMSG
142
+ This is for Windows Messaging.
143
+
144
+ === Class Methods
145
+ --- sendMessage(hwnd,uMsg,wParam,lParam)
146
+ Calls SendMessage(). see Windows SDK document.
147
+ ((|lParam|)) can be both type of Integer and String
148
+ --- postMessage(hwnd,uMsg,wParam,lParam)
149
+ Calls PostMessage(). see Windows SDK document.
150
+ ((|lParam|)) can be both type of Integer and String
151
+ =end
152
+
153
+ SendMessage = Win32API.new("user32","SendMessage",["I","I","I","I"],"I")
154
+ PostMessage = Win32API.new("user32","PostMessage",["I","I","I","I"],"I")
155
+ SendMessage2 = Win32API.new("user32","SendMessage",["I","I","I","P"],"I")
156
+ PostMessage2 = Win32API.new("user32","PostMessage",["I","I","I","P"],"I")
157
+
158
+ def SMSG.sendMessage(*arg)
159
+ if arg[3].is_a?(Integer) then
160
+ SendMessage.call(*arg)
161
+ else
162
+ SendMessage2.call(*arg)
163
+ end
164
+ end
165
+
166
+ def SMSG.postMessage(*arg)
167
+ if arg[3].is_a?(Integer) then
168
+ PostMessage.call(*arg)
169
+ else
170
+ PostMessage2.call(*arg)
171
+ end
172
+ end
173
+ end
174
+
175
+ module Cursor
176
+ =begin
177
+ == Cursor
178
+ This is for System cursor handling.
179
+
180
+ === Class Methods
181
+ --- get_screenposition
182
+ Returns x,y in the screen coordinate.
183
+ --- set_screenposition(x,y)
184
+ Sets cursor position into (x,y) in the screen coordinate.
185
+ =end
186
+
187
+ GetCursorPos = Win32API.new("user32","GetCursorPos","P","I")
188
+ SetCursorPos = Win32API.new("user32","SetCursorPos","II","I")
189
+ POINTSTRUCT="II"
190
+
191
+ def self.get_screenposition
192
+ r=[0,0].pack(POINTSTRUCT)
193
+ GetCursorPos.call(r)
194
+ r.unpack(POINTSTRUCT)
195
+ end
196
+
197
+ def self.set_screenposition(x,y)
198
+ SetCursorPos.call(x.to_i,y.to_i)
199
+ end
200
+ end
201
+
202
+ module LastError
203
+ =begin
204
+ == LastError
205
+ This is for handling LastError.
206
+
207
+ === Class Methods
208
+ --- set(ecode)
209
+ Sets lasterror code as ((|ecode|)).
210
+ --- code
211
+ --- get
212
+ Gets last error code.
213
+ --- code2msg(ecode,msgarg=0)
214
+ Get the error message of ((|ecode|)).
215
+ ((|msgarg|)) is optional argument for message formatting.
216
+ --- message(arg=0)
217
+ Returns last error message.
218
+ =end
219
+
220
+ GetLastError = Win32API.new('kernel32','GetLastError','V','L')
221
+ SetLastError = Win32API.new('kernel32','SetLastError','L','V')
222
+ FormatMessage = Win32API.new('kernel32','FormatMessageA','LPLLPLP','L')
223
+ FORMAT_MESSAGE_FROM_SYSTEM = 4096
224
+
225
+ def self.set(ecode)
226
+ SetLastError.call(ecode)
227
+ end
228
+
229
+ def self.code
230
+ GetLastError.call()
231
+ end
232
+ def self.get() self.code end
233
+
234
+ def self.code2msg(scode,msg=0)
235
+ buffer = " "*(2048)
236
+ len = FormatMessage.call FORMAT_MESSAGE_FROM_SYSTEM,0,scode,0,
237
+ buffer,buffer.size,msg
238
+ buffer[0,len]
239
+ end
240
+
241
+ def self.message(msg=0)
242
+ self.code2msg(self.code,msg)
243
+ end
244
+ end
245
+
246
+ module ClipboardFormat
247
+ CF_TEXT = 1
248
+ CF_OEMTEXT = 7
249
+ CF_HDROP = 15
250
+ end
@@ -0,0 +1,56 @@
1
+ ###################################
2
+ #
3
+ # vractivex.rb
4
+ # Programmed by nyasu <nyasu@osk.3web.ne.jp>
5
+ # Copyright 2003 Nishikawa,Yasuhiro
6
+ #
7
+ # More information at http://www.threeweb.ad.jp/~nyasu/software/vrproject.html
8
+ # (in Japanese)
9
+ #
10
+ ###################################
11
+
12
+ require 'vr/vruby'
13
+ require 'Win32API'
14
+ require 'win32ole'
15
+
16
+ class VRActiveXControl < VRControl
17
+ Win32API.new("atl.dll","AtlAxWinInit","","I").call
18
+
19
+ WINCLASSINFO=["AtlAxWin",0]
20
+ ACTIVEXCINFO=["",""] # PROGID,EVENTSINK
21
+
22
+ alias :progId :caption
23
+ alias :progId= :caption=
24
+ def caption() "" end
25
+ def caption=(arg) arg end
26
+
27
+ def initialize
28
+ self.progId = self.class::ACTIVEXCINFO[0]
29
+ class <<self
30
+ undef_method :progId=
31
+ end
32
+ end
33
+
34
+ def vrinit
35
+ super
36
+ @_vr_win32ole = self.get_oleinterface
37
+ if self.class::ACTIVEXCINFO[1] then
38
+ @_vr_win32ole_event =
39
+ WIN32OLE_EVENT.new(@_vr_win32ole,self.class::ACTIVEXCINFO[1])
40
+ end
41
+ end
42
+
43
+ def ole_interface() @_vr_win32ole; end
44
+ def ole_events() @_vr_win32ole_event; end
45
+
46
+ def add_oleeventhandler(evname,handlername=evname.downcase)
47
+ ole_events.on_event(evname) do |*args|
48
+ @parent.controlmsg_dispatching(self,handlername,*args)
49
+ end
50
+ end
51
+
52
+ def _invoke(*args) @_vr_win32ole._invoke(*args) end
53
+ def _setproperty(*args) @_vr_win32ole._setproperty(*args) end
54
+ def _getproperty(*args) @_vr_win32ole._getproperty(*args) end
55
+
56
+ end