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,87 @@
|
|
|
1
|
+
require 'wrb/commdlg'
|
|
2
|
+
|
|
3
|
+
module WR
|
|
4
|
+
module RC
|
|
5
|
+
CC_RGBINIT = 0x1
|
|
6
|
+
CC_FULLOPEN = 0x2
|
|
7
|
+
CC_PREVENTFULLOPEN = 0x4
|
|
8
|
+
CC_SHOWHELP = 0x8
|
|
9
|
+
CC_ENABLEHOOK = 0x10
|
|
10
|
+
CC_ENABLETEMPLATE = 0x20
|
|
11
|
+
CC_ENABLETEMPLATEHANDLE = 0x40
|
|
12
|
+
CC_SOLIDCOLOR = 0x80
|
|
13
|
+
CC_ANYCOLOR = 0x100
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
#A dialog box that enables the user to select a color.
|
|
17
|
+
class ChooseColorDlg < CommonDialog
|
|
18
|
+
|
|
19
|
+
API.typealias 'LPCCHOOKPROC', 'Q'
|
|
20
|
+
CHOOSECOLOR = API.defstruct "
|
|
21
|
+
DWORD lStructSize;
|
|
22
|
+
HWND hwndOwner;
|
|
23
|
+
HWND hInstance;
|
|
24
|
+
COLORREF rgbResult;
|
|
25
|
+
COLORREF *lpCustColors;
|
|
26
|
+
DWORD Flags;
|
|
27
|
+
LPARAM lCustData;
|
|
28
|
+
LPCCHOOKPROC lpfnHook;
|
|
29
|
+
LPCTSTR lpTemplateName;"
|
|
30
|
+
|
|
31
|
+
API.defun "ChooseColor(CHOOSECOLOR cc)"
|
|
32
|
+
|
|
33
|
+
def self.show(owner=nil, flags: nil, custcolors: nil)
|
|
34
|
+
cc = self.new
|
|
35
|
+
cc.flags = flags if flags
|
|
36
|
+
cc.custcolors = custcolors if custcolors
|
|
37
|
+
cc.show(owner)
|
|
38
|
+
end
|
|
39
|
+
def self.show2(owner=nil, flags: nil, custcolors: nil)
|
|
40
|
+
cc = self.new
|
|
41
|
+
cc.flags = flags if flags
|
|
42
|
+
cc.custcolors = custcolors if custcolors
|
|
43
|
+
cc.show2(owner)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
attr_reader :_choosecolor
|
|
47
|
+
|
|
48
|
+
def initialize()
|
|
49
|
+
@_choosecolor = CHOOSECOLOR[CHOOSECOLOR::Size]
|
|
50
|
+
@_custcolors = API::DWORD[16]
|
|
51
|
+
16.times{|i| @_custcolors[i] = 0xffffff}
|
|
52
|
+
@_choosecolor.lpCustColors = @_custcolors
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def flags()
|
|
56
|
+
@_choosecolor.Flags
|
|
57
|
+
end
|
|
58
|
+
def flags=(f)
|
|
59
|
+
@_choosecolor.Flags = f
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def custcolors()
|
|
63
|
+
@_custcolors[0, 16]
|
|
64
|
+
end
|
|
65
|
+
def custcolors=(*clrs)
|
|
66
|
+
clrs = clrs[0] if clrs[0].is_a?(Array)
|
|
67
|
+
raise ArgumentError, "num of arguments must be <= 16" if clrs.size > 16
|
|
68
|
+
clrs.each_with_index{|clr, idx| @_custcolors[idx] = clr}
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def show(owner=nil)
|
|
72
|
+
@_choosecolor.hwndOwner = owner._hwnd if owner
|
|
73
|
+
r = API.ChooseColor(@_choosecolor)
|
|
74
|
+
r==0 ? nil : @_choosecolor.rgbResult
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def show2(owner=nil)
|
|
78
|
+
@_choosecolor.hwndOwner = owner._hwnd if owner
|
|
79
|
+
r = API.ChooseColor(@_choosecolor)
|
|
80
|
+
r==0 ? nil : [@_choosecolor.rgbResult, custcolors]
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
module WR
|
|
86
|
+
dpp ChooseColorDlg.show2(custcolors: [0,0xff,0xff00, 0xff0000])
|
|
87
|
+
end if $0==__FILE__
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
# encoding: Windows-31J
|
|
2
|
+
require 'wrb/commdlg'
|
|
3
|
+
|
|
4
|
+
module WR
|
|
5
|
+
module RC
|
|
6
|
+
CF_SCREENFONTS = 0x1
|
|
7
|
+
CF_PRINTERFONTS = 0x2
|
|
8
|
+
CF_BOTH = (CF_SCREENFONTS | CF_PRINTERFONTS)
|
|
9
|
+
CF_SHOWHELP = 0x4
|
|
10
|
+
CF_ENABLEHOOK = 0x8
|
|
11
|
+
CF_ENABLETEMPLATE = 0x10
|
|
12
|
+
CF_ENABLETEMPLATEHANDLE = 0x20
|
|
13
|
+
CF_INITTOLOGFONTSTRUCT = 0x40
|
|
14
|
+
CF_USESTYLE = 0x80
|
|
15
|
+
CF_EFFECTS = 0x100
|
|
16
|
+
CF_APPLY = 0x200
|
|
17
|
+
CF_ANSIONLY = 0x400
|
|
18
|
+
CF_SCRIPTSONLY = CF_ANSIONLY
|
|
19
|
+
CF_NOVECTORFONTS = 0x800
|
|
20
|
+
CF_NOOEMFONTS = CF_NOVECTORFONTS
|
|
21
|
+
CF_NOSIMULATIONS = 0x1000
|
|
22
|
+
CF_LIMITSIZE = 0x2000
|
|
23
|
+
CF_FIXEDPITCHONLY = 0x4000
|
|
24
|
+
CF_WYSIWYG = 0x8000
|
|
25
|
+
CF_FORCEFONTEXIST = 0x10000
|
|
26
|
+
CF_SCALABLEONLY = 0x20000
|
|
27
|
+
CF_TTONLY = 0x40000
|
|
28
|
+
CF_NOFACESEL = 0x80000
|
|
29
|
+
CF_NOSTYLESEL = 0x100000
|
|
30
|
+
CF_NOSIZESEL = 0x200000
|
|
31
|
+
CF_SELECTSCRIPT = 0x400000
|
|
32
|
+
CF_NOSCRIPTSEL = 0x800000
|
|
33
|
+
CF_NOVERTFONTS = 0x1000000
|
|
34
|
+
|
|
35
|
+
SIMULATED_FONTTYPE = 0x8000
|
|
36
|
+
PRINTER_FONTTYPE = 0x4000
|
|
37
|
+
SCREEN_FONTTYPE = 0x2000
|
|
38
|
+
BOLD_FONTTYPE = 0x100
|
|
39
|
+
ITALIC_FONTTYPE = 0x200
|
|
40
|
+
REGULAR_FONTTYPE = 0x400
|
|
41
|
+
|
|
42
|
+
PS_OPENTYPE_FONTTYPE = 0x10000
|
|
43
|
+
TT_OPENTYPE_FONTTYPE = 0x20000
|
|
44
|
+
TYPE1_FONTTYPE = 0x40000
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# A dialog box that enables the user to choose attributes for a logical font.
|
|
48
|
+
class ChooseFontDlg < CommonDialog
|
|
49
|
+
|
|
50
|
+
API.typealias 'LPCFHOOKPROC', 'Q'
|
|
51
|
+
CHOOSEFONT = API.defstruct "
|
|
52
|
+
DWORD lStructSize;
|
|
53
|
+
HWND hwndOwner;
|
|
54
|
+
HDC hDC;
|
|
55
|
+
LOGFONT *lpLogFont;
|
|
56
|
+
INT iPointSize;
|
|
57
|
+
DWORD Flags;
|
|
58
|
+
COLORREF rgbColors;
|
|
59
|
+
LPARAM lCustData;
|
|
60
|
+
LPCFHOOKPROC lpfnHook;
|
|
61
|
+
LPCTSTR lpTemplateName;
|
|
62
|
+
HINSTANCE hInstance;
|
|
63
|
+
LPWSTR lpszStyle;
|
|
64
|
+
WORD nFontType;
|
|
65
|
+
WORD ___MISSING_ALIGNMENT__;
|
|
66
|
+
INT nSizeMin;
|
|
67
|
+
INT nSizeMax;"
|
|
68
|
+
|
|
69
|
+
API.defun "ChooseFont(CHOOSEFONT cf)"
|
|
70
|
+
LOGFONT = API::LOGFONT
|
|
71
|
+
|
|
72
|
+
attr_reader :_logfont
|
|
73
|
+
|
|
74
|
+
def self.show(owner=nil, name: '', height: -11, flags: nil, color: 0, type: nil)
|
|
75
|
+
cf = self.new
|
|
76
|
+
cf._logfont.lfFaceName = name
|
|
77
|
+
cf._logfont.lfHeight = height
|
|
78
|
+
cf.flags = flags || CF_APPLY | CF_SCREENFONTS | CF_EFFECTS | CF_INITTOLOGFONTSTRUCT
|
|
79
|
+
cf.color = color
|
|
80
|
+
cf.fonttype = type || SCREEN_FONTTYPE
|
|
81
|
+
cf.show(owner)
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def initialize(lf=nil)
|
|
85
|
+
@_choosefont = CHOOSEFONT[CHOOSEFONT::Size]
|
|
86
|
+
raise ArgumetnError, "Argument must be LOGFONT" if lf && lf.class != LOGFONT
|
|
87
|
+
@_logfont = lf || LOGFONT[LOGFONT::Size]
|
|
88
|
+
@_choosefont.lpLogFont = @_logfont
|
|
89
|
+
@_choosefont.Flags = CF_APPLY | CF_SCREENFONTS | CF_EFFECTS | CF_INITTOLOGFONTSTRUCT
|
|
90
|
+
@_choosefont.nFontType = SCREEN_FONTTYPE
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def flags()
|
|
94
|
+
@_choosefont.Flags
|
|
95
|
+
end
|
|
96
|
+
def flags=(f)
|
|
97
|
+
@_choosefont.Flags = f
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def color()
|
|
101
|
+
@_choosefont.rgbColors
|
|
102
|
+
end
|
|
103
|
+
def color=(clr)
|
|
104
|
+
@_choosefont.rgbColors = clr
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def fonttype()
|
|
108
|
+
end
|
|
109
|
+
def fonttype=(typ)
|
|
110
|
+
@_choosefont.nFontType = typ
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def pointsize()
|
|
114
|
+
@_choosefont.ipointSize
|
|
115
|
+
end
|
|
116
|
+
def pointsize=(i)
|
|
117
|
+
@_choosefont.iPointSize = i
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
def show(owner=nil)
|
|
121
|
+
@_choosefont.hwndOwner = owner._hwnd if owner
|
|
122
|
+
r = API.ChooseFont(@_choosefont)
|
|
123
|
+
return nil if r == 0
|
|
124
|
+
[@_choosefont.lpLogFont, @_choosefont.rgbColors, @_choosefont.iPointSize]
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
module WR
|
|
130
|
+
# cf = ChooseFontDlg.new
|
|
131
|
+
# cf._logfont.lfFaceName = '@HGP���M'
|
|
132
|
+
# cf._logfont.lfHeight = -18
|
|
133
|
+
# cf.color = 0x00ff00
|
|
134
|
+
## cf.flags = 0
|
|
135
|
+
#
|
|
136
|
+
# lf, color = cf.show
|
|
137
|
+
|
|
138
|
+
lf, color, pointsize = ChooseFontDlg.show(name:"System", height:-19)
|
|
139
|
+
if lf
|
|
140
|
+
dpp [lf.lfFaceName.to_s, color, lf.lfHeight, pointsize]
|
|
141
|
+
end
|
|
142
|
+
end if $0 == __FILE__
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
require 'wrb'
|
|
2
|
+
|
|
3
|
+
module WR
|
|
4
|
+
module RC
|
|
5
|
+
CF_TEXT = 1
|
|
6
|
+
CF_BITMAP = 2
|
|
7
|
+
CF_METAFILEPICT = 3
|
|
8
|
+
CF_SYLK = 4
|
|
9
|
+
CF_DIF = 5
|
|
10
|
+
CF_TIFF = 6
|
|
11
|
+
CF_OEMTEXT = 7
|
|
12
|
+
CF_DIB = 8
|
|
13
|
+
CF_PALETTE = 9
|
|
14
|
+
CF_PENDATA = 10
|
|
15
|
+
CF_RIFF = 11
|
|
16
|
+
CF_WAVE = 12
|
|
17
|
+
CF_UNICODETEXT = 13
|
|
18
|
+
CF_ENHMETAFILE = 14
|
|
19
|
+
CF_HDROP = 15
|
|
20
|
+
CF_LOCALE = 16
|
|
21
|
+
CF_DIBV5 = 17
|
|
22
|
+
CF_MAX = 18
|
|
23
|
+
|
|
24
|
+
CF_OWNERDISPLAY = 0x0080
|
|
25
|
+
CF_DSPTEXT = 0x0081
|
|
26
|
+
CF_DSPBITMAP = 0x0082
|
|
27
|
+
CF_DSPMETAFILEPICT = 0x0083
|
|
28
|
+
CF_DSPENHMETAFILE = 0x008E
|
|
29
|
+
|
|
30
|
+
CF_PRIVATEFIRST = 0x0200
|
|
31
|
+
CF_PRIVATELAST = 0x02FF
|
|
32
|
+
|
|
33
|
+
CF_GDIOBJFIRST = 0x0300
|
|
34
|
+
CF_GDIOBJLAST = 0x03FF
|
|
35
|
+
|
|
36
|
+
# WM_CUT = 0x0300 # defined at base.rb
|
|
37
|
+
# WM_COPY = 0x0301
|
|
38
|
+
# WM_PASTE = 0x0302
|
|
39
|
+
# WM_CLEAR = 0x0303
|
|
40
|
+
# WM_UNDO = 0x0304
|
|
41
|
+
|
|
42
|
+
WM_RENDERFORMAT = 0x0305
|
|
43
|
+
WM_RENDERALLFORMATS = 0x0306
|
|
44
|
+
WM_DESTROYCLIPBOARD = 0x0307
|
|
45
|
+
WM_DRAWCLIPBOARD = 0x0308
|
|
46
|
+
WM_PAINTCLIPBOARD = 0x0309
|
|
47
|
+
WM_VSCROLLCLIPBOARD = 0x030A
|
|
48
|
+
WM_SIZECLIPBOARD = 0x030B
|
|
49
|
+
WM_ASKCBFORMATNAME = 0x030C
|
|
50
|
+
WM_CHANGECBCHAIN = 0x030D
|
|
51
|
+
WM_HSCROLLCLIPBOARD = 0x030E
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# Provides an interface that enable applications to transfer data.
|
|
55
|
+
class Clipboard
|
|
56
|
+
include ModAutoloading
|
|
57
|
+
include RC
|
|
58
|
+
API.defun 'OpenClipboard(HWND hWndNewOwner)'
|
|
59
|
+
API.defun 'CloseClipboard()'
|
|
60
|
+
API.defun 'GetClipboardSequenceNumber()'
|
|
61
|
+
API.defun 'GetClipboardOwner()'
|
|
62
|
+
API.defun 'SetClipboardViewer(HWND hWndNewViewer)'
|
|
63
|
+
API.defun 'GetClipboardViewer()'
|
|
64
|
+
API.defun 'ChangeClipboardChain(HWND hWndRemove, HWND hWndNewNext)'
|
|
65
|
+
API.defun 'SetClipboardData(UINT uFormat, HANDLE hMem)'
|
|
66
|
+
API.defun 'GetClipboardData(UINT uFormat)'
|
|
67
|
+
API.defun 'RegisterClipboardFormat(LPCTSTR lpszFormat)'
|
|
68
|
+
API.defun 'CountClipboardFormats()'
|
|
69
|
+
API.defun 'EnumClipboardFormats(UINT format)'
|
|
70
|
+
API.defun 'GetClipboardFormatName(UINT format, LPTSTR lpszFormatName, int cchMaxCount)'
|
|
71
|
+
API.defun 'EmptyClipboard()'
|
|
72
|
+
API.defun 'IsClipboardFormatAvailable(UINT format)'
|
|
73
|
+
API.defun 'GetPriorityClipboardFormat(UINT *paFormatPriorityList, int cFormats)'
|
|
74
|
+
API.defun 'GetOpenClipboardWindow()'
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
def self.open(win=nil)
|
|
78
|
+
cb = self.new(win)
|
|
79
|
+
if block_given?
|
|
80
|
+
begin
|
|
81
|
+
yield cb
|
|
82
|
+
ensure
|
|
83
|
+
cb.close
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def initialize(win=nil)
|
|
89
|
+
raise ArgumentError, "Argument must be a Window." if !win.is_a?(RWin::Window) && !win.nil?
|
|
90
|
+
r = API.OpenClipboard(win ? win._hwnd : 0)
|
|
91
|
+
raise "OpenClipboard failed." if r == 0
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def close()
|
|
95
|
+
API.CloseClipboard()
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def clear()
|
|
99
|
+
API.EmptyClipboard()
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def get_string(uformat=CF_TEXT)
|
|
103
|
+
handle = API.GetClipboardData(uformat)
|
|
104
|
+
API.GlobalGetStr(handle)
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def set_string(str, uformat=CF_TEXT)
|
|
108
|
+
hmem = API.GlobalAllocStr(GHND, str)
|
|
109
|
+
API.SetClipboardData(uformat, hmem) == 0 ? false : true
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
def text=(str)
|
|
113
|
+
set_string(str, CF_TEXT)
|
|
114
|
+
end
|
|
115
|
+
def text()
|
|
116
|
+
get_string(CF_TEXT).unpack('A*')[0]
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
def bitmap=(bmp)
|
|
120
|
+
hbmp = bmp._hbitmap
|
|
121
|
+
API.SetClipboardData(CF_BITMAP, hbmp) == 0 ? false : true
|
|
122
|
+
end
|
|
123
|
+
def bitmap()
|
|
124
|
+
handle = API.GetClipboardData(CF_BITMAP)
|
|
125
|
+
handle == 0 ? nil : Bitmap.fromhandle(handle)
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
def formats()
|
|
129
|
+
r = []
|
|
130
|
+
n = API.CountClipboardFormats()
|
|
131
|
+
ufmt = 0
|
|
132
|
+
n.times{
|
|
133
|
+
ufmt = API.EnumClipboardFormats(ufmt)
|
|
134
|
+
r << ufmt
|
|
135
|
+
}
|
|
136
|
+
r
|
|
137
|
+
end
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
module WR
|
|
142
|
+
class Myform < Form
|
|
143
|
+
def initialize
|
|
144
|
+
controls << Button[:bt1, "Test", 0, 50, 80, 24]
|
|
145
|
+
@bmp1 = Bitmap.loadb64(
|
|
146
|
+
"IRNGwDAAAAAAAAAG0AcBRALAIAAAAAIQEwAIADEBk4ECQJjgWGwGAwGAwGAwGAwGAwGAwGAwGAwGAwICfwJeQCAQCAQCAQCAQCAQCAQCAQCAQEBHYK+QMAf7/f7/f7/f7/f7/f7/f7/gHVBOCBh8DD4ITQMPgwfBvmDB8JD4GHxGphgfBg+Bh8PP4gpw8PiQfDA+Eh8VP4MHx4DjAfGPCOLMbD42HxxTjW/JDCPB8GBpMJgB/v8AP9/ybWkgfJSOBa0pf5VPwLZguzLT+XLMIdoSBg==")
|
|
147
|
+
accept_events(:paint)
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
def created
|
|
151
|
+
Clipboard.open(self){|cb|
|
|
152
|
+
cb.clear
|
|
153
|
+
cb.bitmap = @bmp1
|
|
154
|
+
}
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
def bt1_clicked(*)
|
|
158
|
+
Clipboard.open(self){|cb|
|
|
159
|
+
dpp fm = cb.formats
|
|
160
|
+
$stderr.puts cb.text if fm.index(CF_TEXT)
|
|
161
|
+
$stderr.puts cb.get_string(CF_SYLK) if fm.index(CF_SYLK)
|
|
162
|
+
@bitmap = cb.bitmap if fm.index(CF_BITMAP)
|
|
163
|
+
}
|
|
164
|
+
refresh
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
def self_paint(cv) dpp @bitmap
|
|
168
|
+
return unless @bitmap
|
|
169
|
+
cv.BitBlt(0, 0, @bitmap)
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
self.start
|
|
173
|
+
end
|
|
174
|
+
end if $0 == __FILE__
|
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
require 'wrb'
|
|
2
|
+
require 'wrb/listcommon'
|
|
3
|
+
require 'wrb/imecommon'
|
|
4
|
+
require 'wrb/combocommon' # Common constats with ComboboxEx.
|
|
5
|
+
|
|
6
|
+
module WR
|
|
7
|
+
module RC
|
|
8
|
+
# CBN_SELCHANGE = 0x01
|
|
9
|
+
# CBN_DBLCLK = 0x02
|
|
10
|
+
# CBN_SETFOCUS = 0x03
|
|
11
|
+
# CBN_KILLFOCUS = 0x04
|
|
12
|
+
# CBN_EDITCHANGE = 0x05
|
|
13
|
+
# CBN_EDITUPDATE = 0x06
|
|
14
|
+
# CBN_DROPDOWN = 0x07
|
|
15
|
+
# CBN_CLOSEUP = 0x08
|
|
16
|
+
# CBN_SELENDOK = 0x09
|
|
17
|
+
# CBN_SELENDCANCEL = 0x0a
|
|
18
|
+
|
|
19
|
+
# CBS_SIMPLE = 0x0001 # defined in combocommon.rb
|
|
20
|
+
# CBS_DROPDOWN = 0x0002
|
|
21
|
+
# CBS_DROPDOWNLIST = 0x0003
|
|
22
|
+
CBS_OWNERDRAWFIXED = 0x0010
|
|
23
|
+
CBS_OWNERDRAWVARIABLE = 0x0020
|
|
24
|
+
CBS_AUTOHSCROLL = 0x0040
|
|
25
|
+
CBS_OEMCONVERT = 0x0080
|
|
26
|
+
CBS_SORT = 0x0100
|
|
27
|
+
CBS_HASSTRINGS = 0x0200
|
|
28
|
+
CBS_NOINTEGRALHEIGHT = 0x0400
|
|
29
|
+
CBS_DISABLENOSCROLL = 0x0800
|
|
30
|
+
CBS_UPPERCASE = 0x2000
|
|
31
|
+
CBS_LOWERCASE = 0x4000
|
|
32
|
+
|
|
33
|
+
# CBS_NOEDIT = (WS_BORDER | CBS_DROPDOWN | CBS_SIMPLE)
|
|
34
|
+
# CBS_EDIT = (WS_BORDER | CBS_DROPDOWN)
|
|
35
|
+
|
|
36
|
+
CB_GETEDITSEL = 0x0140
|
|
37
|
+
# CB_LIMITTEXT = 0x0141
|
|
38
|
+
CB_SETEDITSEL = 0x0142
|
|
39
|
+
CB_ADDSTRING = 0x0143
|
|
40
|
+
# CB_DELETESTRING = 0x0144
|
|
41
|
+
CB_DIR = 0x0145
|
|
42
|
+
# CB_GETCOUNT = 0x0146
|
|
43
|
+
# CB_GETCURSEL = 0x0147
|
|
44
|
+
# CB_GETLBTEXT = 0x0148
|
|
45
|
+
# CB_GETLBTEXTLEN = 0x0149
|
|
46
|
+
CB_INSERTSTRING = 0x014a
|
|
47
|
+
# CB_RESETCONTENT = 0x014b
|
|
48
|
+
CB_FINDSTRING = 0x014c
|
|
49
|
+
CB_SELECTSTRING = 0x014d
|
|
50
|
+
# CB_SETCURSEL = 0x014e
|
|
51
|
+
# CB_SHOWDROPDOWN = 0x014f
|
|
52
|
+
# CB_GETITEMDATA = 0x0150
|
|
53
|
+
# CB_SETITEMDATA = 0x0151
|
|
54
|
+
# CB_GETDROPPEDCONTROLRECT = 0x0152
|
|
55
|
+
# CB_SETITEMHEIGHT = 0x0153
|
|
56
|
+
# CB_GETITEMHEIGHT = 0x0154
|
|
57
|
+
# CB_SETEXTENDEDUI = 0x0155
|
|
58
|
+
# CB_GETEXTENDEDUI = 0x0156
|
|
59
|
+
# CB_GETDROPPEDSTATE = 0x0157
|
|
60
|
+
# CB_FINDSTRINGEXACT = 0x0158
|
|
61
|
+
CB_SETLOCALE = 0x0159
|
|
62
|
+
CB_GETLOCALE = 0x015a
|
|
63
|
+
CB_GETTOPINDEX = 0x015b
|
|
64
|
+
CB_SETTOPINDEX = 0x015c
|
|
65
|
+
CB_GETHORIZONTALEXTENT = 0x015d
|
|
66
|
+
CB_SETHORIZONTALEXTENT = 0x015e
|
|
67
|
+
# CB_GETDROPPEDWIDTH = 0x015f
|
|
68
|
+
# CB_SETDROPPEDWIDTH = 0x0160
|
|
69
|
+
CB_INITSTORAGE = 0x0161
|
|
70
|
+
CB_MULTIPLEADDSTRING = 0x0163
|
|
71
|
+
CB_GETCOMBOBOXINFO = 0x0164
|
|
72
|
+
CB_MSGMAX = 0x0165
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
# This control combines an edit box or static text and a list.
|
|
76
|
+
# <br>See also <a href="https://docs.microsoft.com/en-us/windows/desktop/Controls/
|
|
77
|
+
#window-controls"> Windows Control section of Microsoft Docs. </a>
|
|
78
|
+
class Combobox < WinControl #< StandardControl
|
|
79
|
+
|
|
80
|
+
WinStyles = {
|
|
81
|
+
:simple => CBS_SIMPLE,
|
|
82
|
+
:dropdown => CBS_DROPDOWN,
|
|
83
|
+
:dropdownlist => CBS_DROPDOWNLIST,
|
|
84
|
+
:ownerdrawfixed => CBS_OWNERDRAWFIXED,
|
|
85
|
+
:ownerdrawvariable => CBS_OWNERDRAWVARIABLE,
|
|
86
|
+
:autoscroll => CBS_AUTOHSCROLL,
|
|
87
|
+
:oemconvert => CBS_OEMCONVERT,
|
|
88
|
+
:sort => CBS_SORT,
|
|
89
|
+
:hasstrings => CBS_HASSTRINGS,
|
|
90
|
+
:nointegralheight => CBS_NOINTEGRALHEIGHT,
|
|
91
|
+
:disablenoscroll => CBS_DISABLENOSCROLL,
|
|
92
|
+
:uppercase => CBS_UPPERCASE,
|
|
93
|
+
:lowercase => CBS_LOWERCASE,
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
PreDefinedEvents = {
|
|
97
|
+
:selchange => [WM_COMMAND, CBN_SELCHANGE, 'hi'], # ???_selchange(idcmd, code, hwnd)
|
|
98
|
+
:dblclk => [WM_COMMAND, CBN_DBLCLK, 'hi'], # ???_dblclk(idcmd, code, hwnd)
|
|
99
|
+
:setfocus => [WM_COMMAND, CBN_SETFOCUS, 'hi'], # ???_setfocus(idcmd, code, hwnd)
|
|
100
|
+
:killfocus => [WM_COMMAND, CBN_KILLFOCUS, 'hi'], # ???_killfocus(idcmd, code, hwnd)
|
|
101
|
+
:editchange => [WM_COMMAND, CBN_EDITCHANGE, 'hi'], # ???_editchange(idcmd, code, hwnd)
|
|
102
|
+
:editupdate => [WM_COMMAND, CBN_EDITUPDATE, 'hi'], # ???_editupdate(idcmd, code, hwnd)
|
|
103
|
+
:dropdown => [WM_COMMAND, CBN_DROPDOWN, 'hi'], # ???_dropdown(idcmd, code, hwnd)
|
|
104
|
+
:closeup => [WM_COMMAND, CBN_CLOSEUP, 'hi'], # ???_closeup(idcmd, code, hwnd)
|
|
105
|
+
:selendok => [WM_COMMAND, CBN_SELENDOK, 'hi'], # ???_selendok(idcmd, code, hwnd)
|
|
106
|
+
:selendcancel => [WM_COMMAND, CBN_SELENDCANCEL, 'hi'], # ???_selendcancel(idcmd, code, hwnd)
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
DefaultEvents = [
|
|
110
|
+
:selchange # ???_clicked(idcmd, code, hwnd)
|
|
111
|
+
]
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
LB_ADDSTRING = CB_ADDSTRING
|
|
115
|
+
LB_INSERTSTRING = CB_INSERTSTRING
|
|
116
|
+
LB_DELETESTRING = CB_DELETESTRING
|
|
117
|
+
LB_SETCURSEL = CB_SETCURSEL
|
|
118
|
+
LB_GETCURSEL = CB_GETCURSEL
|
|
119
|
+
LB_GETTEXT = CB_GETLBTEXT
|
|
120
|
+
LB_GETTEXTLEN = CB_GETLBTEXTLEN
|
|
121
|
+
LB_GETCOUNT = CB_GETCOUNT
|
|
122
|
+
LB_SELECTSTRING = CB_SELECTSTRING
|
|
123
|
+
LB_DIR = CB_DIR
|
|
124
|
+
LB_FINDSTRING = CB_FINDSTRING
|
|
125
|
+
LB_GETITEMDATA = CB_GETITEMDATA
|
|
126
|
+
LB_SETITEMDATA = CB_SETITEMDATA
|
|
127
|
+
|
|
128
|
+
# def self.sym2style(*args) _sym2style(WinStyles, args); end
|
|
129
|
+
|
|
130
|
+
##################### Main ###################
|
|
131
|
+
include ModStdCtrl
|
|
132
|
+
include ModListItems
|
|
133
|
+
include ModIME
|
|
134
|
+
include ModComboCommon
|
|
135
|
+
|
|
136
|
+
attr_reader :editable
|
|
137
|
+
|
|
138
|
+
def initialize(*args)
|
|
139
|
+
super
|
|
140
|
+
@_classname = "COMBOBOX"
|
|
141
|
+
@_items = []
|
|
142
|
+
@_ar_data = []
|
|
143
|
+
@_acceptable_events = PreDefinedEvents.dup
|
|
144
|
+
self.style |= CBS_DROPDOWNLIST if (st = self.style & 0x00000003) == 0
|
|
145
|
+
@_droppedheight = @_h
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
#
|
|
149
|
+
def idcmd=(id)
|
|
150
|
+
if (self.style & 3) < CBS_DROPDOWNLIST # show editbox
|
|
151
|
+
parent.set_msgtranslator(WM_COMMAND) unless parent.get_msgtranslator(WM_COMMAND)
|
|
152
|
+
parent.register_event(id, WM_COMMAND, CBN_SETFOCUS, "__gotfocus", 'hi', self)
|
|
153
|
+
parent.register_event(id, WM_COMMAND, CBN_KILLFOCUS, "__lostfocus",'hi', self)
|
|
154
|
+
@editable = true
|
|
155
|
+
end
|
|
156
|
+
parent.register_event(CB_DELETESTRING, "__deleteitem__", 'ix', self) # for internal use
|
|
157
|
+
super
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
#
|
|
161
|
+
def create()
|
|
162
|
+
super
|
|
163
|
+
@_items.each_with_index{|val, idx| insert_item(idx, *val)}
|
|
164
|
+
self.droppedwidth = @_droppedwidth if @_droppedwidth
|
|
165
|
+
self.cursel = @_cursel if @_cursel
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
# Retreives a text from combined Edit/Static contlol.<br> Returns a String.
|
|
169
|
+
def text()
|
|
170
|
+
str = self.caption
|
|
171
|
+
class << str
|
|
172
|
+
def selection() # returns [start_pos, end_pos]
|
|
173
|
+
SPLITPARAM(SendMessage(CB_GETEDITSEL, 0, 0))
|
|
174
|
+
end
|
|
175
|
+
def selection=(arg)
|
|
176
|
+
if arg.is_a?(Integer) || arg.is_a?(Array)
|
|
177
|
+
start_pos, end_pos = arg
|
|
178
|
+
end_pos ||= start_pos
|
|
179
|
+
else
|
|
180
|
+
raise ArgumentError, "#{arg.inspect} is not allowed", caller(1)
|
|
181
|
+
end
|
|
182
|
+
SendMessage(CB_SETEDITSEL, start_pos.to_i, end_pos.to_i)
|
|
183
|
+
end
|
|
184
|
+
end if @editable
|
|
185
|
+
str
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
# Sets a text to combined Edit/Static contlol.
|
|
189
|
+
def text=(txt)
|
|
190
|
+
self.caption = txt
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
# Gets the minimum allowable width of this Combobox control.
|
|
194
|
+
def droppedwidth()
|
|
195
|
+
alive? ? SendMessage(CB_GETDROPPEDWIDTH, 0, 0) : @_droppedwidth
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
# Sets the minimum allowable width of this Combobox control.
|
|
199
|
+
def droppedwidth=(w)
|
|
200
|
+
alive? ? SendMessage(CB_SETDROPPEDWIDTH, w.to_i, 0) : @_droppedwidth = w
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
protected
|
|
204
|
+
def _apply_options(arg)
|
|
205
|
+
if st=WinStyles[arg]
|
|
206
|
+
self.style |= st
|
|
207
|
+
return nil
|
|
208
|
+
end
|
|
209
|
+
super
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
###### common named methods to wrap SendMessage for ModListItems #####
|
|
213
|
+
private
|
|
214
|
+
def _addstring(wp, lp) SendMessage(CB_ADDSTRING, wp, lp); end
|
|
215
|
+
def _insertstring(wp, lp) SendMessage(CB_INSERTSTRING, wp, lp); end
|
|
216
|
+
def _deletestring(wp, lp) SendMessage(CB_DELETESTRING, wp, lp); end
|
|
217
|
+
def _getcount(wp, lp) SendMessage(CB_GETCOUNT, wp, lp); end
|
|
218
|
+
def _gettextlen(wp, lp) SendMessage(CB_GETLBTEXTLEN, wp, lp); end
|
|
219
|
+
def _gettext(wp, lp) SendMessage(CB_GETLBTEXT, wp, lp); end
|
|
220
|
+
def _findstring(wp, lp) SendMessage(CB_FINDSTRING, wp, lp); end
|
|
221
|
+
def _getcursel(wp, lp) SendMessage(CB_GETCURSEL, wp, lp); end
|
|
222
|
+
def _setcursel(wp, lp) SendMessage(CB_SETCURSEL, wp, lp); end
|
|
223
|
+
def _setitemdata(wp, lp) SendMessage(CB_SETITEMDATA, wp, lp); end
|
|
224
|
+
def _getitemdata(wp, lp) SendMessage(CB_GETITEMDATA, wp, lp); end
|
|
225
|
+
end
|
|
226
|
+
end
|
|
227
|
+
|
|
228
|
+
module WR
|
|
229
|
+
class Myform < Form
|
|
230
|
+
def initialize
|
|
231
|
+
@cbox1 = controls << Combobox[:cbox1, "", 4, 4, 100, 100, :simple, :imeon, :disablenoscroll]
|
|
232
|
+
# @cbox2 = controls << Combobox[:cbox2, "", 110, 4, 100, 100, :disablenoscroll, :dropdown, :autoscroll, :droppedwidth=>200]
|
|
233
|
+
# @cbox3 = controls << Combobox[:cbox1, "", 220, 4, 100, 100]
|
|
234
|
+
# (1..8).each{|i| @cbox1 << "item#{i}"}
|
|
235
|
+
# @cbox2[0, 0] = (1..12).to_a.map{|i| ["item#{i}", i]}
|
|
236
|
+
# @cbox2.cursel = -1
|
|
237
|
+
# @cbox2.size = 100, 128
|
|
238
|
+
_<< Button[:button1, "Click me", 10, 200, 80, 24]
|
|
239
|
+
end
|
|
240
|
+
|
|
241
|
+
API.defun "GetWindow(HWND hwnd, UINT uCmd)"
|
|
242
|
+
API.defun "EnumChildWindows(HWND, ENUMPROC, LPARAM)"
|
|
243
|
+
GW_CHILD = 5
|
|
244
|
+
|
|
245
|
+
def button1_clicked(*)
|
|
246
|
+
@cbox1.style |= CBS_DROPDOWNLIST
|
|
247
|
+
end
|
|
248
|
+
|
|
249
|
+
def created()
|
|
250
|
+
dpp @cbox1.h
|
|
251
|
+
@cbox1.style |= CBS_DROPDOWN
|
|
252
|
+
@cbox1.h = 100
|
|
253
|
+
dpp @cbox1.h, @cbox1.droppedheight
|
|
254
|
+
# dpp @cbox3.droppedheight, @cbox3.h, @cbox2.position, @cbox1.droppedsize
|
|
255
|
+
## dpp @cbox1.selection
|
|
256
|
+
## @cbox2.inject([]){|a, i| a << [i, i.data]} s
|
|
257
|
+
# # dpp API.GetWindow(@cbox2._hwnd, GW_CHILD)
|
|
258
|
+
# children = []
|
|
259
|
+
# API.EnumChildWindows(@cbox1._hwnd, lambda{|hwnd, lp| children << hwnd ; 1}, 0)
|
|
260
|
+
# children.each{|hwnd|
|
|
261
|
+
# ctrl = WinControl.new_from_handle(hwnd)
|
|
262
|
+
# ctrl.register_event(WM_LBUTTONDOWN, "mousedown", "ih")
|
|
263
|
+
# ctrl.SetWindowSubclass
|
|
264
|
+
# def ctrl.mousedown(*args); dpp args#, self.parent.h
|
|
265
|
+
# CancelDefWindowProc
|
|
266
|
+
# end
|
|
267
|
+
# }
|
|
268
|
+
#dpp @childedit = WinControl.new_from_handle(API.GetWindow(@cbox1._hwnd, GW_CHILD));
|
|
269
|
+
# @childedit.SetWindowSubclass
|
|
270
|
+
# @childedit.register_event(WM_LBUTTONDOWN, "mousedown", "ih")
|
|
271
|
+
# dpp @childedit
|
|
272
|
+
# def @childedit.mousedown(*args); dpp args, self.parent.h
|
|
273
|
+
# CancelDefWindowProc
|
|
274
|
+
# end
|
|
275
|
+
#
|
|
276
|
+
# dpp @cbox2.SendMessage(CB_GETITEMHEIGHT, -1, 0)
|
|
277
|
+
end
|
|
278
|
+
|
|
279
|
+
self.start
|
|
280
|
+
end
|
|
281
|
+
|
|
282
|
+
end if __FILE__==$0
|