exerb 6.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (179) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +8 -0
  3. data/ChangeLog.ja.rd +305 -0
  4. data/README.en.txt +12 -0
  5. data/README.ja.html +143 -0
  6. data/README.ja.txt +6 -0
  7. data/README.md +50 -0
  8. data/Rakefile +205 -0
  9. data/bin/exerb +185 -0
  10. data/bin/mkexy +47 -0
  11. data/doc/LGPL +513 -0
  12. data/doc/class.ja.html +92 -0
  13. data/doc/command.ja.html +109 -0
  14. data/doc/core.ja.html +72 -0
  15. data/doc/example.ja.html +89 -0
  16. data/doc/faq.ja.html +59 -0
  17. data/doc/inside.ja.rd +404 -0
  18. data/doc/license.ja.html +62 -0
  19. data/doc/logo.gif +0 -0
  20. data/doc/misc.ja.html +72 -0
  21. data/doc/navi.gif +0 -0
  22. data/doc/recipe.ja.html +317 -0
  23. data/doc/style.css +187 -0
  24. data/doc/tutorial.ja.html +182 -0
  25. data/example/Makefile +54 -0
  26. data/example/cat_n.rb +14 -0
  27. data/example/exception.rb +9 -0
  28. data/example/ext/Win32API.so +0 -0
  29. data/example/ext/swin.so +0 -0
  30. data/example/msgbox.rb +14 -0
  31. data/example/rubytk.rb +22 -0
  32. data/example/runtime.ico +0 -0
  33. data/example/runtime.rb +19 -0
  34. data/example/vr/clipboard.rb +106 -0
  35. data/example/vr/compat/rubycompat.rb +18 -0
  36. data/example/vr/compat/vrcomctl.rb +12 -0
  37. data/example/vr/compat/vrcontrol.rb +50 -0
  38. data/example/vr/compat/vrmmedia.rb +24 -0
  39. data/example/vr/contrib/inifile.rb +116 -0
  40. data/example/vr/contrib/msgboxconst.rb +55 -0
  41. data/example/vr/contrib/toolbar.rb +371 -0
  42. data/example/vr/contrib/vrctlcolor.rb +110 -0
  43. data/example/vr/contrib/vrhotkey.rb +35 -0
  44. data/example/vr/contrib/vrlistviewex.rb +71 -0
  45. data/example/vr/contrib/vrstdscrollbar.rb +414 -0
  46. data/example/vr/contrib/vrwincomponent.rb +54 -0
  47. data/example/vr/dragdropformat.rb +209 -0
  48. data/example/vr/rscutil.rb +168 -0
  49. data/example/vr/sysmod.rb +249 -0
  50. data/example/vr/vractivex.rb +56 -0
  51. data/example/vr/vrclipboard.rb +53 -0
  52. data/example/vr/vrcomctl.rb +1819 -0
  53. data/example/vr/vrcontrol.rb +1374 -0
  54. data/example/vr/vrdde.rb +623 -0
  55. data/example/vr/vrddrop.rb +190 -0
  56. data/example/vr/vrdialog.rb +406 -0
  57. data/example/vr/vrhandler.rb +195 -0
  58. data/example/vr/vrlayout.old.rb +209 -0
  59. data/example/vr/vrlayout.rb +173 -0
  60. data/example/vr/vrlayout2.rb +340 -0
  61. data/example/vr/vrmargin.rb +141 -0
  62. data/example/vr/vrmgdlayout.rb +381 -0
  63. data/example/vr/vrmmedia.rb +287 -0
  64. data/example/vr/vrolednd.rb +192 -0
  65. data/example/vr/vrowndraw.rb +108 -0
  66. data/example/vr/vrrichedit.rb +366 -0
  67. data/example/vr/vrtimer.rb +148 -0
  68. data/example/vr/vrtooltip.rb +273 -0
  69. data/example/vr/vrtray.rb +143 -0
  70. data/example/vr/vrtvitem.rb +118 -0
  71. data/example/vr/vrtwopane.rb +223 -0
  72. data/example/vr/vruby.rb +1051 -0
  73. data/example/vr/winconst.rb +158 -0
  74. data/example/vruby.rb +38 -0
  75. data/exerb.gemspec +26 -0
  76. data/extconf.rb +7 -0
  77. data/lib/exerb/archive.rb +143 -0
  78. data/lib/exerb/config.rb +51 -0
  79. data/lib/exerb/error.rb +15 -0
  80. data/lib/exerb/executable.rb +68 -0
  81. data/lib/exerb/file_table.rb +189 -0
  82. data/lib/exerb/mkexy.rb +81 -0
  83. data/lib/exerb/name_table.rb +120 -0
  84. data/lib/exerb/recipe.rb +465 -0
  85. data/lib/exerb/resource.rb +190 -0
  86. data/lib/exerb/resource/base.rb +29 -0
  87. data/lib/exerb/resource/binary.rb +31 -0
  88. data/lib/exerb/resource/dialog.rb +30 -0
  89. data/lib/exerb/resource/group_icon.rb +85 -0
  90. data/lib/exerb/resource/icon.rb +52 -0
  91. data/lib/exerb/resource/version_info.rb +155 -0
  92. data/lib/exerb/resource_library.rb +120 -0
  93. data/lib/exerb/utility.rb +95 -0
  94. data/lib/exerb/utility2.rb +122 -0
  95. data/lib/exerb/version.rb +13 -0
  96. data/lib/exerb/win32/const/resource.rb +51 -0
  97. data/lib/exerb/win32/icon_file.rb +78 -0
  98. data/lib/exerb/win32/pe_file.rb +59 -0
  99. data/lib/exerb/win32/resource_directory.rb +105 -0
  100. data/lib/exerb/win32/resource_directory_root.rb +67 -0
  101. data/lib/exerb/win32/resource_entry.rb +98 -0
  102. data/lib/exerb/win32/struct/base.rb +43 -0
  103. data/lib/exerb/win32/struct/icon_dir_entry.rb +83 -0
  104. data/lib/exerb/win32/struct/icon_header.rb +43 -0
  105. data/lib/exerb/win32/struct/icon_res_entry.rb +48 -0
  106. data/lib/exerb/win32/struct/image_dos_header.rb +73 -0
  107. data/lib/exerb/win32/struct/image_file_header.rb +47 -0
  108. data/lib/exerb/win32/struct/image_nt_headers32.rb +53 -0
  109. data/lib/exerb/win32/struct/image_optional_header32.rb +107 -0
  110. data/lib/exerb/win32/struct/image_resource_data_entry.rb +45 -0
  111. data/lib/exerb/win32/struct/image_resource_directory.rb +47 -0
  112. data/lib/exerb/win32/struct/image_resource_directory_entry.rb +72 -0
  113. data/lib/exerb/win32/struct/image_section_header.rb +53 -0
  114. data/lib/exerb/win32/struct/version_info_block.rb +75 -0
  115. data/lib/exerb/win32/struct/vs_fixed_file_info.rb +62 -0
  116. data/src/exerb/cui.c +48 -0
  117. data/src/exerb/default.rb +1 -0
  118. data/src/exerb/exerb.c +877 -0
  119. data/src/exerb/exerb.h +92 -0
  120. data/src/exerb/gui.c +176 -0
  121. data/src/exerb/module.c +138 -0
  122. data/src/exerb/module.h +7 -0
  123. data/src/exerb/patch.c +27 -0
  124. data/src/exerb/resource.h +22 -0
  125. data/src/exerb/resource.rc +121 -0
  126. data/src/exerb/ruby.ico +0 -0
  127. data/src/exerb/utility.c +263 -0
  128. data/src/exerb/utility.h +33 -0
  129. data/test/alltests.rb +16 -0
  130. data/test/test-argv.rb +26 -0
  131. data/test/test-argv/test-argv.rb +9 -0
  132. data/test/test-argv/test-argv.ret +1 -0
  133. data/test/test-dollarzero.rb +26 -0
  134. data/test/test-dollarzero/test-dollarzero.rb +10 -0
  135. data/test/test-dollarzero/test-dollarzero.ret +2 -0
  136. data/test/test-dot.rb +26 -0
  137. data/test/test-dot/dot.dot.dot.rb +9 -0
  138. data/test/test-dot/dot.dot.rb +9 -0
  139. data/test/test-dot/test-dot.rb +13 -0
  140. data/test/test-dot/test-dot.ret +5 -0
  141. data/test/test-exitcode.rb +28 -0
  142. data/test/test-exitcode/test-exitcode.rb +9 -0
  143. data/test/test-kcode.rb +43 -0
  144. data/test/test-kcode/euc.rb +10 -0
  145. data/test/test-kcode/euc.ret +2 -0
  146. data/test/test-kcode/none.rb +10 -0
  147. data/test/test-kcode/none.ret +2 -0
  148. data/test/test-kcode/sjis.rb +10 -0
  149. data/test/test-kcode/sjis.ret +2 -0
  150. data/test/test-kcode/utf8.rb +10 -0
  151. data/test/test-kcode/utf8.ret +2 -0
  152. data/test/test-loadpath.rb +24 -0
  153. data/test/test-loadpath/test-loadpath.rb +9 -0
  154. data/test/test-nest.rb +18 -0
  155. data/test/test-nest/foo.rb +1 -0
  156. data/test/test-nest/foo/bar.rb +2 -0
  157. data/test/test-nest/foo/foo.rb +1 -0
  158. data/test/test-nest/test-nest.rb +1 -0
  159. data/test/test-nest/test-nest.ret +1 -0
  160. data/test/test-preload.rb +24 -0
  161. data/test/test-preload/test-preload.rb +9 -0
  162. data/test/test-regexp.rb +26 -0
  163. data/test/test-regexp/test-regexp.rb +23 -0
  164. data/test/test-regexp/test-regexp.ret +13 -0
  165. data/test/test-require1.rb +26 -0
  166. data/test/test-require1/require1.rb +9 -0
  167. data/test/test-require1/require2.rb +9 -0
  168. data/test/test-require1/require3.rb +9 -0
  169. data/test/test-require1/require4.rb +9 -0
  170. data/test/test-require1/require5.rb +9 -0
  171. data/test/test-require1/require6.rb +9 -0
  172. data/test/test-require1/test-require1.rb +41 -0
  173. data/test/test-require1/test-require1.ret +27 -0
  174. data/test/test-socket.rb +26 -0
  175. data/test/test-socket/test-socket.rb +7 -0
  176. data/test/test-socket/test-socket.ret +1 -0
  177. data/test/testcase.rb +66 -0
  178. data/vendor/mkexports.rb +167 -0
  179. metadata +352 -0
