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.
- checksums.yaml +7 -0
- data/README +28 -0
- data/Rakefile +66 -0
- data/bin/wrb +41 -0
- data/bin/wrb.bat +6 -0
- data/ext/rwin/aatree.c +192 -0
- data/ext/rwin/aatree.h +55 -0
- data/ext/rwin/extconf.rb +47 -0
- data/ext/rwin/rw_api.c +2058 -0
- data/ext/rwin/rw_devices.c +215 -0
- data/ext/rwin/rw_gdiplus.h +278 -0
- data/ext/rwin/rw_graphics.c +1583 -0
- data/ext/rwin/rw_resources.c +1988 -0
- data/ext/rwin/rw_ubfuncs.c +281 -0
- data/ext/rwin/rw_windows.c +1936 -0
- data/ext/rwin/rwin.c +451 -0
- data/ext/rwin/rwin.h +442 -0
- data/lib/rwin.rb +820 -0
- data/lib/wrb.rb +20 -0
- data/lib/wrb/applications/frmdesigner/angle.cur +0 -0
- data/lib/wrb/applications/frmdesigner/angle2.cur +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Button.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Button.rb +34 -0
- data/lib/wrb/applications/frmdesigner/controls/Checkbox.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Checkbox.rb +10 -0
- data/lib/wrb/applications/frmdesigner/controls/Combobox.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Combobox.rb +88 -0
- data/lib/wrb/applications/frmdesigner/controls/ComboboxEx.rb +97 -0
- data/lib/wrb/applications/frmdesigner/controls/Comboboxex.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/DateTimePicker.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/DateTimePicker.rb +11 -0
- data/lib/wrb/applications/frmdesigner/controls/Edit.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Edit.rb +8 -0
- data/lib/wrb/applications/frmdesigner/controls/Groupbox.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Groupbox.rb +9 -0
- data/lib/wrb/applications/frmdesigner/controls/Hotkeyctrl.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Hotkeyctrl.rb +9 -0
- data/lib/wrb/applications/frmdesigner/controls/Imagelist.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Imagelist.rb +115 -0
- data/lib/wrb/applications/frmdesigner/controls/Listbox.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Listbox.rb +77 -0
- data/lib/wrb/applications/frmdesigner/controls/Listview.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Listview.rb +157 -0
- data/lib/wrb/applications/frmdesigner/controls/Menu.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Menu.rb +198 -0
- data/lib/wrb/applications/frmdesigner/controls/Menubar.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Menubar.rb +9 -0
- data/lib/wrb/applications/frmdesigner/controls/MonthCalender.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Monthcalender.rb +9 -0
- data/lib/wrb/applications/frmdesigner/controls/Panel.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Panel.rb +30 -0
- data/lib/wrb/applications/frmdesigner/controls/Progressbar.rb +10 -0
- data/lib/wrb/applications/frmdesigner/controls/Radiobutton.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Radiobutton.rb +13 -0
- data/lib/wrb/applications/frmdesigner/controls/Rebar.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Rebar.rb +162 -0
- data/lib/wrb/applications/frmdesigner/controls/Splitter.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Splitter.rb +66 -0
- data/lib/wrb/applications/frmdesigner/controls/Static.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Static.rb +9 -0
- data/lib/wrb/applications/frmdesigner/controls/Statusbar.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Statusbar.rb +103 -0
- data/lib/wrb/applications/frmdesigner/controls/Tabctrl.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Tabctrl.rb +136 -0
- data/lib/wrb/applications/frmdesigner/controls/Timer.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Timer.rb +36 -0
- data/lib/wrb/applications/frmdesigner/controls/Toolbar.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Toolbar.rb +165 -0
- data/lib/wrb/applications/frmdesigner/controls/Trackbar.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Trackbar.rb +34 -0
- data/lib/wrb/applications/frmdesigner/controls/Treeview.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Treeview.rb +107 -0
- data/lib/wrb/applications/frmdesigner/controls/Updown.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Updown.rb +31 -0
- data/lib/wrb/applications/frmdesigner/controls/default.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/progressbar.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/unselect.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/fddialogs.rb +87 -0
- data/lib/wrb/applications/frmdesigner/fdesign.rb +1315 -0
- data/lib/wrb/applications/frmdesigner/fdmodules.rb +1394 -0
- data/lib/wrb/applications/frmdesigner/fdparseform.rb +197 -0
- data/lib/wrb/applications/frmdesigner/img13.bmp +0 -0
- data/lib/wrb/base.rb +1294 -0
- data/lib/wrb/combocommon.rb +77 -0
- data/lib/wrb/commctrlconst.rb +139 -0
- data/lib/wrb/commdlg.rb +77 -0
- data/lib/wrb/components/animate.rb +114 -0
- data/lib/wrb/components/bitmap.rb +116 -0
- data/lib/wrb/components/button.rb +134 -0
- data/lib/wrb/components/canvas.rb +266 -0
- data/lib/wrb/components/checkbox.rb +118 -0
- data/lib/wrb/components/choosecolordlg.rb +87 -0
- data/lib/wrb/components/choosefontdlg.rb +142 -0
- data/lib/wrb/components/clipboard.rb +174 -0
- data/lib/wrb/components/combobox.rb +282 -0
- data/lib/wrb/components/comboboxex.rb +574 -0
- data/lib/wrb/components/cursor.rb +91 -0
- data/lib/wrb/components/datetimepicker.rb +197 -0
- data/lib/wrb/components/ddeclient.rb +180 -0
- data/lib/wrb/components/ddeserver.rb +131 -0
- data/lib/wrb/components/dialog.rb +228 -0
- data/lib/wrb/components/edit.rb +412 -0
- data/lib/wrb/components/font.rb +35 -0
- data/lib/wrb/components/form.rb +65 -0
- data/lib/wrb/components/groupbox.rb +122 -0
- data/lib/wrb/components/header.rb +479 -0
- data/lib/wrb/components/hotkeyctrl.rb +72 -0
- data/lib/wrb/components/icon.rb +109 -0
- data/lib/wrb/components/imagelist.rb +396 -0
- data/lib/wrb/components/inifile.rb +97 -0
- data/lib/wrb/components/listbox.rb +149 -0
- data/lib/wrb/components/listview.rb +1467 -0
- data/lib/wrb/components/menu.rb +592 -0
- data/lib/wrb/components/menubar.rb +84 -0
- data/lib/wrb/components/monthcalender.rb +164 -0
- data/lib/wrb/components/openfilenamedlg.rb +147 -0
- data/lib/wrb/components/pager.rb +199 -0
- data/lib/wrb/components/panel.rb +103 -0
- data/lib/wrb/components/picture.rb +55 -0
- data/lib/wrb/components/printdlg.rb +148 -0
- data/lib/wrb/components/printdlgex.rb +117 -0
- data/lib/wrb/components/printer.rb +97 -0
- data/lib/wrb/components/progressbar.rb +140 -0
- data/lib/wrb/components/radiobutton.rb +49 -0
- data/lib/wrb/components/rebar.rb +830 -0
- data/lib/wrb/components/registry.rb +408 -0
- data/lib/wrb/components/richedit.rb +1181 -0
- data/lib/wrb/components/savefilenamedlg.rb +27 -0
- data/lib/wrb/components/scintilla.rb +1298 -0
- data/lib/wrb/components/scrollbar.rb +239 -0
- data/lib/wrb/components/splitter.rb +494 -0
- data/lib/wrb/components/static.rb +198 -0
- data/lib/wrb/components/statusbar.rb +490 -0
- data/lib/wrb/components/tabctrl.rb +686 -0
- data/lib/wrb/components/timer.rb +117 -0
- data/lib/wrb/components/toolbar.rb +1107 -0
- data/lib/wrb/components/tooltip.rb +651 -0
- data/lib/wrb/components/trackbar.rb +298 -0
- data/lib/wrb/components/treeview.rb +845 -0
- data/lib/wrb/components/updown.rb +198 -0
- data/lib/wrb/ddeml.rb +241 -0
- data/lib/wrb/documents/animate.html +46 -0
- data/lib/wrb/documents/bitmap.html +69 -0
- data/lib/wrb/documents/button.html +78 -0
- data/lib/wrb/documents/canvas.html +137 -0
- data/lib/wrb/documents/checkbox.html +77 -0
- data/lib/wrb/documents/choosecolordlg.html +29 -0
- data/lib/wrb/documents/choosefontdlg.html +31 -0
- data/lib/wrb/documents/clipboard.html +31 -0
- data/lib/wrb/documents/combobox.html +117 -0
- data/lib/wrb/documents/comboboxex.html +139 -0
- data/lib/wrb/documents/control.html +53 -0
- data/lib/wrb/documents/cursor.html +45 -0
- data/lib/wrb/documents/datetimepicker.html +70 -0
- data/lib/wrb/documents/ddeclient.html +33 -0
- data/lib/wrb/documents/ddeserver.html +26 -0
- data/lib/wrb/documents/dialog.html +78 -0
- data/lib/wrb/documents/edit.html +169 -0
- data/lib/wrb/documents/empty.html +11 -0
- data/lib/wrb/documents/favicon.png +0 -0
- data/lib/wrb/documents/font.html +38 -0
- data/lib/wrb/documents/form.html +63 -0
- data/lib/wrb/documents/groupbox.html +57 -0
- data/lib/wrb/documents/header.html +85 -0
- data/lib/wrb/documents/hotkeyctrl.html +42 -0
- data/lib/wrb/documents/icon.html +45 -0
- data/lib/wrb/documents/imagelist.html +101 -0
- data/lib/wrb/documents/images/button.png +0 -0
- data/lib/wrb/documents/images/checkbox.png +0 -0
- data/lib/wrb/documents/images/combobox.png +0 -0
- data/lib/wrb/documents/images/comboboxex.png +0 -0
- data/lib/wrb/documents/images/datetimepicker.png +0 -0
- data/lib/wrb/documents/images/edit.png +0 -0
- data/lib/wrb/documents/images/groupbox.png +0 -0
- data/lib/wrb/documents/images/hotkeyctrl.png +0 -0
- data/lib/wrb/documents/images/listbox.png +0 -0
- data/lib/wrb/documents/images/listview.png +0 -0
- data/lib/wrb/documents/images/menu.png +0 -0
- data/lib/wrb/documents/images/menubar.png +0 -0
- data/lib/wrb/documents/images/monthcalender.png +0 -0
- data/lib/wrb/documents/images/progressbar.png +0 -0
- data/lib/wrb/documents/images/radiobutton.png +0 -0
- data/lib/wrb/documents/images/rebar.png +0 -0
- data/lib/wrb/documents/images/richedit.png +0 -0
- data/lib/wrb/documents/images/splitter.png +0 -0
- data/lib/wrb/documents/images/static.png +0 -0
- data/lib/wrb/documents/images/statusbar.png +0 -0
- data/lib/wrb/documents/images/tabctrl.png +0 -0
- data/lib/wrb/documents/images/toolbar.png +0 -0
- data/lib/wrb/documents/images/tooltip.png +0 -0
- data/lib/wrb/documents/images/trackbar.png +0 -0
- data/lib/wrb/documents/images/treeview.png +0 -0
- data/lib/wrb/documents/images/updown.png +0 -0
- data/lib/wrb/documents/index.html +155 -0
- data/lib/wrb/documents/inifile.html +36 -0
- data/lib/wrb/documents/license.txt +22 -0
- data/lib/wrb/documents/listbox.html +96 -0
- data/lib/wrb/documents/listview.html +277 -0
- data/lib/wrb/documents/make_doc.rb +596 -0
- data/lib/wrb/documents/menu.html +144 -0
- data/lib/wrb/documents/menubar.html +54 -0
- data/lib/wrb/documents/monthcalender.html +48 -0
- data/lib/wrb/documents/openfilenamedlg.html +36 -0
- data/lib/wrb/documents/pager.html +63 -0
- data/lib/wrb/documents/panel.html +32 -0
- data/lib/wrb/documents/picture.html +48 -0
- data/lib/wrb/documents/printdlg.html +35 -0
- data/lib/wrb/documents/printdlgex.html +35 -0
- data/lib/wrb/documents/printer.html +40 -0
- data/lib/wrb/documents/progressbar.html +69 -0
- data/lib/wrb/documents/radiobutton.html +51 -0
- data/lib/wrb/documents/rebar.html +143 -0
- data/lib/wrb/documents/registry.html +36 -0
- data/lib/wrb/documents/richedit.html +232 -0
- data/lib/wrb/documents/samples/editimg.bmp +0 -0
- data/lib/wrb/documents/samples/editimg.iml +0 -0
- data/lib/wrb/documents/samples/fileimg.bmp +0 -0
- data/lib/wrb/documents/samples/fileimg.iml +0 -0
- data/lib/wrb/documents/samples/sample_button.rb +21 -0
- data/lib/wrb/documents/samples/sample_checkbox.rb +18 -0
- data/lib/wrb/documents/samples/sample_combobox.rb +18 -0
- data/lib/wrb/documents/samples/sample_comboboxex.rb +23 -0
- data/lib/wrb/documents/samples/sample_datetimepicker.rb +11 -0
- data/lib/wrb/documents/samples/sample_edit.rb +25 -0
- data/lib/wrb/documents/samples/sample_groupbox.rb +19 -0
- data/lib/wrb/documents/samples/sample_hotkeyctrl.rb +12 -0
- data/lib/wrb/documents/samples/sample_listbox.rb +12 -0
- data/lib/wrb/documents/samples/sample_listview.rb +32 -0
- data/lib/wrb/documents/samples/sample_menu.rb +21 -0
- data/lib/wrb/documents/samples/sample_menubar.rb +23 -0
- data/lib/wrb/documents/samples/sample_monthcalender.rb +11 -0
- data/lib/wrb/documents/samples/sample_progressbar.rb +14 -0
- data/lib/wrb/documents/samples/sample_radiobutton.rb +14 -0
- data/lib/wrb/documents/samples/sample_rebar.rb +25 -0
- data/lib/wrb/documents/samples/sample_richedit.rb +60 -0
- data/lib/wrb/documents/samples/sample_splitter.rb +33 -0
- data/lib/wrb/documents/samples/sample_static.rb +15 -0
- data/lib/wrb/documents/samples/sample_statusbar.rb +17 -0
- data/lib/wrb/documents/samples/sample_tabctrl.rb +19 -0
- data/lib/wrb/documents/samples/sample_toolbar.rb +29 -0
- data/lib/wrb/documents/samples/sample_tooltip.rb +50 -0
- data/lib/wrb/documents/samples/sample_trackbar.rb +30 -0
- data/lib/wrb/documents/samples/sample_treeview.rb +19 -0
- data/lib/wrb/documents/samples/sample_updown.rb +18 -0
- data/lib/wrb/documents/samples/sampleimg16.iml +0 -0
- data/lib/wrb/documents/samples/sampleimg32.iml +0 -0
- data/lib/wrb/documents/samples/samplemg16.png +0 -0
- data/lib/wrb/documents/samples/samplemg32.png +0 -0
- data/lib/wrb/documents/samples/wrb.ico +0 -0
- data/lib/wrb/documents/savefilenamedlg.html +19 -0
- data/lib/wrb/documents/scrollbar.html +60 -0
- data/lib/wrb/documents/splitter.html +96 -0
- data/lib/wrb/documents/static.html +84 -0
- data/lib/wrb/documents/statusbar.html +110 -0
- data/lib/wrb/documents/tabctrl.html +151 -0
- data/lib/wrb/documents/timer.html +43 -0
- data/lib/wrb/documents/toolbar.html +181 -0
- data/lib/wrb/documents/tooltip.html +131 -0
- data/lib/wrb/documents/trackbar.html +107 -0
- data/lib/wrb/documents/treeview.html +210 -0
- data/lib/wrb/documents/updown.html +85 -0
- data/lib/wrb/documents/wincontrol.html +258 -0
- data/lib/wrb/documents/window.html +499 -0
- data/lib/wrb/documents/wrb.css +228 -0
- data/lib/wrb/gmem.rb +26 -0
- data/lib/wrb/imecommon.rb +59 -0
- data/lib/wrb/listcommon.rb +185 -0
- data/lib/wrb/lzss.rb +126 -0
- data/lib/wrb/scrollinfo.rb +142 -0
- data/lib/wrb/toplevelcommon.rb +634 -0
- 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__
|