wrb 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
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__