@@ -0,0 +1,148 @@
1
+ ###################################
2
+ #
3
+ # vrtimer.rb
4
+ # Programmed by nyasu <nyasu@osk.3web.ne.jp>
5
+ # Copyright 1999-2005 Nishikawa,Yasuhiro
6
+ #
7
+ # More information at http://vruby.sourceforge.net/index.html
8
+ #
9
+ #
10
+ ###################################
11
+
12
+ VR_DIR="vr/" unless defined?(::VR_DIR)
13
+ require VR_DIR+'vruby'
14
+ require "Win32API"
15
+
16
+ =begin
17
+ = VisualuRuby(tmp) Module(s) for Timer
18
+ <<<handlers.rd
19
+ =end
20
+
21
+
22
+
23
+ module VRTimerFeasible
24
+ =begin
25
+ == VRTimerFeasible
26
+ Interval Timers.
27
+ This module prepares create/delete interval timers.
28
+
29
+ === Methods
30
+ --- addTimer(interval=1000,timername="self")
31
+ Creates an interval timer whose name is defined by ((|timername|)).
32
+ Interval timers invoke ((|timername|))_timer method every interval times
33
+ in millisecond.
34
+
35
+ --- deleteTimer(timername="self")
36
+ Deletes an interval timer whose name is ((|timername|))
37
+
38
+ --- timeralive?(timername="self")
39
+ Returns boolean whether timer is alive or not.
40
+
41
+ === Event handler
42
+ --- ????_timer
43
+ Fired every interval times by the interval timer.
44
+ =end
45
+
46
+
47
+ include VRMessageHandler
48
+
49
+ SetTimer = Win32API.new("USER32", "SetTimer",['L', 'I', 'I', 'L'], 'I')
50
+ KillTimer = Win32API.new("USER32", "KillTimer",['L', 'L'], 'I')
51
+ WM_TIMER = 275
52
+
53
+ private
54
+
55
+ def newtimerid
56
+ @_vr_timernextid=0 unless defined? @_vr_timernextid
57
+ @_vr_timernextid+=1
58
+ end
59
+
60
+ public
61
+
62
+ def self_vrtimer(id) # WM_TIMER handler
63
+ name=@_vr_timers[id][0].dup
64
+ class << name
65
+ def name; self; end
66
+ end
67
+ # name += "_"+"timer"
68
+ # selfmsg_dispatching(name)
69
+ controlmsg_dispatching(name,"timer")
70
+ #
71
+ __send__(name) if respond_to?(name)
72
+ end
73
+
74
+ def vrinit
75
+ super
76
+ timerfeasibleinit
77
+ end
78
+
79
+ def timerfeasibleinit
80
+ @_vr_timerinterval=1000
81
+ addHandler WM_TIMER, "vrtimer", MSGTYPE::ARGWINT,nil #check
82
+ addEvent WM_TIMER
83
+ addNoRelayMessages [WM_TIMER]
84
+ end
85
+
86
+ def addTimer(interval=1000,timername="self")
87
+ id=newtimerid
88
+ SetTimer.call(self.hWnd,id,interval,0)
89
+ @_vr_timers=[] unless defined? @_vr_timers
90
+ @_vr_timers[id] = [timername,interval]
91
+ id
92
+ end
93
+
94
+ def deleteTimer(timername="self")
95
+ id=timerid(timername)
96
+
97
+ if id then
98
+ KillTimer.call(self.hWnd,id)
99
+ @_vr_timers[id]=nil
100
+ else
101
+ raise RuntimeError,"No such Timer"
102
+ end
103
+ end
104
+
105
+ def timerid(timername="self")
106
+ return nil unless @_vr_timers
107
+ r=nil
108
+ 1.upto(@_vr_timers.size-1) do |i|
109
+ if @_vr_timers[i] and @_vr_timers[i][0]==timername then
110
+ r=i
111
+ end
112
+ end
113
+ r
114
+ end
115
+
116
+ def timeralive?(tname="self")
117
+ timerid(tname).is_a?(Integer)
118
+ end
119
+ end
120
+
121
+ =begin sample
122
+ require 'vrcontrol'
123
+ module Test
124
+ include VRTimerFeasible
125
+
126
+ def construct
127
+ self.caption="test"
128
+ go=addControl VRButton,"delete","delete",10,10,100,20
129
+ addTimer 1000,"t1"
130
+ addTimer 1200,"t2"
131
+ end
132
+
133
+ def t1_timer
134
+ p "t1"
135
+ end
136
+ def t2_timer
137
+ print timeralive?("t1") ,":", timeralive?("t2"),"\n"
138
+ end
139
+
140
+ def delete_clicked
141
+ deleteTimer "t1"
142
+ end
143
+
144
+ end
145
+
146
+ VRLocalScreen.showForm(Test)
147
+ VRLocalScreen.messageloop
148
+ =end
@@ -0,0 +1,273 @@
1
+ ###################################
2
+ #
3
+ # vrtooltip.rb
4
+ # Programmed by nyasu <nyasu@osk.3web.ne.jp>
5
+ # Copyright 2001-2005 Nishikawa,Yasuhiro
6
+ #
7
+ # More information at http://vruby.sourceforge.net/index.html
8
+ #
9
+ ###################################
10
+
11
+ VR_DIR="vr/" unless defined?(::VR_DIR)
12
+ require VR_DIR+'vruby'
13
+
14
+ module WMsg
15
+ TTM_ACTIVATE = WM_USER + 1
16
+ TTM_SETDELAYTIME = WM_USER + 3
17
+ TTM_ADDTOOL = WM_USER + 4
18
+ TTM_DELTOOL = WM_USER + 5
19
+ TTM_RELAYEVENT = WM_USER + 7
20
+ TTM_GETTOOLINFO = WM_USER + 8
21
+ TTM_SETTOOLINFO = WM_USER + 9
22
+ TTM_GETTEXT = WM_USER + 11
23
+ TTM_GETTOOLCOUNT = WM_USER + 13
24
+ TTM_TRACKACTIVATE = WM_USER + 17
25
+ TTM_TRACKPOSITION = WM_USER + 18
26
+ TTM_SETTIPBKCOLOR = WM_USER + 19
27
+ TTM_SETTIPTEXTCOLOR= WM_USER + 20
28
+ TTM_GETDELAYTIME = WM_USER + 21
29
+ TTM_GETTIPBKCOLOR = WM_USER + 22
30
+ TTM_GETTIPTEXTCOLOR= WM_USER + 23
31
+ TTM_SETMAXTIPWIDTH = WM_USER + 24
32
+ TTM_GETMAXTIPWIDTH = WM_USER + 25
33
+
34
+ TTN_NEEDTEXT = 0x100000000-520
35
+ TTN_SHOW = 0x100000000-521
36
+ TTN_POP = 0x100000000-522
37
+ end
38
+
39
+ module WConst
40
+ TTF_IDISHWND = 1
41
+ TTF_CENTERTIP = 2
42
+ TTF_SUBCLASS = 16
43
+ end
44
+
45
+ module WStruct
46
+ TOOLINFO = "IILLllllLp"
47
+ end
48
+
49
+ class VRTooltip < SWin::Window
50
+ =begin
51
+ == VRTooltip
52
+ This is a class for Tooltip window.
53
+ Tooltip windows are created by VRForm.createTooltip()
54
+
55
+ === Methods
56
+ --- addTool(cntl,text)
57
+ Assigns a tooltip text for ((|cntl|)).
58
+ Returns a tooltip identifier.
59
+ --- addToolArea([sx,sy,ex,ey],text,wnd=self)
60
+ Assigns a tooltip text for the area in the parent window.
61
+ ((|sx|)) and ((|sy|)) indicate left-top corner,
62
+ and ((|ex|)) and ((|ey|)) indicate right-bottom corner.
63
+ Returns a tooltip identifier.
64
+ --- delTool(idf)
65
+ Deletes a tool identified by ((|idf|)) returned by addTool or addToolArea
66
+ --- enumTool
67
+ Yields all tool identifiers.
68
+ --- maxtipwidth
69
+ --- maxtipwidth=(mw)
70
+ About the tooltip width.
71
+ If you are to use multiline tooltip, set this parameter.
72
+ --- autopopTime
73
+ --- autopopTime=
74
+ Sets/Gets time length that tooltip remains visible.
75
+ --- initialTime
76
+ --- initialTime=
77
+ Sets/Gets time length that the pointer must remain stationary.
78
+ --- reshowTime
79
+ --- reshowTime=
80
+ Sets/Gets time length to reshow another tool's tooltip.
81
+
82
+ --- bkColor
83
+ --- bkColor=
84
+ Sets/Gets background color of tooltip window
85
+
86
+ --- textColor
87
+ --- textColor=
88
+ Sets/Gets text color of tooltip window
89
+
90
+ --- activate=(f)
91
+ ((|f|)) is boolean. This activates/deactivates the tooltip.
92
+ =end
93
+
94
+ class VRTooltipTool
95
+ attr :hwnd
96
+ attr :uid
97
+ attr :tool
98
+ def initialize(hwnd,uid,tool)
99
+ @hwnd,@uid,@tool = hwnd,uid,tool
100
+ end
101
+ end
102
+
103
+ private
104
+ def initialize
105
+ self.classname = "tooltips_class32"
106
+ self.style=1
107
+ self.exstyle= WExStyle::WS_EX_TOPMOST | WExStyle::WS_EX_TOOLWINDOW
108
+ @_vr_tools={}
109
+ end
110
+
111
+ def classcheck(cls,obj)
112
+ (eval("defined?(#{cls})") and obj.is_a?(eval(cls)))
113
+ end
114
+
115
+ def createTIPTOOLCore(wnd=@parent)
116
+ size=4*10
117
+ flag=WConst::TTF_SUBCLASS
118
+ hwnd=wnd.hWnd
119
+ uid= sx= sy= ex= ey= 0
120
+ hinst=@screen.application.hInstance
121
+ text=""
122
+ [size,flag,hwnd,uid,sx,sy,ex,ey,hinst,text]
123
+ end
124
+
125
+ def addToolCore(ti)
126
+ tis=ti.pack(WStruct::TOOLINFO)
127
+ sendMessage WMsg::TTM_ADDTOOL,0,tis
128
+ end
129
+
130
+ def getTOOLINFOCore(hwnd,uid)
131
+ ti=createTIPTOOLCore
132
+ ti[2]=hwnd
133
+ ti[3]=uid
134
+ ti[9] = "\0\0\0\0" * (1024/4+1) # /* Thanks, Wayne Vucenic */
135
+ tis = ti.pack(WStruct::TOOLINFO)
136
+ sendMessage WMsg::TTM_GETTOOLINFO,0,tis
137
+ tis.unpack(WStruct::TOOLINFO)
138
+ end
139
+
140
+ public
141
+
142
+ def setparam(parent,screen)
143
+ @parent,@screen = parent,screen unless defined? @screen
144
+ end
145
+
146
+ def activate=(f)
147
+ i = if f then 1 else 0 end
148
+ sendMessage WMsg::TTM_ACTIVATE,i,0
149
+ end
150
+
151
+ def maxtipwidth=(w)
152
+ s=[w].pack("L")
153
+ sendMessage WMsg::TTM_SETMAXTIPWIDTH,0,s
154
+ end
155
+
156
+ def maxtipwidth
157
+ sendMessage WMsg::TTM_GETMAXTIPWIDTH,0,0
158
+ end
159
+
160
+ def autopopTime
161
+ sendMessage WMsg::TTM_GETDELAYTIME,2,0
162
+ end
163
+ def initialTime
164
+ sendMessage WMsg::TTM_GETDELAYTIME,3,0
165
+ end
166
+ def reshowTime
167
+ sendMessage WMsg::TTM_GETDELAYTIME,1,0
168
+ end
169
+ def autopopTime=(msec)
170
+ sendMessage WMsg::TTM_SETDELAYTIME,2,MAKELPARAM(msec,0)
171
+ end
172
+ def initialTime=(msec)
173
+ sendMessage WMsg::TTM_SETDELAYTIME,3,MAKELPARAM(msec,0)
174
+ end
175
+ def reshowTime=(msec)
176
+ sendMessage WMsg::TTM_SETDELAYTIME,1,MAKELPARAM(msec,0)
177
+ end
178
+
179
+ def bkColor
180
+ sendMessage WMsg::TTM_GETTIPBKCOLOR,0,0
181
+ end
182
+ def bkColor=(c)
183
+ sendMessage WMsg::TTM_SETTIPBKCOLOR,c.to_i,0
184
+ end
185
+ def textColor
186
+ sendMessage WMsg::TTM_GETTIPTEXTCOLOR,0,0
187
+ end
188
+ def textColor=(c)
189
+ sendMessage WMsg::TTM_SETTIPTEXTCOLOR,c.to_i,0
190
+ end
191
+
192
+ def addTool(cnt,text)
193
+ if classcheck("VRStatic",cnt) then
194
+ sx=cnt.x; sy=cnt.y; ex=sx+cnt.w; ey=sy+cnt.h
195
+ rect = [sx,sy,ex,ey]
196
+ return addToolArea(rect,text)
197
+ end
198
+ if classcheck("VRToolbar::VRToolbarButton",cnt) then
199
+ rect = [0,0,0,0].pack("LLLL")
200
+ cnt.toolbar.sendMessage WMsg::TB_GETITEMRECT,cnt.index,rect
201
+ return addToolArea(rect.unpack("LLLL"),text,cnt.toolbar)
202
+ end
203
+
204
+ ti = createTIPTOOLCore
205
+ ti[1] |= WConst::TTF_IDISHWND
206
+ ti[3] = cnt.hWnd
207
+ ti[9] =text
208
+ addToolCore(ti)
209
+ @_vr_tools[ ti[2,2] ] = VRTooltipTool.new(@parent.hWnd,cnt.hWnd,cnt)
210
+ end
211
+
212
+ def addToolArea(rect,text,wnd=@parent)
213
+ sx,sy,ex,ey = *rect
214
+ ti = createTIPTOOLCore wnd
215
+ ti[3] = @parent.newControlID
216
+ ti[4]=sx ; ti[5]=sy; ti[6]=ex ; ti[7]=ey
217
+ ti[9] =text
218
+ addToolCore(ti)
219
+ @_vr_tools[ ti[2,2] ] = VRTooltipTool.new(@parent.hWnd,ti[3],rect)
220
+ end
221
+
222
+ def delTool(ttt)
223
+ raise "Requires VRTooltipTool (#{ttt.class})" unless ttt.is_a?(VRTooltipTool)
224
+ ti=createTIPTOOLCore
225
+ ti[2] = ttt.hwnd
226
+ ti[3] = ttt.uid
227
+ tts = ti.pack(WStruct::TOOLINFO)
228
+ @_vr_tools.delete(ti[2,2])
229
+ sendMessage WMsg::TTM_DELTOOL,0,tts
230
+ end
231
+
232
+ def enumTool
233
+ r = sendMessage WMsg::TTM_GETTOOLCOUNT,0,0
234
+ raise "Unknown error" if r!=@_vr_tools.size
235
+ @_vr_tools.each do |key,val|
236
+ yield val
237
+ end
238
+ end
239
+
240
+ def getTextOf(ttt,maxlength=1024) # there is no way to determine the length
241
+ ti = createTIPTOOLCore
242
+ buffer = "\0\0\0\0" * (maxlength/4+1)
243
+ ti[2] = ttt.hwnd
244
+ ti[3] = ttt.uid
245
+ ti[9] = buffer
246
+ tis = ti.pack(WStruct::TOOLINFO)
247
+ sendMessage WMsg::TTM_GETTEXT,0,tis
248
+ buffer.gsub!(/\0.*/,'')
249
+ buffer
250
+ end
251
+
252
+ def setTextOf(ttt,text)
253
+ ti = getTOOLINFOCore(ttt.hwnd,ttt.uid)
254
+ ti[9] = text
255
+ tis = ti.pack(WStruct::TOOLINFO)
256
+ sendMessage WMsg::TTM_SETTOOLINFO,0,tis
257
+ end
258
+
259
+ end
260
+
261
+
262
+ class VRForm
263
+ attr :tooltip
264
+ def createTooltip
265
+ return tooltip if defined?(@tooltip) && @tooltip
266
+ @tooltip = @screen.factory.newwindow(self,VRTooltip)
267
+ @tooltip.setparam self,@screen
268
+ @tooltip.create
269
+ @tooltip.etc = newControlID # error occurs if this line is before creation
270
+ @tooltip.top(-1)
271
+ end
272
+ end
273
+
@@ -0,0 +1,143 @@
1
+ ###################################
2
+ #
3
+ # vrtray.rb
4
+ # Programmed by nyasu <nyasu@osk.3web.ne.jp>
5
+ # Copyright 2002-2005 Nishikawa,Yasuhiro
6
+ #
7
+ # More information at http://vruby.sourceforge.net/index.html
8
+ #
9
+ ###################################
10
+
11
+ VR_DIR="vr/" unless defined?(::VR_DIR)
12
+ require VR_DIR+'vruby'
13
+
14
+ module VRTrayiconFeasible
15
+ =begin
16
+ == VRTrayiconFeasible
17
+ This modules is included to create/delete/modify tray icons.
18
+
19
+ === Methods
20
+ --- create_trayicon(icon=DEFAULTICON,tiptext="",icon_id=0)
21
+ Creates new trayicon in the tasktray.((|icon|)) is hIcon of the trayicon and
22
+ the trayicon has tooltip text ((|tiptext|)).
23
+ When argument ((|icon|)) is nil, icon will set as DEFAULTICON.
24
+ To distinguish multiple trayicon, ((|icon_id|)) information is added to it.
25
+ --- delete_trayicon(icon_id=0)
26
+ Deletes the trayicon specified by ((|icon_id|))
27
+ --- modify_trayicon(hicon,tiptext,iconid=0)
28
+ Modifies the trayicon's icon/tiptext.
29
+
30
+ === Event Handlers
31
+ --- self_traymousemove(icon_id)
32
+ Fired when mouse cursor is moved over the trayicon.
33
+ --- self_traylbuttondown(icon_id)
34
+ Fired when mouse left-button down on the trayicon.
35
+ --- self_traylbuttonup(icon_id)
36
+ Fired when mouse left-button up on the trayicon.
37
+ --- self_trayrbuttondown(icon_id)
38
+ Fired when mouse right-button down on the trayicon.
39
+ --- self_trayrbuttonup(icon_id)
40
+ Fired when mouse right-button up on the trayicon.
41
+ =end
42
+
43
+
44
+ include VRUserMessageUseable
45
+
46
+ Shell_NotifyIcon=Win32API.new("shell32","Shell_NotifyIcon","IP","I")
47
+
48
+ NOTIFYICONDATA_a = "IIIIII"
49
+ DEFAULTICON = Win32API.new("user32","LoadIcon","II","I").call(0,32512)
50
+
51
+ NIF_MESSAGE = 1
52
+ NIF_ICON = 2
53
+ NIF_TIP = 4
54
+ NIM_ADD = 0
55
+ NIM_MODIFY = 1
56
+ NIM_DELETE = 2
57
+
58
+ def vrinit
59
+ super
60
+ trayiconfeasibleinit
61
+ end
62
+
63
+ def trayiconfeasibleinit
64
+ @_vr_traynotify_msg = registerUserMessage(ReservedMsg::WM_VR_TRAYNOTIFY,"_vr_traynotify")
65
+ end
66
+
67
+ def create_trayicon(icon=DEFAULTICON,tiptext="",iconid=0)
68
+ icon = DEFAULTICON unless icon
69
+ tip = tiptext.to_s
70
+ s = [4*6+64,
71
+ self.hWnd,iconid,NIF_MESSAGE|NIF_ICON|NIF_TIP,
72
+ @_vr_traynotify_msg,icon ].pack(NOTIFYICONDATA_a) <<
73
+ tip << "\0"*(64-tip.length)
74
+ Shell_NotifyIcon.call(NIM_ADD,s)
75
+ end
76
+
77
+ def delete_trayicon(iconid=0)
78
+ s = [4*6+64,
79
+ self.hWnd,iconid,0,0,0].pack(NOTIFYICONDATA_a) << "\0"*64
80
+ Shell_NotifyIcon.call(NIM_DELETE,s)
81
+ end
82
+
83
+ def modify_trayicon(hicon,tiptext,iconid=0)
84
+ flag=0
85
+ if hicon then
86
+ flag |= NIF_ICON
87
+ end
88
+ if tiptext then
89
+ flag |= NIF_TIP
90
+ end
91
+ tip = tiptext.to_s
92
+ s = [4*6+64, self.hWnd,iconid,flag,0,hicon.to_i].pack(NOTIFYICONDATA_a) <<
93
+ tip << "\0"*(64-tip.length)
94
+ Shell_NotifyIcon.call(NIM_MODIFY,s)
95
+ end
96
+
97
+ def self__vr_traynotify(wparam,lparam)
98
+ case lparam
99
+ when WMsg::WM_MOUSEMOVE
100
+ selfmsg_dispatching("traymousemove",wparam)
101
+ when WMsg::WM_LBUTTONDOWN
102
+ selfmsg_dispatching("traylbuttondown",wparam)
103
+ when WMsg::WM_LBUTTONUP
104
+ selfmsg_dispatching("traylbuttonup",wparam)
105
+ when WMsg::WM_RBUTTONDOWN
106
+ selfmsg_dispatching("trayrbuttondown",wparam)
107
+ when WMsg::WM_RBUTTONUP
108
+ selfmsg_dispatching("trayrbuttonup",wparam)
109
+ end
110
+ end
111
+
112
+ end
113
+
114
+ module VRTasktraySensitive
115
+ =begin
116
+ == VRTasktraySensitive
117
+ This modules enables to sense the tasktray creation on restarting explorer.
118
+ The deleted tasktray icons can be created again using this module and writing
119
+ in its event handler how to do it.
120
+
121
+ === Event Handlers
122
+ --- self_taskbarcreated
123
+ Fired when the explorer restarts and creates its tasktray.
124
+ =end
125
+
126
+ RegisterWindowMessage = Win32API.new("user32","RegisterWindowMessage","P","L")
127
+
128
+ def vrinit
129
+ super
130
+ tasktraysensitive
131
+ end
132
+
133
+ def tasktraysensitive # coded by Katonbo-san
134
+ # get message ID of 'TaskbarCreated' message
135
+ id_taskbar_created = RegisterWindowMessage.call('TaskbarCreated')
136
+
137
+ # prepare 'TaskbarCreated' message handler
138
+ addHandler(id_taskbar_created, 'taskbarcreated', MSGTYPE::ARGNONE, nil)
139
+ addEvent(id_taskbar_created)
140
+ end
141
+ end
142
+
143
+