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