wrb 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (271) hide show
  1. checksums.yaml +7 -0
  2. data/README +28 -0
  3. data/Rakefile +66 -0
  4. data/bin/wrb +41 -0
  5. data/bin/wrb.bat +6 -0
  6. data/ext/rwin/aatree.c +192 -0
  7. data/ext/rwin/aatree.h +55 -0
  8. data/ext/rwin/extconf.rb +47 -0
  9. data/ext/rwin/rw_api.c +2058 -0
  10. data/ext/rwin/rw_devices.c +215 -0
  11. data/ext/rwin/rw_gdiplus.h +278 -0
  12. data/ext/rwin/rw_graphics.c +1583 -0
  13. data/ext/rwin/rw_resources.c +1988 -0
  14. data/ext/rwin/rw_ubfuncs.c +281 -0
  15. data/ext/rwin/rw_windows.c +1936 -0
  16. data/ext/rwin/rwin.c +451 -0
  17. data/ext/rwin/rwin.h +442 -0
  18. data/lib/rwin.rb +820 -0
  19. data/lib/wrb.rb +20 -0
  20. data/lib/wrb/applications/frmdesigner/angle.cur +0 -0
  21. data/lib/wrb/applications/frmdesigner/angle2.cur +0 -0
  22. data/lib/wrb/applications/frmdesigner/controls/Button.bmp +0 -0
  23. data/lib/wrb/applications/frmdesigner/controls/Button.rb +34 -0
  24. data/lib/wrb/applications/frmdesigner/controls/Checkbox.bmp +0 -0
  25. data/lib/wrb/applications/frmdesigner/controls/Checkbox.rb +10 -0
  26. data/lib/wrb/applications/frmdesigner/controls/Combobox.bmp +0 -0
  27. data/lib/wrb/applications/frmdesigner/controls/Combobox.rb +88 -0
  28. data/lib/wrb/applications/frmdesigner/controls/ComboboxEx.rb +97 -0
  29. data/lib/wrb/applications/frmdesigner/controls/Comboboxex.bmp +0 -0
  30. data/lib/wrb/applications/frmdesigner/controls/DateTimePicker.bmp +0 -0
  31. data/lib/wrb/applications/frmdesigner/controls/DateTimePicker.rb +11 -0
  32. data/lib/wrb/applications/frmdesigner/controls/Edit.bmp +0 -0
  33. data/lib/wrb/applications/frmdesigner/controls/Edit.rb +8 -0
  34. data/lib/wrb/applications/frmdesigner/controls/Groupbox.bmp +0 -0
  35. data/lib/wrb/applications/frmdesigner/controls/Groupbox.rb +9 -0
  36. data/lib/wrb/applications/frmdesigner/controls/Hotkeyctrl.bmp +0 -0
  37. data/lib/wrb/applications/frmdesigner/controls/Hotkeyctrl.rb +9 -0
  38. data/lib/wrb/applications/frmdesigner/controls/Imagelist.bmp +0 -0
  39. data/lib/wrb/applications/frmdesigner/controls/Imagelist.rb +115 -0
  40. data/lib/wrb/applications/frmdesigner/controls/Listbox.bmp +0 -0
  41. data/lib/wrb/applications/frmdesigner/controls/Listbox.rb +77 -0
  42. data/lib/wrb/applications/frmdesigner/controls/Listview.bmp +0 -0
  43. data/lib/wrb/applications/frmdesigner/controls/Listview.rb +157 -0
  44. data/lib/wrb/applications/frmdesigner/controls/Menu.bmp +0 -0
  45. data/lib/wrb/applications/frmdesigner/controls/Menu.rb +198 -0
  46. data/lib/wrb/applications/frmdesigner/controls/Menubar.bmp +0 -0
  47. data/lib/wrb/applications/frmdesigner/controls/Menubar.rb +9 -0
  48. data/lib/wrb/applications/frmdesigner/controls/MonthCalender.bmp +0 -0
  49. data/lib/wrb/applications/frmdesigner/controls/Monthcalender.rb +9 -0
  50. data/lib/wrb/applications/frmdesigner/controls/Panel.bmp +0 -0
  51. data/lib/wrb/applications/frmdesigner/controls/Panel.rb +30 -0
  52. data/lib/wrb/applications/frmdesigner/controls/Progressbar.rb +10 -0
  53. data/lib/wrb/applications/frmdesigner/controls/Radiobutton.bmp +0 -0
  54. data/lib/wrb/applications/frmdesigner/controls/Radiobutton.rb +13 -0
  55. data/lib/wrb/applications/frmdesigner/controls/Rebar.bmp +0 -0
  56. data/lib/wrb/applications/frmdesigner/controls/Rebar.rb +162 -0
  57. data/lib/wrb/applications/frmdesigner/controls/Splitter.bmp +0 -0
  58. data/lib/wrb/applications/frmdesigner/controls/Splitter.rb +66 -0
  59. data/lib/wrb/applications/frmdesigner/controls/Static.bmp +0 -0
  60. data/lib/wrb/applications/frmdesigner/controls/Static.rb +9 -0
  61. data/lib/wrb/applications/frmdesigner/controls/Statusbar.bmp +0 -0
  62. data/lib/wrb/applications/frmdesigner/controls/Statusbar.rb +103 -0
  63. data/lib/wrb/applications/frmdesigner/controls/Tabctrl.bmp +0 -0
  64. data/lib/wrb/applications/frmdesigner/controls/Tabctrl.rb +136 -0
  65. data/lib/wrb/applications/frmdesigner/controls/Timer.bmp +0 -0
  66. data/lib/wrb/applications/frmdesigner/controls/Timer.rb +36 -0
  67. data/lib/wrb/applications/frmdesigner/controls/Toolbar.bmp +0 -0
  68. data/lib/wrb/applications/frmdesigner/controls/Toolbar.rb +165 -0
  69. data/lib/wrb/applications/frmdesigner/controls/Trackbar.bmp +0 -0
  70. data/lib/wrb/applications/frmdesigner/controls/Trackbar.rb +34 -0
  71. data/lib/wrb/applications/frmdesigner/controls/Treeview.bmp +0 -0
  72. data/lib/wrb/applications/frmdesigner/controls/Treeview.rb +107 -0
  73. data/lib/wrb/applications/frmdesigner/controls/Updown.bmp +0 -0
  74. data/lib/wrb/applications/frmdesigner/controls/Updown.rb +31 -0
  75. data/lib/wrb/applications/frmdesigner/controls/default.bmp +0 -0
  76. data/lib/wrb/applications/frmdesigner/controls/progressbar.bmp +0 -0
  77. data/lib/wrb/applications/frmdesigner/controls/unselect.bmp +0 -0
  78. data/lib/wrb/applications/frmdesigner/fddialogs.rb +87 -0
  79. data/lib/wrb/applications/frmdesigner/fdesign.rb +1315 -0
  80. data/lib/wrb/applications/frmdesigner/fdmodules.rb +1394 -0
  81. data/lib/wrb/applications/frmdesigner/fdparseform.rb +197 -0
  82. data/lib/wrb/applications/frmdesigner/img13.bmp +0 -0
  83. data/lib/wrb/base.rb +1294 -0
  84. data/lib/wrb/combocommon.rb +77 -0
  85. data/lib/wrb/commctrlconst.rb +139 -0
  86. data/lib/wrb/commdlg.rb +77 -0
  87. data/lib/wrb/components/animate.rb +114 -0
  88. data/lib/wrb/components/bitmap.rb +116 -0
  89. data/lib/wrb/components/button.rb +134 -0
  90. data/lib/wrb/components/canvas.rb +266 -0
  91. data/lib/wrb/components/checkbox.rb +118 -0
  92. data/lib/wrb/components/choosecolordlg.rb +87 -0
  93. data/lib/wrb/components/choosefontdlg.rb +142 -0
  94. data/lib/wrb/components/clipboard.rb +174 -0
  95. data/lib/wrb/components/combobox.rb +282 -0
  96. data/lib/wrb/components/comboboxex.rb +574 -0
  97. data/lib/wrb/components/cursor.rb +91 -0
  98. data/lib/wrb/components/datetimepicker.rb +197 -0
  99. data/lib/wrb/components/ddeclient.rb +180 -0
  100. data/lib/wrb/components/ddeserver.rb +131 -0
  101. data/lib/wrb/components/dialog.rb +228 -0
  102. data/lib/wrb/components/edit.rb +412 -0
  103. data/lib/wrb/components/font.rb +35 -0
  104. data/lib/wrb/components/form.rb +65 -0
  105. data/lib/wrb/components/groupbox.rb +122 -0
  106. data/lib/wrb/components/header.rb +479 -0
  107. data/lib/wrb/components/hotkeyctrl.rb +72 -0
  108. data/lib/wrb/components/icon.rb +109 -0
  109. data/lib/wrb/components/imagelist.rb +396 -0
  110. data/lib/wrb/components/inifile.rb +97 -0
  111. data/lib/wrb/components/listbox.rb +149 -0
  112. data/lib/wrb/components/listview.rb +1467 -0
  113. data/lib/wrb/components/menu.rb +592 -0
  114. data/lib/wrb/components/menubar.rb +84 -0
  115. data/lib/wrb/components/monthcalender.rb +164 -0
  116. data/lib/wrb/components/openfilenamedlg.rb +147 -0
  117. data/lib/wrb/components/pager.rb +199 -0
  118. data/lib/wrb/components/panel.rb +103 -0
  119. data/lib/wrb/components/picture.rb +55 -0
  120. data/lib/wrb/components/printdlg.rb +148 -0
  121. data/lib/wrb/components/printdlgex.rb +117 -0
  122. data/lib/wrb/components/printer.rb +97 -0
  123. data/lib/wrb/components/progressbar.rb +140 -0
  124. data/lib/wrb/components/radiobutton.rb +49 -0
  125. data/lib/wrb/components/rebar.rb +830 -0
  126. data/lib/wrb/components/registry.rb +408 -0
  127. data/lib/wrb/components/richedit.rb +1181 -0
  128. data/lib/wrb/components/savefilenamedlg.rb +27 -0
  129. data/lib/wrb/components/scintilla.rb +1298 -0
  130. data/lib/wrb/components/scrollbar.rb +239 -0
  131. data/lib/wrb/components/splitter.rb +494 -0
  132. data/lib/wrb/components/static.rb +198 -0
  133. data/lib/wrb/components/statusbar.rb +490 -0
  134. data/lib/wrb/components/tabctrl.rb +686 -0
  135. data/lib/wrb/components/timer.rb +117 -0
  136. data/lib/wrb/components/toolbar.rb +1107 -0
  137. data/lib/wrb/components/tooltip.rb +651 -0
  138. data/lib/wrb/components/trackbar.rb +298 -0
  139. data/lib/wrb/components/treeview.rb +845 -0
  140. data/lib/wrb/components/updown.rb +198 -0
  141. data/lib/wrb/ddeml.rb +241 -0
  142. data/lib/wrb/documents/animate.html +46 -0
  143. data/lib/wrb/documents/bitmap.html +69 -0
  144. data/lib/wrb/documents/button.html +78 -0
  145. data/lib/wrb/documents/canvas.html +137 -0
  146. data/lib/wrb/documents/checkbox.html +77 -0
  147. data/lib/wrb/documents/choosecolordlg.html +29 -0
  148. data/lib/wrb/documents/choosefontdlg.html +31 -0
  149. data/lib/wrb/documents/clipboard.html +31 -0
  150. data/lib/wrb/documents/combobox.html +117 -0
  151. data/lib/wrb/documents/comboboxex.html +139 -0
  152. data/lib/wrb/documents/control.html +53 -0
  153. data/lib/wrb/documents/cursor.html +45 -0
  154. data/lib/wrb/documents/datetimepicker.html +70 -0
  155. data/lib/wrb/documents/ddeclient.html +33 -0
  156. data/lib/wrb/documents/ddeserver.html +26 -0
  157. data/lib/wrb/documents/dialog.html +78 -0
  158. data/lib/wrb/documents/edit.html +169 -0
  159. data/lib/wrb/documents/empty.html +11 -0
  160. data/lib/wrb/documents/favicon.png +0 -0
  161. data/lib/wrb/documents/font.html +38 -0
  162. data/lib/wrb/documents/form.html +63 -0
  163. data/lib/wrb/documents/groupbox.html +57 -0
  164. data/lib/wrb/documents/header.html +85 -0
  165. data/lib/wrb/documents/hotkeyctrl.html +42 -0
  166. data/lib/wrb/documents/icon.html +45 -0
  167. data/lib/wrb/documents/imagelist.html +101 -0
  168. data/lib/wrb/documents/images/button.png +0 -0
  169. data/lib/wrb/documents/images/checkbox.png +0 -0
  170. data/lib/wrb/documents/images/combobox.png +0 -0
  171. data/lib/wrb/documents/images/comboboxex.png +0 -0
  172. data/lib/wrb/documents/images/datetimepicker.png +0 -0
  173. data/lib/wrb/documents/images/edit.png +0 -0
  174. data/lib/wrb/documents/images/groupbox.png +0 -0
  175. data/lib/wrb/documents/images/hotkeyctrl.png +0 -0
  176. data/lib/wrb/documents/images/listbox.png +0 -0
  177. data/lib/wrb/documents/images/listview.png +0 -0
  178. data/lib/wrb/documents/images/menu.png +0 -0
  179. data/lib/wrb/documents/images/menubar.png +0 -0
  180. data/lib/wrb/documents/images/monthcalender.png +0 -0
  181. data/lib/wrb/documents/images/progressbar.png +0 -0
  182. data/lib/wrb/documents/images/radiobutton.png +0 -0
  183. data/lib/wrb/documents/images/rebar.png +0 -0
  184. data/lib/wrb/documents/images/richedit.png +0 -0
  185. data/lib/wrb/documents/images/splitter.png +0 -0
  186. data/lib/wrb/documents/images/static.png +0 -0
  187. data/lib/wrb/documents/images/statusbar.png +0 -0
  188. data/lib/wrb/documents/images/tabctrl.png +0 -0
  189. data/lib/wrb/documents/images/toolbar.png +0 -0
  190. data/lib/wrb/documents/images/tooltip.png +0 -0
  191. data/lib/wrb/documents/images/trackbar.png +0 -0
  192. data/lib/wrb/documents/images/treeview.png +0 -0
  193. data/lib/wrb/documents/images/updown.png +0 -0
  194. data/lib/wrb/documents/index.html +155 -0
  195. data/lib/wrb/documents/inifile.html +36 -0
  196. data/lib/wrb/documents/license.txt +22 -0
  197. data/lib/wrb/documents/listbox.html +96 -0
  198. data/lib/wrb/documents/listview.html +277 -0
  199. data/lib/wrb/documents/make_doc.rb +596 -0
  200. data/lib/wrb/documents/menu.html +144 -0
  201. data/lib/wrb/documents/menubar.html +54 -0
  202. data/lib/wrb/documents/monthcalender.html +48 -0
  203. data/lib/wrb/documents/openfilenamedlg.html +36 -0
  204. data/lib/wrb/documents/pager.html +63 -0
  205. data/lib/wrb/documents/panel.html +32 -0
  206. data/lib/wrb/documents/picture.html +48 -0
  207. data/lib/wrb/documents/printdlg.html +35 -0
  208. data/lib/wrb/documents/printdlgex.html +35 -0
  209. data/lib/wrb/documents/printer.html +40 -0
  210. data/lib/wrb/documents/progressbar.html +69 -0
  211. data/lib/wrb/documents/radiobutton.html +51 -0
  212. data/lib/wrb/documents/rebar.html +143 -0
  213. data/lib/wrb/documents/registry.html +36 -0
  214. data/lib/wrb/documents/richedit.html +232 -0
  215. data/lib/wrb/documents/samples/editimg.bmp +0 -0
  216. data/lib/wrb/documents/samples/editimg.iml +0 -0
  217. data/lib/wrb/documents/samples/fileimg.bmp +0 -0
  218. data/lib/wrb/documents/samples/fileimg.iml +0 -0
  219. data/lib/wrb/documents/samples/sample_button.rb +21 -0
  220. data/lib/wrb/documents/samples/sample_checkbox.rb +18 -0
  221. data/lib/wrb/documents/samples/sample_combobox.rb +18 -0
  222. data/lib/wrb/documents/samples/sample_comboboxex.rb +23 -0
  223. data/lib/wrb/documents/samples/sample_datetimepicker.rb +11 -0
  224. data/lib/wrb/documents/samples/sample_edit.rb +25 -0
  225. data/lib/wrb/documents/samples/sample_groupbox.rb +19 -0
  226. data/lib/wrb/documents/samples/sample_hotkeyctrl.rb +12 -0
  227. data/lib/wrb/documents/samples/sample_listbox.rb +12 -0
  228. data/lib/wrb/documents/samples/sample_listview.rb +32 -0
  229. data/lib/wrb/documents/samples/sample_menu.rb +21 -0
  230. data/lib/wrb/documents/samples/sample_menubar.rb +23 -0
  231. data/lib/wrb/documents/samples/sample_monthcalender.rb +11 -0
  232. data/lib/wrb/documents/samples/sample_progressbar.rb +14 -0
  233. data/lib/wrb/documents/samples/sample_radiobutton.rb +14 -0
  234. data/lib/wrb/documents/samples/sample_rebar.rb +25 -0
  235. data/lib/wrb/documents/samples/sample_richedit.rb +60 -0
  236. data/lib/wrb/documents/samples/sample_splitter.rb +33 -0
  237. data/lib/wrb/documents/samples/sample_static.rb +15 -0
  238. data/lib/wrb/documents/samples/sample_statusbar.rb +17 -0
  239. data/lib/wrb/documents/samples/sample_tabctrl.rb +19 -0
  240. data/lib/wrb/documents/samples/sample_toolbar.rb +29 -0
  241. data/lib/wrb/documents/samples/sample_tooltip.rb +50 -0
  242. data/lib/wrb/documents/samples/sample_trackbar.rb +30 -0
  243. data/lib/wrb/documents/samples/sample_treeview.rb +19 -0
  244. data/lib/wrb/documents/samples/sample_updown.rb +18 -0
  245. data/lib/wrb/documents/samples/sampleimg16.iml +0 -0
  246. data/lib/wrb/documents/samples/sampleimg32.iml +0 -0
  247. data/lib/wrb/documents/samples/samplemg16.png +0 -0
  248. data/lib/wrb/documents/samples/samplemg32.png +0 -0
  249. data/lib/wrb/documents/samples/wrb.ico +0 -0
  250. data/lib/wrb/documents/savefilenamedlg.html +19 -0
  251. data/lib/wrb/documents/scrollbar.html +60 -0
  252. data/lib/wrb/documents/splitter.html +96 -0
  253. data/lib/wrb/documents/static.html +84 -0
  254. data/lib/wrb/documents/statusbar.html +110 -0
  255. data/lib/wrb/documents/tabctrl.html +151 -0
  256. data/lib/wrb/documents/timer.html +43 -0
  257. data/lib/wrb/documents/toolbar.html +181 -0
  258. data/lib/wrb/documents/tooltip.html +131 -0
  259. data/lib/wrb/documents/trackbar.html +107 -0
  260. data/lib/wrb/documents/treeview.html +210 -0
  261. data/lib/wrb/documents/updown.html +85 -0
  262. data/lib/wrb/documents/wincontrol.html +258 -0
  263. data/lib/wrb/documents/window.html +499 -0
  264. data/lib/wrb/documents/wrb.css +228 -0
  265. data/lib/wrb/gmem.rb +26 -0
  266. data/lib/wrb/imecommon.rb +59 -0
  267. data/lib/wrb/listcommon.rb +185 -0
  268. data/lib/wrb/lzss.rb +126 -0
  269. data/lib/wrb/scrollinfo.rb +142 -0
  270. data/lib/wrb/toplevelcommon.rb +634 -0
  271. metadata +315 -0
