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,91 @@
1
+ require 'wrb'
2
+ require 'wrb/lzss'
3
+
4
+ module WR
5
+ module RC
6
+ IDC_ARROW = 32512
7
+ IDC_IBEAM = 32513
8
+ IDC_WAIT = 32514
9
+ IDC_CROSS = 32515
10
+ IDC_UPARROW = 32516
11
+ # IDC_SIZE = 32640 # not created
12
+ IDC_ICON = 32641
13
+ IDC_SIZENWSE = 32642
14
+ IDC_SIZENESW = 32643
15
+ IDC_SIZEWE = 32644
16
+ IDC_SIZENS = 32645
17
+ IDC_SIZEALL = 32646
18
+ IDC_NO = 32648
19
+ IDC_HAND = 32649
20
+ IDC_APPSTARTING = 32650
21
+ IDC_HELP = 32651
22
+ end
23
+
24
+ # A small picture whose location on the screen is controlled by a pointing device.
25
+ # <br>See also <a href="https://docs.microsoft.com/en-us/windows/desktop/menurc/resources">
26
+ # Menus and Other Resources section of Microsft Docs</a>
27
+ class Cursor < RWin::Cursor
28
+ include RC
29
+ attr_accessor :name
30
+
31
+ =begin
32
+ self.new(xhot, yhot, bmmask, bmcolor)
33
+ Creates a new cursor with the specified arguments.<br>
34
+ Give <i>xhot</i> and <i>yhot</i> as coordinates of hotspot.
35
+
36
+ following methods are defined at the super class.
37
+ :singleton_methods
38
+ self._load(str)
39
+ Loads from a string. Give a String as <i>str</i>.
40
+
41
+ :instance_methods
42
+ _dump()
43
+ Dumps self to a string for Marshal object.
44
+ _hcursor()
45
+ Retrieves a handle of self. Returns 32/64 bits integer as it.
46
+ dispose()
47
+ Disposes self from resource table and sets hicon to 0. Returns true/false.
48
+ to_bmps()
49
+ Creates new bitmap data from self. Returns an array of [bmmask, bmcolor, xHotspot, yHotspot].
50
+
51
+ =end
52
+
53
+ # Creates a new cursor by geven arguments. Args are typically name and string.
54
+ def self.[](*args)
55
+ if args.size == 1
56
+ self.fromfile(args[0])
57
+ else
58
+ self.new(*args)
59
+ end
60
+ end
61
+
62
+ # Creates a new sistem defined cursor.<br>
63
+ # Give an integer for id of system cursor such as <i>IDC_ARROW</i>, <i>IDC_WAIT</i> e.t.c.
64
+ def self.fromsystem(id)
65
+ raise TypeError, "argument must be Integer" unless id.is_a?(Integer)
66
+ self.fromfile(id)
67
+ end
68
+
69
+ # self.fromfile(name=nil, path)
70
+ # Loads from a cursor file. Give a String as <i>path</i> to cursor file.
71
+ def self.fromfile(*args)
72
+ nm = args.shift if args[0].is_a?(Symbol)
73
+ obj = super
74
+ obj.name = nm
75
+ obj
76
+ end
77
+
78
+ # Creates a new icon from a base64 encoded string. Give a String as <i>str</i>.
79
+ def self.loadb64(*args)
80
+ nm = args.shift if args[0].is_a?(Symbol)
81
+ obj = self._load(LZSS.expand(args[0].unpack('m')[0]))
82
+ obj.name = nm
83
+ obj
84
+ end
85
+
86
+ # Dumps self to a base64 encoded string with LZSS compression.
87
+ def dumpb64()
88
+ [LZSS.compress(self._dump)].pack('m')
89
+ end
90
+ end
91
+ end
@@ -0,0 +1,197 @@
1
+ require 'wrb'
2
+
3
+ module WR
4
+ module RC
5
+ DTM_FIRST = 0x1000
6
+ DTM_GETSYSTEMTIME = DTM_FIRST+1
7
+ DTM_SETSYSTEMTIME = DTM_FIRST+2
8
+ DTM_GETRANGE = DTM_FIRST+3
9
+ DTM_SETRANGE = DTM_FIRST+4
10
+ DTM_SETFORMATA = DTM_FIRST+5
11
+ DTM_SETFORMATW = DTM_FIRST+50
12
+ DTM_SETMCCOLOR = DTM_FIRST+6
13
+ DTM_GETMCCOLOR = DTM_FIRST+7
14
+ DTM_GETMONTHCAL = DTM_FIRST+8
15
+ DTM_SETMCFONT = DTM_FIRST+9
16
+ DTM_GETMCFONT = DTM_FIRST+10
17
+
18
+ DTN_FIRST = -760
19
+ DTN_DATETIMECHANGE = DTN_FIRST+1
20
+ DTN_USERSTRINGA = DTN_FIRST+2
21
+ DTN_USERSTRINGW = DTN_FIRST+15
22
+ DTN_WMKEYDOWNA = DTN_FIRST+3
23
+ DTN_WMKEYDOWNW = DTN_FIRST+16
24
+ DTN_FORMATA = DTN_FIRST+4
25
+ DTN_FORMATW = DTN_FIRST+17
26
+ DTN_FORMATQUERYA = DTN_FIRST+5
27
+ DTN_FORMATQUERYW = DTN_FIRST+18
28
+ DTN_DROPDOWN = DTN_FIRST+6
29
+ DTN_CLOSEUP = DTN_FIRST+7
30
+
31
+ DTS_UPDOWN = 0x1
32
+ DTS_SHOWNONE = 0x2
33
+ DTS_SHORTDATEFORMAT = 0x0
34
+ DTS_LONGDATEFORMAT = 0x4
35
+ DTS_SHORTDATECENTURYFORMAT = 0xc
36
+ DTS_TIMEFORMAT = 0x9
37
+ DTS_APPCANPARSE = 0x10
38
+ DTS_RIGHTALIGN = 0x20
39
+
40
+ if RWin::UNICODE
41
+ DTM_SETFORMAT = DTM_SETFORMATW
42
+
43
+ DTN_USERSTRING = DTN_USERSTRINGW
44
+ DTN_WMKEYDOWN = DTN_WMKEYDOWNW
45
+ DTN_FORMAT = DTN_FORMATW
46
+ DTN_FORMATQUERY = DTN_FORMATQUERYW
47
+ else
48
+ DTM_SETFORMAT = DTM_SETFORMATA
49
+
50
+ DTN_USERSTRING = DTN_USERSTRINGA
51
+ DTN_WMKEYDOWN = DTN_WMKEYDOWNA
52
+ DTN_FORMAT = DTN_FORMATA
53
+ DTN_FORMATQUERY = DTN_FORMATQUERYA
54
+ end
55
+
56
+ GDTR_MIN = 0x1
57
+ GDTR_MAX = 0x2
58
+
59
+ GDT_ERROR = -1
60
+ GDT_VALID = 0
61
+ GDT_NONE = 1
62
+ end
63
+
64
+ #This control provides a simple and intuitive interface through which to exchange date and time information with a user.
65
+ # <br>See also <a href="https://docs.microsoft.com/en-us/windows/desktop/Controls/
66
+ #window-controls">Windows Control section of Microsoft Docs.</a>
67
+ class DateTimePicker < WinControl #CommonControl
68
+
69
+ NMDATETIMECHANGE = API.defstruct "
70
+ NMHDR nmhdr;
71
+ DWORD dwFlags;
72
+ SYSTEMTIME st;"
73
+
74
+ NMDATETIMESTRING = API.defstruct "
75
+ NMHDR nmhdr;
76
+ LPCWSTR pszUserString;
77
+ SYSTEMTIME st;
78
+ DWORD dwFlags;"
79
+
80
+ NMDATETIMEWMKEYDOWN = API.defstruct "
81
+ NMHDR nmhdr;
82
+ int nVirtKey;
83
+ LPTSTR pszFormat;
84
+ SYSTEMTIME st;"
85
+
86
+ NMDATETIMEFORMAT = API.defstruct "
87
+ NMHDR nmhdr;
88
+ LPTSTR pszFormat;
89
+ SYSTEMTIME st;
90
+ LPTSTR pszDisplay;
91
+ TCHAR szDisplay[64];"
92
+
93
+ NMDATETIMEFORMATQUERY = API.defstruct "
94
+ NMHDR nmhdr;
95
+ LPTSTR pszFormat;
96
+ SIZE szMax;"
97
+
98
+ WinStyles = {
99
+ :updown => DTS_UPDOWN,
100
+ :shownone => DTS_SHOWNONE,
101
+ :shortdateformat => DTS_SHORTDATEFORMAT,
102
+ :longdateformat => DTS_LONGDATEFORMAT,
103
+ :shortdatecenturyformat => DTS_SHORTDATECENTURYFORMAT,
104
+ :timeformat => DTS_TIMEFORMAT,
105
+ :appcanparse => DTS_APPCANPARSE,
106
+ :rightalign => DTS_RIGHTALIGN
107
+ }
108
+ # def self.sym2style(*args) _sym2style(WinStyles, args); end
109
+
110
+ PreDefinedEvents = {
111
+ :datetimechange => [WM_NOTIFY, DTN_DATETIMECHANGE, 'xs', NMDATETIMECHANGE],
112
+ :userstring => [WM_NOTIFY, DTN_USERSTRING, 'xs', NMDATETIMESTRING],
113
+ :wmkeydowna => [WM_NOTIFY, DTN_WMKEYDOWN, 'xs', NMDATETIMEWMKEYDOWN],
114
+ :format => [WM_NOTIFY, DTN_FORMAT, 'xs', NMDATETIMEFORMAT],
115
+ :formatquery => [WM_NOTIFY, DTN_FORMATQUERY, 'xs', NMDATETIMEFORMATQUERY],
116
+ :dropdown => [WM_NOTIFY, DTN_DROPDOWN, 'xs', NMHDR],
117
+ :closeup => [WM_NOTIFY, DTN_CLOSEUP, 'xs', NMHDR]
118
+ }
119
+ DefaultEvents = []
120
+
121
+ def initialize(*args)
122
+ super
123
+ @_classname = "SysDateTimePick32"
124
+ end
125
+
126
+ #
127
+ def create()
128
+ super
129
+ self.format = @_format if @_format
130
+ end
131
+
132
+ # Sets the display of this DateTimePicker control based on a given format string.
133
+ def format=(str)
134
+ alive? ? SendMessage(DTM_SETFORMAT, 0, str) : @_format=str
135
+ end
136
+
137
+ #### Methods only for window alive. ####
138
+
139
+ # Closes month calender of this DateTimePicker control.
140
+ def closemonthcal()
141
+ SendMessage(DTM_CLOSEMONTHCAL, 0, 0)
142
+ end
143
+
144
+ # Gets the currently selected time from this DateTimePicker control and places it in a specified SYSTEMTIME structure.
145
+ def systemtime()
146
+ systime = SYSTEMTIME.new
147
+ SendMessage(DTM_GETSYSTEMTIME, 0, systime)
148
+ systime
149
+ end
150
+
151
+ StRange = API.defstruct "
152
+ SYSTEMTIME min;
153
+ SYSTEMTIME max;"
154
+
155
+ # Gets the current minimum and maximum allowable system times for this DateTimePicker control. <br>
156
+ # Returns array of two SYSTEMTIME structurs.
157
+ def range()
158
+ rng = StRange.new
159
+ SendMessage(DTM_GETRANGE, 0, rng)
160
+ [rng.min, rng.max]
161
+ end
162
+
163
+ # Sets the minimum and maximum allowable system times for this DateTimePicker control. <br>
164
+ # Give two SYSTEMTIME structurs as <i>min</i> and <i>max</i>.
165
+ def range=(min, max)
166
+ SendMessage(DTM_SETRANGE, GDTR_MIN, min)
167
+ SendMessage(DTM_SETRANGE, GDTR_MAX, max)
168
+ end
169
+
170
+ protected
171
+ def _apply_options(arg)
172
+ if st=WinStyles[arg]
173
+ self.style |= st
174
+ end
175
+ super
176
+ end
177
+ end # class DateTimePicker
178
+ end
179
+
180
+ module WR
181
+ class Form1 < Form
182
+ def initialize()
183
+ #GC.stress = true
184
+ resize 640, 480
185
+ self.font = Font['Meiyo', 14]
186
+ _<< Button[:button1, 'GetSystemTime', 10, 10, 120, 24]
187
+ _<< DateTimePicker.new(:datetime1, '', 140, 10, 200, 24, :parentfont)
188
+ end
189
+
190
+ def button1_clicked(*)
191
+ t = controls.datetime1.systemtime
192
+ dpp Time.mktime(t.wYear, t.wMonth, t.wDay, t.wHour, t.wMinute, t.wSecond)
193
+ end
194
+ end
195
+
196
+ Form1.start
197
+ end if __FILE__ == $0
@@ -0,0 +1,180 @@
1
+ #ddemlclient
2
+ require 'wrb/ddeml'
3
+
4
+ module WR
5
+
6
+ # A client interface for Dynamic Data Exchange.
7
+ class DdeClient < DDEML
8
+ def self.[](*args) self.new(*args); end
9
+
10
+ def initialize(*args)
11
+ @_owner = args.shift if args[0].is_a?(Window)
12
+ appname, topic, codepage, timeout = args
13
+ @_name = appname || raise(ArgumentError, "appname needed")
14
+ @_topic = topic || raise(ArgumentError, "topic needed")
15
+ @_codepage = codepage || CP_WINUNICODE
16
+ @_timeout = timeout || 1000
17
+ if @_owner && @_owner.alive?
18
+ create
19
+ if block_given?
20
+ connect()
21
+ yield self
22
+ disconnect()
23
+ end
24
+ end
25
+ end
26
+
27
+ def name()
28
+ @_name
29
+ end
30
+
31
+ def parent()
32
+ @_owner
33
+ end
34
+ def parent=(win)
35
+ @_owner = win
36
+ create if @_owner.alive?
37
+ end
38
+
39
+ def create()
40
+ @sescallback = lambda{|uType, uFmt, hconv, htopic, hservice, hdata, dwData1, dwData2|
41
+ dispatchXTYP(uType, uFmt, hconv, htopic, hservice, hdata, dwData1, dwData2)
42
+ }
43
+ idinst = IDINST.new
44
+ API.DdeInitialize(idinst, @sescallback, APPCMD_CLIENTONLY, 0)
45
+ @_idinst = idinst.value
46
+ @_hservice = str2h(@_name)
47
+ @_htopic = str2h(@_topic)
48
+ ObjectSpace.define_finalizer(self,
49
+ self.class.callback_finalizer(@_idinst, @_hservice, @_htopic))
50
+ end
51
+
52
+ private
53
+ def dispatchXTYP(uType, uFmt, hconv, htopic, hitem, hdata, dwData1, dwData2)
54
+ case uType
55
+ when XTYP_REGISTER
56
+ if @_owner.respond_to?("#{@_name}_register")
57
+ @_owner.__send__("#{@_name}_register", h2str(htopic), h2str(hitem))
58
+ end
59
+ when XTYP_DISCONNECT
60
+ if @_owner.respond_to?("#{@_name}_disconnect")
61
+ @_owner.__send__("#{@_name}_disconnect", h2str(htopic), h2str(hitem))
62
+ end
63
+ when XTYP_ADVDATA
64
+ if @_owner.respond_to?("#{@_name}_advdata")
65
+ @_owner.__send__("#{@_name}_advdata", h2str(htopic), h2str(hitem), h2data(hdata))
66
+ return DDE_FACK
67
+ end
68
+ else
69
+ #dp "@%#x", uType
70
+ end
71
+ 0
72
+ end
73
+
74
+ public
75
+ def connect() #; dpp appname, topic, @_codepage, @_idinst
76
+ @_hconv = API.DdeConnect(@_idinst, @_hservice, @_htopic, 0)
77
+ if @_hconv == 0
78
+ freestrhandle(@_htopic)
79
+ freestrhandle(@_hservice)
80
+ err = API.DdeGetLastError(@_idinst)
81
+ raise "#{DDEError[err] || 'DDEError: ' + err}"
82
+ end
83
+ self
84
+ end
85
+
86
+ def disconnect()
87
+ API.DdeDisconnect(@_hconv)
88
+ self
89
+ end
90
+
91
+ def execute(data)
92
+ API.DdeClientTransaction(data, data.size, @_hconv, 0, 0, XTYP_EXECUTE, @_timeout, nil)
93
+ end
94
+
95
+ def request(item)
96
+ hitem = str2h(item)
97
+ hdata = API.DdeClientTransaction(0, 0, @_hconv, hitem, CF_TEXT, XTYP_REQUEST, @_timeout, 0)
98
+ len = API.DdeGetData(hdata, nil, 0, 0)
99
+ result = API::BYTE[len]
100
+ API.DdeGetData(hdata, result, len, 0)
101
+ freestrhandle(hitem)
102
+ result.to_s
103
+ end
104
+
105
+ def poke(item, data)
106
+ hitem = str2h(item)
107
+ pdata = API::BYTE.alloc(data)
108
+ hdata = API.DdeClientTransaction(pdata, data.size, @_hconv, hitem, CF_TEXT,
109
+ XTYP_POKE, @_timeout, 0)
110
+ freedatahandle(hdata)
111
+ freestrhandle(hitem)
112
+ self
113
+ end
114
+
115
+ def advise(item, nodata=nil, ackreq=true)
116
+ hitem = str2h(item)
117
+ advstart = XTYP_ADVSTART | (nodata ? XTYPF_NODATA : 0) | (ackreq ? XTYPF_ACKREQ : 0)
118
+ accept = API.DdeClientTransaction(0, 0, @_hconv, hitem, 1, advstart, @_timeout,nil)
119
+ freestrhandle(hitem)
120
+ self
121
+ end
122
+
123
+ def unadvise(item)
124
+ hitem = str2h(item)
125
+ accept = API.DdeClientTransaction(0, 0, @_hconv, hitem, 1, XTYP_ADVSTOP, @_timeout, nil)
126
+ freestrhandle(hitem)
127
+ self
128
+ end
129
+ end
130
+ end
131
+
132
+ module WR
133
+ class MyForm < Form
134
+ def initialize()
135
+ resize 280, 210
136
+ _<< Button[:bt1, 'Excel', 0, 0, 100, 24]
137
+ _<< Button[:bt2, 'Mytopic', 100, 0, 100, 24]
138
+ _<< Button[:bt3, "Advise start", 0, 30,100, 24]
139
+ _<< Button[:bt4, "Advise stop", 100, 30,100, 24]
140
+ _<< DdeClient[:mytest, "mytopic1"]
141
+ end
142
+
143
+ def bt1_clicked(*)
144
+ DdeClient.new(self, 'Excel', 'Book1'){|dde|
145
+ p dde.request('R2C1').unpack('A*')[0]
146
+ dde.poke('R3C1', "Xyz")
147
+ }
148
+ end
149
+
150
+ def bt2_clicked(*)
151
+ dde = DdeClient.new(self, 'Mytest', 'Mytopic')
152
+ dde.connect
153
+ p dde.request('R2C1')
154
+ dde.poke('R3C1', "Xyz")
155
+ dde.disconnect()
156
+ end
157
+
158
+ def bt3_clicked(*)
159
+ # @dde = DdeClient.new(self, 'mytest', 'Mytopic')
160
+ # @dde.connect.advise('R1C1')
161
+ _.mytest.connect.advise('R1C1')
162
+ end
163
+
164
+ def bt4_clicked(*)
165
+ # @dde.unadvise('R1C1')
166
+ # @dde.disconnect
167
+ _.mytest.unadvise('R1C1')
168
+ _.mytest.disconnect
169
+ end
170
+
171
+ def mytest_advdata(topic, item, data)
172
+ dpp topic, item, data
173
+ end
174
+
175
+ def mytest_register(svname, instance)
176
+ dpp svname, instance
177
+ end
178
+ self.start
179
+ end
180
+ end if $0 == __FILE__