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,131 @@
|
|
|
1
|
+
#ddemlserver
|
|
2
|
+
require 'wrb/ddeml'
|
|
3
|
+
|
|
4
|
+
module WR
|
|
5
|
+
|
|
6
|
+
# Provides Dynamic Data Exchange server.
|
|
7
|
+
class DdeServer < 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
|
+
@_appname = appname || raise(ArgumentError, "appname needed")
|
|
14
|
+
@_topic = topic || raise(ArgumentError, "topic needed")
|
|
15
|
+
@_codepage = codepage || CP_WINUNICODE
|
|
16
|
+
@__adv_value__ = {}
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def name
|
|
20
|
+
@_appname
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def parent()
|
|
24
|
+
@_owner
|
|
25
|
+
end
|
|
26
|
+
def parent=(win)
|
|
27
|
+
@_owner = win
|
|
28
|
+
create if @_owner.alive?
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def create() # will be called from owner window.
|
|
32
|
+
@sescallback = lambda{|uType, uFmt, hconv, htopic, hservice, hdata, dwData1, dwData2|
|
|
33
|
+
dispatchXTYP(uType, uFmt, hconv, htopic, hservice, hdata, dwData1, dwData2)
|
|
34
|
+
}
|
|
35
|
+
idinst = IDINST.new
|
|
36
|
+
API.DdeInitialize(idinst, @sescallback, APPCLASS_STANDARD | CBF_SKIP_ALLNOTIFICATIONS, 0)
|
|
37
|
+
@_idinst = idinst.value
|
|
38
|
+
@_hservice = str2h(@_appname.to_s)
|
|
39
|
+
@_htopic = str2h(@_topic)
|
|
40
|
+
API.DdeNameService(@_idinst, @_hservice, 0, DNS_REGISTER)
|
|
41
|
+
ObjectSpace.define_finalizer(self,
|
|
42
|
+
self.class.callback_finalizer(@_idinst, @_hservice, @_htopic))
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def post_advise(topic, item)
|
|
46
|
+
API.DdePostAdvise(@_idinst, str2h(topic), str2h(item));
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
private
|
|
50
|
+
def dispatchXTYP(uType, uFmt, hconv, htopic, hitem, hdata, dwData1, dwData2)
|
|
51
|
+
case uType
|
|
52
|
+
when XTYP_CONNECT
|
|
53
|
+
return hitem==@_hservice && htopic==@_htopic ? 1 : 0
|
|
54
|
+
when XTYP_REQUEST
|
|
55
|
+
if @_owner.respond_to?("#{@_appname}_request")
|
|
56
|
+
s = @_owner.__send__("#{@_appname}_request", h2str(htopic), h2str(hitem))
|
|
57
|
+
return data2h(hitem, s)
|
|
58
|
+
end
|
|
59
|
+
when XTYP_POKE
|
|
60
|
+
if @_owner.respond_to?("#{@_appname}_poke")
|
|
61
|
+
@_owner.__send__("#{@_appname}_poke", h2str(htopic), h2str(hitem), h2data(hdata))
|
|
62
|
+
return DDE_FACK
|
|
63
|
+
end
|
|
64
|
+
when XTYP_EXECUTE
|
|
65
|
+
if @_owner.respond_to?("#{@_appname}_execute")
|
|
66
|
+
@_owner.__send__("#{@_appname}_execute", h2str(htopic), h2str(hitem), h2data(hdata))
|
|
67
|
+
return DDE_FACK
|
|
68
|
+
end
|
|
69
|
+
when XTYP_ADVSTART
|
|
70
|
+
if @_owner.respond_to?("#{@_appname}_advstart")
|
|
71
|
+
@_owner.__send__("#{@_appname}_advstart", h2str(htopic), h2str(hitem))
|
|
72
|
+
return DDE_FACK
|
|
73
|
+
end
|
|
74
|
+
when XTYP_ADVREQ
|
|
75
|
+
if @_owner.respond_to?("#{@_appname}_advreq")
|
|
76
|
+
data = @_owner.__send__("#{@_appname}_advreq", h2str(htopic), h2str(hitem))
|
|
77
|
+
return data2h(hitem, data) # Data will be automatically free when returned.
|
|
78
|
+
end
|
|
79
|
+
when XTYP_ADVSTOP
|
|
80
|
+
if @_owner.respond_to?("#{@_appname}_advstop")
|
|
81
|
+
@_owner.__send__("#{@_appname}_advstop", h2str(htopic), h2str(hitem))
|
|
82
|
+
return DDE_FACK
|
|
83
|
+
end
|
|
84
|
+
else
|
|
85
|
+
# dp "@%#x", uType
|
|
86
|
+
end
|
|
87
|
+
return 0
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
module WR
|
|
94
|
+
class MyForm < Form
|
|
95
|
+
def initialize()
|
|
96
|
+
resize 280, 210
|
|
97
|
+
self.caption = "DDEServer"
|
|
98
|
+
_<< Button[:bt1, "Advise", 0, 0, 100, 24]
|
|
99
|
+
_<< DdeServer[:mytest, "Mytopic"]
|
|
100
|
+
_<< DdeServer[:mytest, "Mytopic1"]
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def mytest_advstart(topic, item)
|
|
104
|
+
_.bt1.caption = "Advise start"
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def mytest_advstop(topic, item)
|
|
108
|
+
_.bt1.caption = "Advise stop"
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def bt1_clicked(*)
|
|
112
|
+
_.mytest[1].post_advise('Mytopic1', 'R1C1')
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
def mytest_advreq(topic, item)#; dpp topic, item
|
|
116
|
+
'ABC123'
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
def mytest_request(topic, item) #; dpp topic, item
|
|
120
|
+
"request: #{topic}, #{item}"
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
def mytest_poke(topic, item, data)
|
|
124
|
+
dpp topic, item, data
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
self.start
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
end if $0 == __FILE__
|
|
131
|
+
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
require 'wrb/toplevelcommon'
|
|
2
|
+
|
|
3
|
+
module WR
|
|
4
|
+
module RC
|
|
5
|
+
# DS_ABSALIGN = 0x01
|
|
6
|
+
DS_SYSMODAL = 0x02
|
|
7
|
+
# DS_LOCALEDIT = 0x20
|
|
8
|
+
# DS_SETFONT = 0x40
|
|
9
|
+
# DS_MODALFRAME = 0x80
|
|
10
|
+
DS_NOIDLEMSG = 0x100
|
|
11
|
+
DS_SETFOREGROUND = 0x200
|
|
12
|
+
|
|
13
|
+
# DS_3DLOOK = 0x0004
|
|
14
|
+
# DS_FIXEDSYS = 0x0008
|
|
15
|
+
# DS_NOFAILCREATE = 0x0010
|
|
16
|
+
DS_CONTROL = 0x0400
|
|
17
|
+
DS_CENTER = 0x0800
|
|
18
|
+
DS_CENTERMOUSE = 0x1000
|
|
19
|
+
DS_CONTEXTHELP = 0x2000
|
|
20
|
+
# DS_SHELLFONT = (DS_SETFONT | DS_FIXEDSYS)
|
|
21
|
+
DS_USEPIXELS = 0x8000
|
|
22
|
+
|
|
23
|
+
WM_INITDIALOG = 0x0110 unless defined? WM_INITDIALOG
|
|
24
|
+
|
|
25
|
+
IDOK = 1
|
|
26
|
+
IDCANCEL = 2
|
|
27
|
+
IDABORT = 3
|
|
28
|
+
IDRETRY = 4
|
|
29
|
+
IDIGNORE = 5
|
|
30
|
+
IDYES = 6
|
|
31
|
+
IDNO = 7
|
|
32
|
+
IDCLOSE = 8
|
|
33
|
+
IDHELP = DLGMAX_ID = 9
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# The dialog box that is also a container of controls.
|
|
37
|
+
# <br>See also <a href="https://docs.microsoft.com/en-us/windows/desktop/api/
|
|
38
|
+
# _dlgbox/index"> Dialog Boxes section of Microsoft Docs.</a>
|
|
39
|
+
class Dialog < RWin::Dialog
|
|
40
|
+
include RC
|
|
41
|
+
|
|
42
|
+
WinStyles = {
|
|
43
|
+
:sysmodal => DS_SYSMODAL,
|
|
44
|
+
:contexthelp => DS_CONTEXTHELP
|
|
45
|
+
}.update ModToplevelWin::WinStyles
|
|
46
|
+
|
|
47
|
+
module ModDlgButton
|
|
48
|
+
include RC
|
|
49
|
+
def self.extended(obj)
|
|
50
|
+
obj.set_as_button
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def set_as_button()
|
|
54
|
+
@__unplocessed.each{|i|
|
|
55
|
+
id = nil
|
|
56
|
+
case i
|
|
57
|
+
when :idok
|
|
58
|
+
id = IDOK
|
|
59
|
+
when :idcancel
|
|
60
|
+
id = IDCANCEL
|
|
61
|
+
end
|
|
62
|
+
if id
|
|
63
|
+
parent.unregister_event(id, WM_COMMAND, BN_CLICKED)
|
|
64
|
+
self.idcmd = id
|
|
65
|
+
parent.register_event(id, WM_COMMAND, BN_CLICKED, "#{name}_clicked")
|
|
66
|
+
end
|
|
67
|
+
}
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
alias __create__ create
|
|
72
|
+
|
|
73
|
+
include ModToplevelWin, ModBaseWin, ModAutoloading
|
|
74
|
+
|
|
75
|
+
DefaultDlgSize = [400, 300]
|
|
76
|
+
DefaultWindowStyle = WS_POPUP | WS_BORDER | WS_SYSMENU | WS_CAPTION
|
|
77
|
+
|
|
78
|
+
API.defun "GetWindowRect(hWnd, pRect)"
|
|
79
|
+
API.defun "GetDesktopWindow()"
|
|
80
|
+
|
|
81
|
+
# Creates and show as modal dialog box.<br>
|
|
82
|
+
# If given nil as <i>parent</i>, creates as top level dialog box.
|
|
83
|
+
def self.open_modal(parent, arg=nil)
|
|
84
|
+
self.new.create(parent, true, arg)
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
# Creates and show as modeless dialog box.<br>
|
|
88
|
+
# If given nil as <i>parent</i>, creates as top level dialog box.
|
|
89
|
+
def self.open_modeless(parent, arg=nil)
|
|
90
|
+
self.new.create(parent, false, arg)
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
#
|
|
94
|
+
def create(owner=nil, modal=nil, arg=nil)
|
|
95
|
+
register_event(WM_INITDIALOG, "__initdialog__")
|
|
96
|
+
register_event(WM_GETFONT, "__getfont__")
|
|
97
|
+
register_event(WM_SIZE, "__resize__", "xh")
|
|
98
|
+
class << self.controls
|
|
99
|
+
def <<(args)
|
|
100
|
+
obj = super
|
|
101
|
+
obj.extend ModDlgButton if obj.is_a? Button
|
|
102
|
+
obj
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
self.controls.each{|i|
|
|
106
|
+
i.extend ModDlgButton if i.is_a? Button
|
|
107
|
+
}
|
|
108
|
+
@owner = owner
|
|
109
|
+
__create__(owner, modal, @_style, @_exstyle, arg)
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
# move_center([target=nil[, x, y])
|
|
113
|
+
# Moves this dialog to center of specified arguments.
|
|
114
|
+
def move_center(*args)
|
|
115
|
+
case args.size
|
|
116
|
+
when 0
|
|
117
|
+
target = @owner
|
|
118
|
+
w0, h0 = self.windowsize
|
|
119
|
+
when 1
|
|
120
|
+
target = args[0]
|
|
121
|
+
w0, h0 = self.windowsize
|
|
122
|
+
when 2
|
|
123
|
+
target = @owner
|
|
124
|
+
w0, h0 = args
|
|
125
|
+
when 3
|
|
126
|
+
target, w0, h0 = args
|
|
127
|
+
else
|
|
128
|
+
raise ArgumentError, "num of arguments must be 0..3", caller(1)
|
|
129
|
+
end
|
|
130
|
+
target = RWin::Application.getDesktop unless target
|
|
131
|
+
x1, y1, w1, h1 = target.windowrect
|
|
132
|
+
x = x1 + w1 / 2 - w0 / 2
|
|
133
|
+
y = y1 + h1 / 2 - h0 / 2
|
|
134
|
+
self.move(x, y, w0, h0)
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
#
|
|
138
|
+
def inspect()
|
|
139
|
+
"#<#{self.class}:#{self.__id__}>"
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
#
|
|
143
|
+
def style=(st)
|
|
144
|
+
st&DS_CONTEXTHELP > 0 ? self.exstyle|=WS_EX_CONTEXTHELP : self.exstyle&=~WS_EX_CONTEXTHELP
|
|
145
|
+
super
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
private
|
|
149
|
+
def __initdialog__()
|
|
150
|
+
self.icon = @_icon if @_icon
|
|
151
|
+
self.transparency = @_transparency if @_transparency
|
|
152
|
+
self.transparentcolor = @_transparentcolor if @_transparentcolor
|
|
153
|
+
self.caption = @_caption.to_s
|
|
154
|
+
w, h = @_w && @_h ? [@_w, @_h] : DefaultDlgSize
|
|
155
|
+
if @_x && @_y
|
|
156
|
+
x, y = @_x, @_y
|
|
157
|
+
elsif @owner
|
|
158
|
+
ox, oy = @owner.screenpos
|
|
159
|
+
ow, oh = @owner.windowsize
|
|
160
|
+
x, y = ox + (ow - w)/2, oy + (oh - h)/2
|
|
161
|
+
else
|
|
162
|
+
rc = RECT.new
|
|
163
|
+
API.GetWindowRect(API.GetDesktopWindow(), rc)
|
|
164
|
+
x1, y1, w1, h1 = rc.to_a
|
|
165
|
+
x = x1 + w1 / 2 - w / 2
|
|
166
|
+
y = y1 + h1 / 2 - h / 2
|
|
167
|
+
end
|
|
168
|
+
self.move(x, y, w, h)
|
|
169
|
+
controls._create
|
|
170
|
+
self.inheritfont = @_inheritfont if @_inheritfont
|
|
171
|
+
__send__(:opened, self.param) if respond_to?(:opened)
|
|
172
|
+
end
|
|
173
|
+
end
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
module WR
|
|
177
|
+
class MyDialog < Dialog
|
|
178
|
+
def initialize()
|
|
179
|
+
self.style |= WS_THICKFRAME | DS_SYSMODAL
|
|
180
|
+
self.inheritfont = 'Meiryo', -12, 'i'
|
|
181
|
+
resize 240, 180
|
|
182
|
+
controls << Button[:dlgbtn1, "OK", 10,0,100,24, :tabstop, :idcmd=>IDOK, :margin=>[nil,nil,0,10]]
|
|
183
|
+
controls << Button[:dlgbtn2, "Cancel", 110,0,100, 24, :tabstop, :idcancel]
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
def opened(arg)
|
|
187
|
+
self.style |= DS_CONTEXTHELP
|
|
188
|
+
self.caption = arg
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
def dlgbtn1_clicked(*)
|
|
192
|
+
close 100
|
|
193
|
+
end
|
|
194
|
+
def dlgbtn2_clicked(*)
|
|
195
|
+
close nil
|
|
196
|
+
end
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
class MyForm < Dialog
|
|
200
|
+
# class MyForm < Form
|
|
201
|
+
def initialize()
|
|
202
|
+
self.inheritfont = 'Meiryo', -12, 'b', :force
|
|
203
|
+
self.style |= WS_THICKFRAME
|
|
204
|
+
_<< Button[:bt1, "Modal", 0, 0, 100, 30, :idok]
|
|
205
|
+
_<< Button[:bt2, "Modeless", 100, 0, 100, 30, :idcmd=>IDCANCEL]
|
|
206
|
+
#_<< Button[:bt3, "Exit", 0, 50, 100, 30]
|
|
207
|
+
end
|
|
208
|
+
|
|
209
|
+
def opened(arg) # for dialog
|
|
210
|
+
_<< Button[:bt3, "Exit", 0, 50, 100, 30]
|
|
211
|
+
end
|
|
212
|
+
def created() # for form
|
|
213
|
+
_<< Button[:bt3, "Exit", 0, 50, 100, 30]
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
def bt1_clicked(*)
|
|
217
|
+
dpp MyDialog.open_modal(self, 'Modal dialog')
|
|
218
|
+
end
|
|
219
|
+
def bt2_clicked(*)
|
|
220
|
+
MyDialog.open_modeless(self, 'Modeless dialog')
|
|
221
|
+
end
|
|
222
|
+
def bt3_clicked(*)
|
|
223
|
+
APP.quit!
|
|
224
|
+
end
|
|
225
|
+
|
|
226
|
+
self.start # Wrapper of RW::Windows.automsgloop
|
|
227
|
+
end
|
|
228
|
+
end if __FILE__ == $0
|
|
@@ -0,0 +1,412 @@
|
|
|
1
|
+
require 'wrb'
|
|
2
|
+
require 'wrb/imecommon'
|
|
3
|
+
|
|
4
|
+
module WR
|
|
5
|
+
module RC
|
|
6
|
+
ES_LEFT = 0x0000
|
|
7
|
+
ES_CENTER = 0x0001
|
|
8
|
+
ES_RIGHT = 0x0002
|
|
9
|
+
ES_MULTILINE = 0x0004
|
|
10
|
+
ES_UPPERCASE = 0x0008
|
|
11
|
+
ES_LOWERCASE = 0x0010
|
|
12
|
+
ES_PASSWORD = 0x0020
|
|
13
|
+
ES_AUTOVSCROLL = 0x0040
|
|
14
|
+
ES_AUTOHSCROLL = 0x0080
|
|
15
|
+
ES_NOHIDESEL = 0x0100
|
|
16
|
+
ES_OEMCONVERT = 0x0400
|
|
17
|
+
ES_READONLY = 0x0800
|
|
18
|
+
ES_WANTRETURN = 0x1000
|
|
19
|
+
ES_NUMBER = 0x2000
|
|
20
|
+
|
|
21
|
+
EM_GETSEL = 0x00B0
|
|
22
|
+
EM_SETSEL = 0x00B1
|
|
23
|
+
EM_GETRECT = 0x00B2
|
|
24
|
+
EM_SETRECT = 0x00B3
|
|
25
|
+
EM_SETRECTNP = 0x00B4
|
|
26
|
+
EM_SCROLL = 0x00B5
|
|
27
|
+
EM_LINESCROLL = 0x00B6
|
|
28
|
+
EM_SCROLLCARET = 0x00B7
|
|
29
|
+
EM_GETMODIFY = 0x00B8
|
|
30
|
+
EM_SETMODIFY = 0x00B9
|
|
31
|
+
EM_GETLINECOUNT = 0x00BA
|
|
32
|
+
EM_LINEINDEX = 0x00BB
|
|
33
|
+
EM_SETHANDLE = 0x00BC
|
|
34
|
+
EM_GETHANDLE = 0x00BD
|
|
35
|
+
EM_GETTHUMB = 0x00BE
|
|
36
|
+
EM_LINELENGTH = 0x00C1
|
|
37
|
+
EM_REPLACESEL = 0x00C2
|
|
38
|
+
EM_GETLINE = 0x00C4
|
|
39
|
+
EM_LIMITTEXT = 0x00C5
|
|
40
|
+
EM_CANUNDO = 0x00C6
|
|
41
|
+
EM_UNDO = 0x00C7
|
|
42
|
+
EM_FMTLINES = 0x00C8
|
|
43
|
+
EM_LINEFROMCHAR = 0x00C9
|
|
44
|
+
EM_SETTABSTOPS = 0x00CB
|
|
45
|
+
EM_SETPASSWORDCHAR = 0x00CC
|
|
46
|
+
EM_EMPTYUNDOBUFFER = 0x00CD
|
|
47
|
+
EM_GETFIRSTVISIBLELINE = 0x00CE
|
|
48
|
+
EM_SETREADONLY = 0x00CF
|
|
49
|
+
EM_SETWORDBREAKPROC = 0x00D0
|
|
50
|
+
EM_GETWORDBREAKPROC = 0x00D1
|
|
51
|
+
EM_GETPASSWORDCHAR = 0x00D2
|
|
52
|
+
EM_SETMARGINS = 0x00D3
|
|
53
|
+
EM_GETMARGINS = 0x00D4
|
|
54
|
+
EM_SETLIMITTEXT = EM_LIMITTEXT
|
|
55
|
+
EM_GETLIMITTEXT = 0x00D5
|
|
56
|
+
EM_POSFROMCHAR = 0x00D6
|
|
57
|
+
EM_CHARFROMPOS = 0x00D7
|
|
58
|
+
EM_SETIMESTATUS = 0x00D8
|
|
59
|
+
EM_GETIMESTATUS = 0x00D9
|
|
60
|
+
|
|
61
|
+
EN_SETFOCUS = 0x0100
|
|
62
|
+
EN_KILLFOCUS = 0x0200
|
|
63
|
+
EN_CHANGE = 0x0300
|
|
64
|
+
EN_UPDATE = 0x0400
|
|
65
|
+
EN_ERRSPACE = 0x0500
|
|
66
|
+
EN_MAXTEXT = 0x0501
|
|
67
|
+
EN_HSCROLL = 0x0601
|
|
68
|
+
EN_VSCROLL = 0x0602
|
|
69
|
+
EN_ALIGN_LTR_EC = 0x0700
|
|
70
|
+
EN_ALIGN_RTL_EC = 0x0701
|
|
71
|
+
|
|
72
|
+
WM_CTLCOLOREDIT = 0x0133
|
|
73
|
+
end
|
|
74
|
+
# A rectangular control which enable the user to enter and edit text.
|
|
75
|
+
# <br>See also <a href="https://docs.microsoft.com/en-us/windows/desktop/Controls/
|
|
76
|
+
#window-controls"> Windows Control section of Microsoft Docs.</a>
|
|
77
|
+
class Edit < WinControl #< StandardControl
|
|
78
|
+
include ModStdCtrl
|
|
79
|
+
|
|
80
|
+
class Selection
|
|
81
|
+
include RC
|
|
82
|
+
def initialize(owner, selstart, selend)
|
|
83
|
+
@owner = owner
|
|
84
|
+
@selstart = selstart
|
|
85
|
+
@selend = selend
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def text()
|
|
89
|
+
@owner.text[@selstart, @selend-@selstart]
|
|
90
|
+
end
|
|
91
|
+
def text=(txt)
|
|
92
|
+
@owner.SendMessage(EM_SETSEL, @selstart, @selend)
|
|
93
|
+
@owner.SendMessage(EM_REPLACESEL, 1, API.adjust_internal_lf_code(txt))
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
include ModIME
|
|
98
|
+
|
|
99
|
+
PreDefinedEvents = {
|
|
100
|
+
:setfocus => [WM_COMMAND, EN_SETFOCUS, 'hi'], # ???_setfocus(idcmd, code, hwnd)
|
|
101
|
+
:killfocus => [WM_COMMAND, EN_KILLFOCUS, 'hi'], # ???_killfocus(idcmd, code, hwnd)
|
|
102
|
+
:change => [WM_COMMAND, EN_CHANGE, 'hi'], # ???_change(idcmd, code, hwnd)
|
|
103
|
+
:update => [WM_COMMAND, EN_UPDATE, 'hi'], # ???_update(idcmd, code, hwnd)
|
|
104
|
+
:errspace => [WM_COMMAND, EN_ERRSPACE, 'hi'], # ???_errspace(idcmd, code, hwnd)
|
|
105
|
+
:maxtext => [WM_COMMAND, EN_MAXTEXT, 'hi'], # ???_maxtext(idcmd, code, hwnd)
|
|
106
|
+
:hscroll => [WM_COMMAND, EN_HSCROLL, 'hi'], # ???_hscroll(idcmd, code, hwnd)
|
|
107
|
+
:vscroll => [WM_COMMAND, EN_VSCROLL, 'hi'], # ???_vscroll(idcmd, code, hwnd)
|
|
108
|
+
:align_ltr_ec => [WM_COMMAND, EN_ALIGN_LTR_EC, 'hi'], # ???_align_ltr_ec(idcmd, code, hwnd)
|
|
109
|
+
:align_rtl_ec => [WM_COMMAND, EN_ALIGN_RTL_EC, 'hi'], # ???_align_rtl_ec(idcmd, code, hwnd)
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
DefaultEvents = [
|
|
113
|
+
:change, # ???_change(idcmd, code, hwnd)
|
|
114
|
+
:update # ???_update(idcmd, code, hwnd)
|
|
115
|
+
]
|
|
116
|
+
|
|
117
|
+
def initialize(*args)
|
|
118
|
+
super
|
|
119
|
+
@_classname = "EDIT"
|
|
120
|
+
# self.style |= WS_BORDER
|
|
121
|
+
@_exstyle = WS_EX_CLIENTEDGE
|
|
122
|
+
@_acceptable_events = PreDefinedEvents.dup
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
#
|
|
126
|
+
def idcmd=(id) # for IME
|
|
127
|
+
parent.set_msgtranslator(WM_COMMAND) unless parent.get_msgtranslator(WM_COMMAND)
|
|
128
|
+
parent.register_event(id, WM_COMMAND, EN_SETFOCUS, "__gotfocus", 'hi', self)
|
|
129
|
+
parent.register_event(id, WM_COMMAND, EN_KILLFOCUS, "__lostfocus", 'hi', self)
|
|
130
|
+
super
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
#
|
|
134
|
+
def create()
|
|
135
|
+
super
|
|
136
|
+
self.limittext = @_limittext if @_limittext
|
|
137
|
+
self.passwordchar = @_passwordchar if @_passwordchar
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
#### write only attributes ####
|
|
141
|
+
|
|
142
|
+
# Sets edit style of this to ES_AUTOVSCROLL or not.
|
|
143
|
+
def autovscroll=(state)
|
|
144
|
+
set_style(state ? ES_AUTOVSCROLL : ~ES_AUTOVSCROLL)
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
# Sets edit style of this to ES_AUTOHSCROLL or not.
|
|
148
|
+
def autohscroll=(state)
|
|
149
|
+
set_style(state ? ES_AUTOHSCROLL : ~ES_AUTOHSCROLL)
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
# Sets edit style of this to ES_MULTILINE or not.
|
|
153
|
+
def muitiline=(state)
|
|
154
|
+
set_style(state ? ES_MULTILINE : ~ES_MULTILINE)
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
# Sets edit style of this to ES_PASSWORD or not.
|
|
158
|
+
def password=(state)
|
|
159
|
+
set_style(state ? ES_PASSWORD : ~ES_PASSWORD)
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
# Sets edit style of this to EM_SETREADONLY or not.
|
|
163
|
+
def readonly=(state)
|
|
164
|
+
if state != true && state !=false && state != nil
|
|
165
|
+
raise ArgumentError, "argument must be ture, false or nil", caller(2)
|
|
166
|
+
end
|
|
167
|
+
SendMessage(EM_SETREADONLY, state ? 1 : 0, 0)
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
# Sets edit style of this to ES_WANTRETRURN or not.
|
|
171
|
+
def wantreturn=(state)
|
|
172
|
+
set_style(sate ? ES_WANTRETRURN : ~ES_WANTRETRURN, true)
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
# Sets th back ground color of this. Give a RGB integer as <i>clr</i>.
|
|
176
|
+
def bkcolor=(clr)
|
|
177
|
+
parent.register_event WM_CTLCOLOREDIT, "__ctlcoloredit__", 'ii', self
|
|
178
|
+
@_bkcolor = clr
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
#### read-write attributes ####
|
|
182
|
+
|
|
183
|
+
# Gets the current text limit for this edit control.
|
|
184
|
+
def limittext()
|
|
185
|
+
alive? ? SendMessage(EM_GETLIMITTEXT, 0, 0) : @_limittext
|
|
186
|
+
end
|
|
187
|
+
# Sets the text limit of this edit control.
|
|
188
|
+
def limittext=(lim)
|
|
189
|
+
alive? ? SendMessage(EM_LIMITTEXT, lim.to_i, 0) : @_limittext = lim
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
# Gets the password character that this edit control displays when the user enters text.<br>
|
|
193
|
+
# Returns a single charactor of String or nil. If nil was given, this edit control is used system default password charactor.
|
|
194
|
+
def passwordchar()
|
|
195
|
+
alive? ? SendMessage(EM_GETPASSWORDCHAR , 0, 0).chr : @_passwordchar
|
|
196
|
+
end
|
|
197
|
+
# Sets or removes the password character for this edit control. <br>
|
|
198
|
+
# Give a single charactor of String, or nil.
|
|
199
|
+
def passwordchar=(ch)
|
|
200
|
+
alive? ? SendMessage(EM_SETPASSWORDCHAR , ch.ord, 0) : @_passwordchar = ch
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
#### only for after created ####
|
|
204
|
+
|
|
205
|
+
# Retreives wheter this edit control was modified.
|
|
206
|
+
def modified()
|
|
207
|
+
SendMessage(EM_GETMODIFY, 0, 0) == 0 ? false : true
|
|
208
|
+
end
|
|
209
|
+
# Sets modified flag to true or false.
|
|
210
|
+
def modified=(f)
|
|
211
|
+
SendMessage(EM_SETMODIFY, f ? 1 : 0, 0)
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
# Gets the starting and ending character positions of the current selection.
|
|
215
|
+
def selection() # returns [start_pos, end_pos]
|
|
216
|
+
Selection.new(self, *SPLITPARAM(SendMessage(EM_GETSEL, 0, 0)))
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
# selection=(starting[, ending])
|
|
220
|
+
# Selects a range of characters in an edit control.
|
|
221
|
+
def selection=(arg)
|
|
222
|
+
if arg.is_a?(Integer) || arg.is_a?(Array)
|
|
223
|
+
start_pos, end_pos = arg
|
|
224
|
+
end_pos ||= start_pos
|
|
225
|
+
else
|
|
226
|
+
raise ArgumentError, "#{arg.class} is not allowed", caller(1)
|
|
227
|
+
end
|
|
228
|
+
SendMessage(EM_SETSEL, start_pos.to_i, end_pos.to_i)
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
# Sets a text into this edit contlol. Same as caption().
|
|
232
|
+
def text()
|
|
233
|
+
self.caption
|
|
234
|
+
end
|
|
235
|
+
|
|
236
|
+
# Gets a text of this edit contlol. Same as caption=(str).
|
|
237
|
+
def text=(txt)
|
|
238
|
+
self.caption = API.adjust_internal_lf_code(txt)
|
|
239
|
+
end
|
|
240
|
+
|
|
241
|
+
# Gets a text length of this edit control.
|
|
242
|
+
def length()
|
|
243
|
+
self.text.size
|
|
244
|
+
end
|
|
245
|
+
|
|
246
|
+
# []=(position, length=1, text)
|
|
247
|
+
# Inserts and replaces at the specified <i>position</i> and <i>length</i> by the <i>text</i> in this edit control.
|
|
248
|
+
def []=(*args)
|
|
249
|
+
case args.size
|
|
250
|
+
when 2
|
|
251
|
+
start_pos, txt = args
|
|
252
|
+
len = 0
|
|
253
|
+
when 3
|
|
254
|
+
start_pos, len, txt = args
|
|
255
|
+
end
|
|
256
|
+
SendMessage(EM_SETSEL, start_pos, start_pos + len)
|
|
257
|
+
SendMessage(EM_REPLACESEL, 0, API.adjust_internal_lf_code(txt))
|
|
258
|
+
end
|
|
259
|
+
|
|
260
|
+
#### clip board operations etc.. ####
|
|
261
|
+
|
|
262
|
+
# Performs cut operation.
|
|
263
|
+
def cut() SendMessage(WM_CUT, 0, 0); end
|
|
264
|
+
# Performs copy operation.
|
|
265
|
+
def copy() SendMessage(WM_COPY, 0, 0); end
|
|
266
|
+
# Performs paste operation.
|
|
267
|
+
def paste() SendMessage(WM_PASTE, 0, 0); end
|
|
268
|
+
# Performs undo operation.
|
|
269
|
+
def undo() SendMessage(WM_UNDO, 0, 0); end
|
|
270
|
+
|
|
271
|
+
# Clears all text in this edit control.
|
|
272
|
+
def clear() SendMessage(WM_CLEAR, 0, 0); end
|
|
273
|
+
|
|
274
|
+
|
|
275
|
+
#### methods for multi line ####
|
|
276
|
+
|
|
277
|
+
# Gets a text of specified line index.
|
|
278
|
+
def [](idx) # line manipulation
|
|
279
|
+
n = SendMessage(EM_LINELENGTH, idx.to_i, 0)
|
|
280
|
+
n = RWin::UNICODE ? n : n*2
|
|
281
|
+
buff = TCHAR[n]
|
|
282
|
+
buff.subst(0, 2, n)
|
|
283
|
+
SendMessage(EM_GETLINE, idx.to_i, buff)
|
|
284
|
+
class << str = buff.to_s
|
|
285
|
+
def owner=(owner)
|
|
286
|
+
@owner = owner
|
|
287
|
+
self
|
|
288
|
+
end
|
|
289
|
+
def []=(*args)
|
|
290
|
+
txt = args.pop
|
|
291
|
+
@owner[*args] = txt
|
|
292
|
+
end
|
|
293
|
+
end
|
|
294
|
+
str.owner = self
|
|
295
|
+
str
|
|
296
|
+
end
|
|
297
|
+
|
|
298
|
+
# Counts num of lines in this edit control.
|
|
299
|
+
def countlines()
|
|
300
|
+
SendMessage(EM_GETLINECOUNT, 0, 0)
|
|
301
|
+
end
|
|
302
|
+
|
|
303
|
+
# Retreives an array of lines separated by CRLF code.
|
|
304
|
+
def lines()
|
|
305
|
+
Collection.new(self.caption.split())
|
|
306
|
+
end
|
|
307
|
+
|
|
308
|
+
# Gets first visible line of this edit control.<br> Retruns an Integer.
|
|
309
|
+
def firstvisibleline()
|
|
310
|
+
SendMessage(EM_GETFIRSTVISIBLELINE, 0, 0)
|
|
311
|
+
end
|
|
312
|
+
|
|
313
|
+
# Scrolls the text to specified line and column.
|
|
314
|
+
def scrollto(line, col)
|
|
315
|
+
SendMessage(EM_LINESCROLL, 0, MAKELPARAM(line, col))
|
|
316
|
+
end
|
|
317
|
+
|
|
318
|
+
def _scroll(op)
|
|
319
|
+
SendMessage(EM_SCROLL, op.to_i, 0)
|
|
320
|
+
end
|
|
321
|
+
private :_scroll
|
|
322
|
+
|
|
323
|
+
# Scrolls up to one line.
|
|
324
|
+
def scrollup() _scroll(0); end
|
|
325
|
+
|
|
326
|
+
# Scrolls down to one line.
|
|
327
|
+
def scrolldown() _scroll(1); end
|
|
328
|
+
|
|
329
|
+
# Scrolls up to one page.
|
|
330
|
+
def scrolluppage() _scroll(2); end
|
|
331
|
+
|
|
332
|
+
# Scrolls down to one page.
|
|
333
|
+
def scrolldnpage() _scroll(3); end
|
|
334
|
+
|
|
335
|
+
# Scrolls the caret into view in this edit control.
|
|
336
|
+
def scrollcaret()
|
|
337
|
+
SendMessage(EM_SCROLLCARET, 0, 0)
|
|
338
|
+
end
|
|
339
|
+
|
|
340
|
+
# Retreives a line number of specified position in this edit control.
|
|
341
|
+
def pos2line(pos) SendMessage(EM_LINEFROMCHAR, pos.to_i, 0); end
|
|
342
|
+
|
|
343
|
+
# Retreives a first position of specified line number in this edit control.
|
|
344
|
+
def line2pos(line) SendMessage(EM_LINEINDEX, line.to_i, 0); end
|
|
345
|
+
|
|
346
|
+
# Retreives a current line number of this edit control.
|
|
347
|
+
def currentline() SendMessage(EM_LINEFROMCHAR, -1, 0); end
|
|
348
|
+
|
|
349
|
+
# Retreives a position of specified coordinate(x, y) in this edit control.
|
|
350
|
+
def point2pos(x, y) LOWORD(SendMessage(EM_CHARFROMPOS, 0, MAKELPARAM(x, y))); end
|
|
351
|
+
|
|
352
|
+
# Retreives a line number of specified coordinate(x, y) in this edit control.
|
|
353
|
+
def point2line(x, y) HIWORD(SendMessage(EM_CHARFROMPOS, 0, MAKELPARAM(x, y))); end
|
|
354
|
+
|
|
355
|
+
WinStyles = {
|
|
356
|
+
:center => ES_CENTER,
|
|
357
|
+
:right => ES_RIGHT,
|
|
358
|
+
:multiline => ES_MULTILINE,
|
|
359
|
+
:uppercase => ES_UPPERCASE,
|
|
360
|
+
:lowercase => ES_LOWERCASE,
|
|
361
|
+
:password => ES_PASSWORD,
|
|
362
|
+
:autovscroll => ES_AUTOVSCROLL,
|
|
363
|
+
:autohscroll => ES_AUTOHSCROLL,
|
|
364
|
+
:nohidesell => ES_NOHIDESEL,
|
|
365
|
+
:oemconvert => ES_OEMCONVERT,
|
|
366
|
+
:readonly => ES_READONLY,
|
|
367
|
+
:wantreturn => ES_WANTRETURN,
|
|
368
|
+
:number => ES_NUMBER
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
protected
|
|
372
|
+
def _apply_options(arg)
|
|
373
|
+
if st=WinStyles[arg]
|
|
374
|
+
self.style |= st
|
|
375
|
+
return nil
|
|
376
|
+
end
|
|
377
|
+
super
|
|
378
|
+
end
|
|
379
|
+
|
|
380
|
+
def __ctlcoloredit__(hdc, hwnd)
|
|
381
|
+
return nil unless self._hwnd == hwnd
|
|
382
|
+
Canvas.new(hdc).Transparent
|
|
383
|
+
APP::CancelDefWindowProc(RWin::Brush.new(@_bkcolor)._hbrush)
|
|
384
|
+
end
|
|
385
|
+
end
|
|
386
|
+
end
|
|
387
|
+
|
|
388
|
+
module WR
|
|
389
|
+
class MyForm < Form
|
|
390
|
+
def initialize()
|
|
391
|
+
_<< Edit[:ed1, "Edit me", 0, 0, 100, 30, :disabled]
|
|
392
|
+
_<< Edit[:ed2, "Edit me", 0, 30, 100, 30]
|
|
393
|
+
# _ed1.each{|i| i.bkcolor=0xe0e0e0}
|
|
394
|
+
# @ed1.events = :change
|
|
395
|
+
# @ed1.accept_events :update , :change
|
|
396
|
+
# @ed1.set_subclass.register_event WM_KEYDOWN, 'key_down', 'ih'
|
|
397
|
+
# def @ed1.key_down(*args)
|
|
398
|
+
# dpp args
|
|
399
|
+
# end
|
|
400
|
+
end
|
|
401
|
+
|
|
402
|
+
def ed2_change(*args)
|
|
403
|
+
dpp args
|
|
404
|
+
end
|
|
405
|
+
def ed2_update(*args)
|
|
406
|
+
dpp args
|
|
407
|
+
end
|
|
408
|
+
|
|
409
|
+
self.start
|
|
410
|
+
end
|
|
411
|
+
end if $0 == __FILE__
|
|
412
|
+
|