@@ -0,0 +1,84 @@
1
+
2
+ module WR
3
+ require_relative './menu' unless defined?(Menu)
4
+
5
+ # The main menu that is arranged at the top position of the window.<br>
6
+ # This is inherited all methods from Menu.
7
+ class Menubar < Menu
8
+
9
+ =begin
10
+ following methods are defined in the super class.
11
+ :singleton_methods
12
+ self.new(name, caption, menu-item_or_sub-menu, ... )
13
+ =end
14
+
15
+ # self.[](name, caption, menu-item_or_sub-menu, ... )
16
+ # Creates a menu but not alive with given arguments.<br>
17
+ # A <i>menu-item</i> must be a pair of name and caption, and <i>name</i> must be a symbol.
18
+ def self.[](*args)
19
+ self.new(*args)
20
+ end
21
+
22
+ # Creates and shows this menubar at the top position of the window.
23
+ def create()
24
+ createmenu()
25
+ _create_substance
26
+ @_parent.SetMenu(self) # SetMenu sends WM_SIZE to parent.
27
+ end
28
+ end
29
+ end
30
+
31
+
32
+ __END__
33
+ module WR
34
+ class MyForm < Form
35
+ def initialize()
36
+ resize 400, 300
37
+ _<< Menubar[:menubar1, Menu[:file, "File", :open, "Open", Menu[:recent, "Recent", :myfile, "myfile1", :myfile, "myfile2"], :sep, :close, "Close\tAlt+F4"], Menu[:edit, "Edit", :cut, "Cut\tCtrl+X", :copy, "Copy\tCtrl+C", :paste, "Paste\tCtrl+V"]]
38
+ _<< Button[:btn1, 'Test1', 0, 0, 80, 24]
39
+ _<< Button[:btn2, 'Test2', 80, 0, 80, 24]
40
+ end
41
+ def created()
42
+ dpp _menubar1.file1
43
+ end
44
+
45
+ def btn1_clicked(*)
46
+ _.menubar1._delete
47
+ end
48
+
49
+ def btn2_clicked(*)
50
+ _.menubar1.file._delete(2)
51
+ end
52
+
53
+ def cut_clicked(*args)
54
+ dpp args
55
+ end
56
+
57
+ self.start
58
+ end
59
+ end if __FILE__ == $0
60
+
61
+ __END__
62
+ module WR
63
+ class MyForm < Form
64
+ def initialize()
65
+ move 100, 500, 320, 240
66
+ _<< Menubar[:main, Menu[:file, "&File"], Menu[:edit, "Edit"], Menu[:help, "Help", MFT_RIGHTJUSTIFY]]
67
+ _.main.help.imagelist = Imagelist.loadb64 "JJMAIBAIAAwAAgACAACAAf7/f7/AsAYoBQkImnYAAAAACAIEAgRRAMAgQEAEEBQADAwCA2QEgQoAAAAAAAABANhAAAAICB6CAQEAc4BoQCwADAYDAACAgEiAH+AAA/4LoP9/wBzgIBALCEAMFH4MfwdfhD/CZ+FX8L34Z/w4fh5/EF+Iv8Sn4nfxTfiv/Fx+MH8ZX40/xufjl/Hd+Pf8gH5CfyJfkb/JJ+S38m1URJbGT18oxl2uJS/yqZgQfLHuDB8ue4MHwIMXcKH5lMguFD80iwXBB+EF83v51xgtYAAAAuIF86poEHwfdAAAihfPphdrtdw4foEwC12u4QYUGvoWfQ+8AAAhE0fUdkgEDR2sA0kDANHb6VI0vgpH/Sh+ln9MX6a/06fp9/TROpoT8P9Ts34PwBAQMfwEEgMaH6sZv4H1azf6HgEIw6vZudxgCsITngEI44DCPAD1mzfEEBKnw1rR"
68
+ #
69
+
70
+ _.main.file << [:open, "&Open\tCtrl+O", 1, :save, "&Save", 2, Menu[:recent, "&Recent"], :sep, :exit, "Exit", 5]
71
+ _.main.edit << [:cut, "Cut\tCtrl+X", 1, :copy, "Copy\tCtrl+C", :paste, "Paste\tCtrl+V"]
72
+ _.main.help << [:help1, "Help", 0, :version, "Version"]
73
+
74
+ _.main.file.imagelist = Imagelist.loadb64 "JJMAIBAwABAAAgACAACAAf7/f7/AsAYoBQkImnYAAAAACAIEAgRRAMAgQEAEEBQADAwCA2QEgQoAAAAAAAABANhAAAAICB6CAQEAc4BoQCwADAYDAACAgEiAH+AAA/4LoP9/wBzgIBALCEAMFH4MeghEIhEIhEAAFKqFcKqUEILgRDGF8QIBfT/f8CDwACH+iEQj4EBQQgggfAgCIOEEAX0qlUr4MHwQHVUCD4mAwgGgQfFPKEA0ED4ECQgPizzDA+MLcQAYkBxAPhQHEABARQPjlrBAIARYAhwAqosHgCMAMd8AVAfKMB8hJYEHyLPkffJQ+TF0f8kAAERIHGTOCIgEJARZHyxhgQAMxmMxmOAAAERAIQAQGEAECBEWg4EIoAAIuAQkCDUeuIIJo+AQkEDn3BBNFwCEggcv1xKpJHwCEgge+0ym5k4It9vt9PuZYMKDEev1+mU/NHCAQCqV8CDwAi32iEymEAkIBAIpVKqCBj4RCAjTgAEymQAmY14SqAmTDEYCAwMQgXw+J7JJlMplMpCfGE0U4EAwGBgUCgAWsJ/YAmBCMCAVVQIGAwVBEJvxQHxAEGEIIBwYinLFQxQFguh0iZohDIrGdRYLAEEEwBB/EAACFElG4iETR9R2SAQNHawDSQMA0dvpUjS+CmEVLUXAA0BAtJwANAAEAUxgcADQABgMeAABAo+Bx8FAgPBQQHwWED8GA3+/0BCVKp0MIRKoov9gAcAB8AB9gAeAQAPAAPgEEBwBAOCAwADAADgMEAQAAYEBVZAgUFAwWBwoXggGjBmgIJAg9+AF+H9gA9gBl/AB+D9gB9gDd/gF+AFgD9/ut/vN/AGtwDtf73f8AgA="
75
+
76
+ end
77
+
78
+ def created()
79
+ _.main.file.recent << [:recrntfile, "file1.rb", :recentfile, "file2.rb"]
80
+ end
81
+
82
+ self.start
83
+ end
84
+ end if $0 == __FILE__
@@ -0,0 +1,164 @@
1
+ require 'wrb'
2
+ require 'wrb/commctrlconst'
3
+
4
+ module WR
5
+ module RC
6
+ MCM_FIRST = 0x1000
7
+ MCM_GETCURSEL = MCM_FIRST+1
8
+ MCM_SETCURSEL = MCM_FIRST+2
9
+ MCM_GETMAXSELCOUNT = MCM_FIRST+3
10
+ MCM_SETMAXSELCOUNT = MCM_FIRST+4
11
+ MCM_GETSELRANGE = MCM_FIRST+5
12
+ MCM_SETSELRANGE = MCM_FIRST+6
13
+ MCM_GETMONTHRANGE = MCM_FIRST+7
14
+ MCM_SETDAYSTATE = MCM_FIRST+8
15
+ MCM_GETMINREQRECT = MCM_FIRST+9
16
+ MCM_SETCOLOR = MCM_FIRST+10
17
+ MCM_GETCOLOR = MCM_FIRST+11
18
+ MCM_SETTODAY = MCM_FIRST+12
19
+ MCM_GETTODAY = MCM_FIRST+13
20
+ MCM_HITTEST = MCM_FIRST+14
21
+ MCM_SETMCM_FIRSTDAYOFWEEK = MCM_FIRST+15
22
+ MCM_GETMCM_FIRSTDAYOFWEEK = MCM_FIRST+16
23
+ MCM_GETRANGE = MCM_FIRST+17
24
+ MCM_SETRANGE = MCM_FIRST+18
25
+ MCM_GETMONTHDELTA = MCM_FIRST+19
26
+ MCM_SETMONTHDELTA = MCM_FIRST+20
27
+ MCM_GETMAXTODAYWIDTH = MCM_FIRST+21
28
+ MCM_SETUNICODEFORMAT = CCM_SETUNICODEFORMAT
29
+ MCM_GETUNICODEFORMAT = CCM_GETUNICODEFORMAT
30
+
31
+ MCSC_BACKGROUND = 0
32
+ MCSC_TEXT = 1
33
+ MCSC_TITLEBK = 2
34
+ MCSC_TITLETEXT = 3
35
+ MCSC_MONTHBK = 4
36
+ MCSC_TRAILINGTEXT = 5
37
+
38
+ MCHT_TITLE = 0x10000
39
+ MCHT_CALENDAR = 0x20000
40
+ MCHT_TODAYLINK = 0x30000
41
+
42
+ MCHT_NEXT = 0x1000000
43
+ MCHT_PREV = 0x2000000
44
+
45
+ MCHT_NOWHERE = 0x0
46
+
47
+ MCHT_TITLEBK = MCHT_TITLE
48
+ MCHT_TITLEMONTH = MCHT_TITLE | 0x1
49
+ MCHT_TITLEYEAR = MCHT_TITLE | 0x2
50
+ MCHT_TITLEBTNNEXT = MCHT_TITLE | MCHT_NEXT | 0x3
51
+ MCHT_TITLEBTNPREV = MCHT_TITLE | MCHT_PREV | 0x3
52
+
53
+ MCHT_CALENDARBK = MCHT_CALENDAR
54
+ MCHT_CALENDARDATE = MCHT_CALENDAR | 0x1
55
+ MCHT_CALENDARDATENEXT = MCHT_CALENDARDATE | MCHT_NEXT
56
+ MCHT_CALENDARDATEPREV = MCHT_CALENDARDATE | MCHT_PREV
57
+ MCHT_CALENDARDAY = MCHT_CALENDAR | 0x2
58
+ MCHT_CALENDARWEEKNUM = MCHT_CALENDAR | 0x3
59
+
60
+ MCN_FIRST = -750
61
+ MCN_SELCHANGE = MCN_FIRST+1
62
+ MCN_GETDAYSTATE = MCN_FIRST+3
63
+ MCN_SELECT = MCN_FIRST+4
64
+
65
+ MCS_DAYSTATE = 0x1
66
+ MCS_MULTISELECT = 0x2
67
+ MCS_WEEKNUMBERS = 0x4
68
+ MCS_NOTODAYCIRCLE = 0x8
69
+ MCS_NOTODAY = 0x10
70
+
71
+ GMR_VISIBLE = 0
72
+ GMR_DAYSTATE = 1
73
+ end
74
+
75
+ # This control implements a calendar-like user interface.
76
+ # <br>See also <a href="https://docs.microsoft.com/en-us/windows/desktop/Controls/
77
+ # window-controls"> Windows Control section of Microsoft Docs.</a>
78
+ class Monthcalender < WinControl #CommonControl
79
+
80
+ MCHITTESTINFO= API.defstruct "
81
+ UINT cbSize;
82
+ POINT pt;
83
+ UINT uHit;
84
+ SYSTEMTIME st;"
85
+
86
+ NMSELCHANGE = API.defstruct "
87
+ NMHDR nmhdr;
88
+ SYSTEMTIME stSelStart;
89
+ SYSTEMTIME stSelEnd;"
90
+
91
+ API.typealias("MONTHDAYSTATE", "DWORD")
92
+ NMDAYSTATE = API.defstruct "
93
+ NMHDR nmhdr;
94
+ SYSTEMTIME stStart;
95
+ int cDayState;
96
+ MONTHDAYSTATE *prgDayState;"
97
+
98
+ WinStyle = {
99
+ :daystate => MCS_DAYSTATE,
100
+ :multiselect => MCS_MULTISELECT,
101
+ :weeknumbers => MCS_WEEKNUMBERS,
102
+ :notodaycircle => MCS_NOTODAYCIRCLE,
103
+ :notoday => MCS_NOTODAY
104
+ }
105
+
106
+ PreDefinedEvents = {
107
+ :SELCHANGE => [WM_NOTIFY, MCN_SELCHANGE, 'xs', NMSELCHANGE],
108
+ :GETDAYSTATE => [WM_NOTIFY, MCN_GETDAYSTATE, 'xs', NMDAYSTATE],
109
+ :SELECT => [WM_NOTIFY, MCN_SELECT, 'xs', NMSELCHANGE]
110
+ }
111
+ DefaultEvents = []
112
+
113
+ def initialize(*args)
114
+ super
115
+ @_classname = "SysMonthCal32"
116
+ @_acceptable_events = PreDefinedEvents.dup
117
+ end
118
+ #
119
+ def create()
120
+ super
121
+ end
122
+
123
+ #### Methods only for window alive.
124
+
125
+ # Retrieves the minimum size required to display a full month in this month calendar control.
126
+ def minrect()
127
+ rc = RECT.new
128
+ SendMessage(MCM_GETMINREQRECT, 0, rc)
129
+ rc
130
+ end
131
+
132
+ protected
133
+ def _apply_options(arg)
134
+ if st=WinStyles[arg]
135
+ self.style |= st
136
+ end
137
+ super
138
+ end
139
+ end
140
+ end
141
+
142
+ module WR
143
+ class Form1 < Form
144
+ def initialize()
145
+ controls.add Button.new(:bt1, 'Click Me', 200, 0, 80, 24)
146
+ controls.add Monthcalender.new(:mc1, '', 200, 200, 230, 190, :weeknumbers)
147
+ end
148
+
149
+ def created()
150
+ rc = controls.mc1.minrect
151
+ controls.mc1.move(rc.right, rc.bottom)
152
+ # controls.mc1.w = rc.right
153
+ # controls.mc1.h = rc.bottom
154
+ end
155
+
156
+ def bt1_clicked(*)
157
+ controls.mc1.move 0, 0
158
+ # controls.mc1.x = 0
159
+ # controls.mc1.y = 0
160
+ end
161
+ end
162
+
163
+ Form1.start
164
+ end if __FILE__ == $0
@@ -0,0 +1,147 @@
1
+ require 'wrb/commdlg'
2
+
3
+ module WR
4
+ OFN_READONLY = 0x1
5
+ OFN_OVERWRITEPROMPT = 0x2
6
+ OFN_HIDEREADONLY = 0x4
7
+ OFN_NOCHANGEDIR = 0x8
8
+ OFN_SHOWHELP = 0x10
9
+ OFN_ENABLEHOOK = 0x20
10
+ OFN_ENABLETEMPLATE = 0x40
11
+ OFN_ENABLETEMPLATEHANDLE = 0x80
12
+ OFN_NOVALIDATE = 0x100
13
+ OFN_ALLOWMULTISELECT = 0x200
14
+ OFN_EXTENSIONDIFFERENT = 0x400
15
+ OFN_PATHMUSTEXIST = 0x800
16
+ OFN_FILEMUSTEXIST = 0x1000
17
+ OFN_CREATEPROMPT = 0x2000
18
+ OFN_SHAREAWARE = 0x4000
19
+ OFN_NOREADONLYRETURN = 0x8000
20
+ OFN_NOTESTFILECREATE = 0x10000
21
+ OFN_NONETWORKBUTTON = 0x20000
22
+ OFN_NOLONGNAMES = 0x40000
23
+ OFN_EXPLORER = 0x80000
24
+ OFN_NODEREFERENCELINKS = 0x100000
25
+ OFN_LONGNAMES = 0x200000
26
+ OFN_ENABLEINCLUDENOTIFY = 0x400000
27
+ OFN_ENABLESIZING = 0x800000
28
+ OFN_DONTADDTORECENT = 0x2000000
29
+ OFN_FORCESHOWHIDDEN = 0x10000000
30
+ OFN_EX_NOPLACESBAR = 0x1
31
+ OFN_SHAREFALLTHROUGH = 2
32
+ OFN_SHARENOWARN = 1
33
+ OFN_SHAREWARN = 0
34
+
35
+ # A dialog box that lets the user specify the drive, directory, and the name of a file or set of files to open.
36
+ class OpenFileNameDlg < CommonDialog
37
+ API.typealias 'LPOFNHOOKPROC', 'Q'
38
+ OPENFILENAME = API.defstruct "
39
+ DWORD lStructSize;
40
+ HWND hwndOwner;
41
+ HINSTANCE hInstance;
42
+ LPCTSTR lpstrFilter;
43
+ LPTSTR lpstrCustomFilter;
44
+ DWORD nMaxCustFilter;
45
+ DWORD nFilterIndex;
46
+ LPTSTR lpstrFile;
47
+ DWORD nMaxFile;
48
+ LPTSTR lpstrFileTitle;
49
+ DWORD nMaxFileTitle;
50
+ LPCTSTR lpstrInitialDir;
51
+ LPCTSTR lpstrTitle;
52
+ DWORD Flags;
53
+ WORD nFileOffset;
54
+ WORD nFileExtension;
55
+ LPCTSTR lpstrDefExt;
56
+ LPARAM lCustData;
57
+ LPOFNHOOKPROC lpfnHook;
58
+ LPCTSTR lpTemplateName;
59
+ void *pvReserved;
60
+ DWORD dwReserved;
61
+ DWORD FlagsEx;"
62
+
63
+ API.defun 'GetOpenFileName(OPENFILENAME ofn)'
64
+
65
+ def self.show(owner=nil, caption: "", filter: "", flags: nil, initialdir: nil, filename: "")
66
+ ofn = self.new()
67
+ ofn.caption = caption
68
+ ofn.filter = filter
69
+ ofn.flags = flags || OFN_EXPLORER
70
+ ofn.initialdir = initialdir if initialdir
71
+ ofn.filename = filename
72
+ ofn.show(owner)
73
+ end
74
+
75
+ MAXFILENAME = 4096
76
+
77
+ def initialize()
78
+ @_openfilename = OPENFILENAME[OPENFILENAME::Size]
79
+ @buff = API::TCHAR[MAXFILENAME]
80
+ @_openfilename.lpstrFile = @buff
81
+ @_openfilename.nMaxFile = MAXFILENAME
82
+ end
83
+
84
+ def title()
85
+ @_openfilename.lpstrTitle
86
+ end
87
+ def title=(str)
88
+ @_openfilename.lpstrTitle = str
89
+ end
90
+ alias caption title
91
+ alias caption= title=
92
+
93
+ def filter()
94
+ @_openfilename.lpstrFilter
95
+ end
96
+ def filter=(*str)
97
+ @_openfilename.lpstrFilter = str.join("\0")
98
+ end
99
+
100
+ def filename=(str)
101
+ @_openfilename.lpstrFile[0] = str.to_s
102
+ end
103
+
104
+ def initialdir()
105
+ @_openfilename.lpstrInitialDir.to_s
106
+ end
107
+ def initialdir=(str)
108
+ @_openfilename.lpstrInitialDir = str.tr('/', '\\')
109
+ end
110
+
111
+ def flags()
112
+ @_openfilename.Flags
113
+ end
114
+ def flags=(f)
115
+ @_openfilename.Flags = f
116
+ end
117
+
118
+ def _openfilename()
119
+ @_openfilename
120
+ end
121
+
122
+ def show(owner=nil)
123
+ @_openfilename.hwndOwner = owner._hwnd if owner
124
+ r = API.getOpenFileName(@_openfilename)
125
+ return nil if r == 0
126
+ (@_openfilename.Flags & OFN_ALLOWMULTISELECT != 0) ? @buff.to_s.split("\0") : @buff.to_s
127
+ end
128
+ alias open show
129
+ end
130
+ end
131
+
132
+ module WR
133
+ require 'wrb'
134
+
135
+ class Myform < Form
136
+ def initialize()
137
+ _<< Button[:bt1, 'Click me', 0, 0, 80, 24]
138
+ end
139
+ def bt1_clicked(*)
140
+ dpp OpenFileNameDlg.show(self, caption: "Please select file",
141
+ flags: OFN_EXPLORER | OFN_ALLOWMULTISELECT,
142
+ initialdir: "c:\\Users",
143
+ filter: ["all(*.*)", "*.*", "ruby(*.rb?)", "*.rb?"])
144
+ end
145
+ self.start
146
+ end
147
+ end if $0 == __FILE__
@@ -0,0 +1,199 @@
1
+ require 'wrb'
2
+ require 'wrb/commctrlconst'
3
+
4
+ module WR
5
+ module RC
6
+ PGS_VERT = 0x0
7
+ PGS_HORZ = 0x1
8
+ PGS_AUTOSCROLL = 0x2
9
+ PGS_DRAGNDROP = 0x4
10
+
11
+ PGF_INVISIBLE = 0
12
+ PGF_NORMAL = 1
13
+ PGF_GRAYED = 2
14
+ PGF_DEPRESSED = 4
15
+ PGF_HOT = 8
16
+
17
+ PGB_TOPORLEFT = 0
18
+ PGB_BOTTOMORRIGHT = 1
19
+
20
+ PGM_FIRST = 0x1400
21
+ PGM_SETCHILD = PGM_FIRST+1
22
+ PGM_RECALCSIZE = PGM_FIRST+2
23
+ PGM_FORWARDMOUSE = PGM_FIRST+3
24
+ PGM_SETBKCOLOR = PGM_FIRST+4
25
+ PGM_GETBKCOLOR = PGM_FIRST+5
26
+ PGM_SETBORDER = PGM_FIRST+6
27
+ PGM_GETBORDER = PGM_FIRST+7
28
+ PGM_SETPOS = PGM_FIRST+8
29
+ PGM_GETPOS = PGM_FIRST+9
30
+ PGM_SETBUTTONSIZE = PGM_FIRST+10
31
+ PGM_GETBUTTONSIZE = PGM_FIRST+11
32
+ PGM_GETBUTTONSTATE = PGM_FIRST+12
33
+ PGM_GETDROPTARGET = CCM_GETDROPTARGET
34
+
35
+ PGN_FIRST = -900
36
+ PGN_SCROLL = PGN_FIRST-1
37
+ PGN_CALCSIZE = PGN_FIRST-2
38
+
39
+ PGF_SCROLLUP = 1
40
+ PGF_SCROLLDOWN = 2
41
+ PGF_SCROLLLEFT = 4
42
+ PGF_SCROLLRIGHT = 8
43
+
44
+ PGF_CALCWIDTH = 1
45
+ PGF_CALCHEIGHT = 2
46
+
47
+ PGK_SHIFT = 1
48
+ PGK_CONTROL = 2
49
+ PGK_MENU = 4
50
+ end
51
+
52
+ # This control is a window container that is used with a window that does not have enough display area to show all of its content.
53
+ # <br>See also <a href="https://docs.microsoft.com/en-us/windows/desktop/Controls/
54
+ # window-controls"> Windows Control section of Microsoft Docs.</a>
55
+ class Pager < WinControl
56
+ include ModCommCtrl
57
+ include RC
58
+
59
+ NMPGCALCSIZE = RWin::API.defstruct "
60
+ NMHDR hdr;
61
+ DWORD dwFlag;
62
+ int iWidth;
63
+ int iHeight;"
64
+
65
+ NMPGSCROLL = RWin::API.defstruct "
66
+ NMHDR hdr;
67
+ BOOL fwKeys;
68
+ RECT rcParent;
69
+ int iDir;
70
+ int iXpos;
71
+ int iYpos;
72
+ int iScroll;"
73
+
74
+ NMPGHOTITEM = RWin::API.defstruct "
75
+ NMHDR hdr;
76
+ int idOld;
77
+ int idNew;
78
+ DWORD dwFlags;"
79
+
80
+ WinStyles = {
81
+ :vert => ~PGS_HORZ,
82
+ :horz => PGS_HORZ,
83
+ :autoscroll => PGS_AUTOSCROLL,
84
+ :dragndrap => PGS_DRAGNDROP,
85
+ }
86
+
87
+ PreDefinedEvents = {
88
+ :scroll => [WM_NOTIFY, PGN_SCROLL, 'xs', NMPGSCROLL], # not work...
89
+ :calcsize => [WM_NOTIFY, PGN_CALCSIZE, 'xs', NMPGCALCSIZE]
90
+ }
91
+
92
+ # ( Nothing )
93
+ DefaultEvents = []
94
+
95
+ include ModParent
96
+
97
+ def initialize(*args)
98
+ self.style = PGS_HORZ
99
+ super
100
+ @_classname = "SysPager"
101
+ @_acceptable_events = PreDefinedEvents.dup
102
+ end
103
+ #
104
+ def create
105
+ super
106
+ @parent.register_event(itemid, WM_NOTIFY, PGN_CALCSIZE, "__calcsize__", 'xs', NMPGCALCSIZE, self)
107
+ self.child = @_child if @_child
108
+ self.bkcolor = @_bkcolor if @_bkcolor
109
+ self.border = @_border if @_border
110
+ self.buttonsize = @_buttonsize if @_buttonsize
111
+ end
112
+
113
+ # Sets the contained window for the pager control.<br>
114
+ # The argument can be both a control or an array of arguments for creating a control.
115
+ def child=(arg) #; dp "@%p", @controls # Write only attrebute
116
+ if alive?
117
+ raise "Already child was set." if @controls && !@controls.empty?
118
+ @controls = Controls.new(self, @parent)
119
+ win = @controls << arg
120
+ @idealwidth = win.w
121
+ @idealheight = win.h
122
+ SendMessage(PGM_SETCHILD, 0, win.hWnd)
123
+ else
124
+ @_child = arg
125
+ end
126
+ end
127
+ alias << child=
128
+
129
+ # Retrieves the current background color for this pager control.
130
+ def bkcolor()
131
+ alive? ? SendMessage(PGM_GETBKCOLOR , 0, 0) : @_bkcolor
132
+ end
133
+ # Sets the current background color for this pager control.
134
+ def bkcolor=(bc)
135
+ alive? ? SendMessage(PGM_SETBKCOLOR, 0, bc) : @_bkcolor = bc
136
+ end
137
+
138
+ # Retrieves the current border size for this pager control.
139
+ def border()
140
+ alive? ? SendMessage(PGM_GETBORDER, 0, 0) : @_border
141
+ end
142
+ # Sets the current border size for this pager control.
143
+ def border=(bd)
144
+ alive? ? SendMessage(PGM_SETBORDER, 0, bd) : @_border = bd
145
+ end
146
+
147
+ # Retrieves the current border size for this pager control.
148
+ def buttonsize()
149
+ alive? ? SendMessage(PGM_GETBUTTONSIZE, 0, 0) : @_buttonsize
150
+ end
151
+ # Sets the current button size for this pager control.
152
+ def buttonsize=(bt)
153
+ alive? ? SendMessage(PGM_SETBUTTONSIZE, 0, bt) : @_buttonsize = bt
154
+ end
155
+
156
+ # Gets an ideal width when this pager caluculates scrloable dimentions.
157
+ def idealwidth()
158
+ @idealwidth
159
+ end
160
+ # Sets an ideal width when this pager caluculates scrloable dimentions.
161
+ def idealwidth=(w)
162
+ @idealwidth = w
163
+ end
164
+
165
+ # Gets an ideal height when this pager caluculates scrloable dimentions.
166
+ def idealheight()
167
+ @idealheight
168
+ end
169
+ # Sets an ideal height when this pager caluculates scrloable dimentions.
170
+ def idealheight=(h)
171
+ @idealheight = h
172
+ end
173
+
174
+ ##### only when alive #####
175
+
176
+ # Retrieves the state of the specified button in this pager control.
177
+ def buttonstate()
178
+ SendMessage(PGM_GETBUTTONSTATE, 0, 0)
179
+ end
180
+
181
+ protected
182
+ def _apply_options(arg)
183
+ if st = WinStyles[arg]
184
+ st < 0 ? self.style &= st : self.style |= st
185
+ return nil
186
+ end
187
+ super
188
+ end
189
+
190
+ private
191
+ def __calcsize__(calcsize)
192
+ if (calcsize.dwFlag & PGF_CALCWIDTH) != 0
193
+ calcsize.iWidth = @idealwidth.to_i
194
+ elsif (calcsize.dwFlag & PGF_CALCHEIGHT) != 0
195
+ calcsize.iHeight = @idealheight.to_i
196
+ end
197
+ end
198
+ end
199
+ end