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,35 @@
|
|
|
1
|
+
require 'wrb'
|
|
2
|
+
module WR
|
|
3
|
+
|
|
4
|
+
# Defines a particular format for text, including font face, size, and style attributes.
|
|
5
|
+
# <br>See also <a href="https://docs.microsoft.com/en-us/windows/desktop/gdi/windows-gdi">
|
|
6
|
+
# GDI section of Microsft Docs</a>
|
|
7
|
+
class Font
|
|
8
|
+
=begin
|
|
9
|
+
This is a document holder.
|
|
10
|
+
self.new(facename, fontheigt, style|bold=nil, italic=nil, underline=nil, strikeout=nil)
|
|
11
|
+
Creates a new font with specified arguments.
|
|
12
|
+
<br>Give a String as facename and an Integer as fontheight.
|
|
13
|
+
Give combination of "b", "i", "u", "s" as style. Otherwize, give true/false as each arguments.
|
|
14
|
+
|
|
15
|
+
Following methods are defined at the super class.
|
|
16
|
+
:singleton_methods
|
|
17
|
+
self.wraphandle(hfont)
|
|
18
|
+
|
|
19
|
+
:instance_methods
|
|
20
|
+
_hfont()
|
|
21
|
+
Retrieves a font handle of self. Returns 32/64 bits integer as it.
|
|
22
|
+
dispose()
|
|
23
|
+
Destroies self and removes from resource table and sets hfont to 0. Returns true/false.
|
|
24
|
+
external?()
|
|
25
|
+
Retreives whether this font is external or not.<br> Returns true/false.
|
|
26
|
+
facename()
|
|
27
|
+
Retreives name of this font, such as "Meiryo" and so on.<br> Returnes a String.
|
|
28
|
+
height()
|
|
29
|
+
Retreives height of this font as `em height'.<br> Retruns an Integer.
|
|
30
|
+
logfont()
|
|
31
|
+
Retreives a CStruct object. Wrap this with <i>LOGFONT</i> structure to handle by names.
|
|
32
|
+
|
|
33
|
+
=end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# The toplevel window
|
|
2
|
+
|
|
3
|
+
#require 'wrb'
|
|
4
|
+
require 'wrb/toplevelcommon'
|
|
5
|
+
|
|
6
|
+
module WR
|
|
7
|
+
# The top level window that is also a container of controls.
|
|
8
|
+
# <br>See also <a href="https://docs.microsoft.com/en-us/windows/desktop/api/_winmsg/">
|
|
9
|
+
# Windows and Messages section of Microsoft Docs.</a>
|
|
10
|
+
class Form < Window
|
|
11
|
+
include ModToplevelWin
|
|
12
|
+
|
|
13
|
+
undef SetWindowSubclass, RemoveWindowSubclass
|
|
14
|
+
DefaultWindowStyle = WS_VISIBLE | WS_OVERLAPPEDWINDOW
|
|
15
|
+
|
|
16
|
+
#
|
|
17
|
+
def create()
|
|
18
|
+
# self.font = Font.wraphandle(Font::DefaultGuiFontHandle)
|
|
19
|
+
@_classname = "RUBYWIN"
|
|
20
|
+
@_style ||= DefaultWindowStyle
|
|
21
|
+
@_idcmd = 0
|
|
22
|
+
@_x ||= CW_USEDEFAULT
|
|
23
|
+
@_y ||= CW_USEDEFAULT
|
|
24
|
+
@_w ||= CW_USEDEFAULT
|
|
25
|
+
@_h ||= CW_USEDEFAULT
|
|
26
|
+
register_event(WM_GETFONT, "__getfont__")
|
|
27
|
+
super
|
|
28
|
+
self.icon = @_icon if @_icon
|
|
29
|
+
SendMessage(WM_SIZE, 0, MAKELPARAM(*self.clientsize))
|
|
30
|
+
self.transparency = @_transparency if @_transparency
|
|
31
|
+
self.transparentcolor = @_transparentcolor if @_transparentcolor
|
|
32
|
+
self
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
module WR
|
|
38
|
+
class Form1 < Form
|
|
39
|
+
def initialize
|
|
40
|
+
# self.inheritfont = 'Meiryo', -12
|
|
41
|
+
self.size = 640, 480
|
|
42
|
+
_<< Button[:bt1, 'Click me', 0, 0, 100, 24]
|
|
43
|
+
# self.transparency = 255 #,128
|
|
44
|
+
self.events = :activate
|
|
45
|
+
# self.transparency = 128
|
|
46
|
+
# hide
|
|
47
|
+
end
|
|
48
|
+
def created()
|
|
49
|
+
_<< Button[:bt2, 'Click me too', 0, 30, 100, 24]
|
|
50
|
+
show
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def self_activate(*args)
|
|
54
|
+
# dp "@%#x", self.transparency # Not work ???
|
|
55
|
+
# dpp args
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def bt1_clicked(*)
|
|
59
|
+
self.transparentcolor = 0xf0f0f0
|
|
60
|
+
# self.transparency = nil
|
|
61
|
+
dpp transparency
|
|
62
|
+
end
|
|
63
|
+
self.start
|
|
64
|
+
end
|
|
65
|
+
end if $0 == __FILE__
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
module WR
|
|
2
|
+
require_relative './button' unless defined? Button
|
|
3
|
+
|
|
4
|
+
# This control is a rectangle that surrounds a set of controls, such as check boxes or radio buttons. <br>
|
|
5
|
+
# See also <a href="https://docs.microsoft.com/en-us/windows/desktop/Controls/
|
|
6
|
+
#window-controls"> Windows Control section of Microsoft Docs.</a>
|
|
7
|
+
class Groupbox < Button
|
|
8
|
+
attr_reader :_controls
|
|
9
|
+
# def self.sym2style(*args) _sym2style(Button::WinStyles, args); end
|
|
10
|
+
DefaultWindowStyle = BS_GROUPBOX
|
|
11
|
+
|
|
12
|
+
def initialize(*args)
|
|
13
|
+
super
|
|
14
|
+
@_style |= DefaultWindowStyle
|
|
15
|
+
@_controls = Collection.new
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Adds a control to this group box.<br>
|
|
19
|
+
# Give a WinControl as ctrl.
|
|
20
|
+
def <<(ctrl)
|
|
21
|
+
cnt = parent.controls << ctrl
|
|
22
|
+
cnt.style |= WS_GROUP if @_controls.empty?
|
|
23
|
+
@_controls << cnt
|
|
24
|
+
class << cnt
|
|
25
|
+
attr_accessor :_owner
|
|
26
|
+
def delete()
|
|
27
|
+
@_owner._controls.delete(self)
|
|
28
|
+
super
|
|
29
|
+
end
|
|
30
|
+
def x()
|
|
31
|
+
super - @_owner.x
|
|
32
|
+
end
|
|
33
|
+
def y()
|
|
34
|
+
super - @_owner.y
|
|
35
|
+
end
|
|
36
|
+
def x=(_x)
|
|
37
|
+
super(_x+@_owner.x)
|
|
38
|
+
end
|
|
39
|
+
def y=(_y)
|
|
40
|
+
super(_y+@_owner.y)
|
|
41
|
+
end
|
|
42
|
+
def move(*args)
|
|
43
|
+
args[0] += @_owner.x
|
|
44
|
+
args[1] += @_owner.y
|
|
45
|
+
super
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
cnt._owner = self
|
|
49
|
+
cx, cy = cnt.clientpos
|
|
50
|
+
cnt.move(cx, cy)
|
|
51
|
+
cnt
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# Removes controls from this group box ad deletes self.
|
|
55
|
+
def delete()
|
|
56
|
+
@_controls.each{|i| i.delete}
|
|
57
|
+
super
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# Retreives an control of given index in the group box.<br>
|
|
61
|
+
# Give an Integer as idx.
|
|
62
|
+
def [](idx)
|
|
63
|
+
@_controls[idx]
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
# Removes a control from the group. (Not deleted)<br>
|
|
67
|
+
# Give a WinControl as ctrl.
|
|
68
|
+
def remove(ctrl)
|
|
69
|
+
@_controls.delete(ctrl)
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
# move(x, y[, w, h])
|
|
73
|
+
# Moves controls of this group box according to this coordinates.<br>
|
|
74
|
+
# Give the integers as x, y, w, h.
|
|
75
|
+
def move(*args)
|
|
76
|
+
@_controls.each{|i| i.move(i.x+args[0]-x, i.y+args[1]-y)} if @_controls
|
|
77
|
+
super
|
|
78
|
+
parent.refresh if alive?
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
# Changes visible state of this and controls.<br>
|
|
82
|
+
# Give true/false as f.
|
|
83
|
+
def visible=(f)
|
|
84
|
+
super
|
|
85
|
+
@_controls.each{|i| i.visible = f}
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
# Retreives an index of control in the group.<br>
|
|
89
|
+
# Give a WinControl as ctrl.
|
|
90
|
+
def index_of(ctrl)
|
|
91
|
+
@_controls.index(ctrl)
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
module WR
|
|
97
|
+
class Form1 < Form
|
|
98
|
+
def initialize
|
|
99
|
+
resize 640, 480
|
|
100
|
+
controls << Button[:bt1, "Button", 0, 10, 100, 24]
|
|
101
|
+
# # sample of groupbox and raidobuttons
|
|
102
|
+
# controls << [Groupbox, :group1, 'Group1', 10, 100, 200, 200]
|
|
103
|
+
# controls.group1 << [Radiobutton, :rdbutton1, 'click me', 10, 20, 100, 30]
|
|
104
|
+
# controls.group1 << [Radiobutton, :rdbutton2, 'click me', 10, 50, 100, 30]
|
|
105
|
+
# controls.group1 << [Radiobutton, :rdbutton3, 'click me', 10, 80, 100, 30]
|
|
106
|
+
|
|
107
|
+
# sample of control array
|
|
108
|
+
controls << Groupbox[:group2, 'Group2', 10, 100, 200, 200]
|
|
109
|
+
controls.group2 << Radiobutton[:rdbutton, 'click me', 10, 20, 100, 30, :flat]
|
|
110
|
+
# controls.group2 << Radiobutton[:rdbutton, 'click me', 10, 50, 100, 30, :flat]
|
|
111
|
+
# controls.group2 << Radiobutton[:rdbutton, 'click me', 10, 80, 100, 30, :flat]
|
|
112
|
+
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
def bt1_clicked(*)
|
|
116
|
+
controls.group2.move(210, 100)
|
|
117
|
+
# _rdbutton1.position = 0, 0
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
self.start
|
|
121
|
+
end
|
|
122
|
+
end if $0 == __FILE__
|
|
@@ -0,0 +1,479 @@
|
|
|
1
|
+
require 'wrb'
|
|
2
|
+
require 'wrb/commctrlconst'
|
|
3
|
+
|
|
4
|
+
module WR
|
|
5
|
+
module RC
|
|
6
|
+
HDS_HORZ = 0x0
|
|
7
|
+
HDS_BUTTONS = 0x2
|
|
8
|
+
HDS_HOTTRACK = 0x4
|
|
9
|
+
HDS_HIDDEN = 0x8
|
|
10
|
+
HDS_DRAGDROP = 0x40
|
|
11
|
+
HDS_FULLDRAG = 0x80
|
|
12
|
+
HDS_FILTERBAR = 0x100
|
|
13
|
+
HDS_FLAT = 0x200
|
|
14
|
+
#if (_WIN32_WINNT >= 0x0600)
|
|
15
|
+
HDS_CHECKBOXES = 0x400
|
|
16
|
+
HDS_NOSIZING = 0x800
|
|
17
|
+
HDS_OVERFLOW = 0x1000
|
|
18
|
+
#endif
|
|
19
|
+
|
|
20
|
+
HDFT_ISSTRING = 0x0
|
|
21
|
+
HDFT_ISNUMBER = 0x1
|
|
22
|
+
HDFT_HASNOVALUE = 0x8000
|
|
23
|
+
|
|
24
|
+
HDI_WIDTH = 0x1
|
|
25
|
+
HDI_HEIGHT = HDI_WIDTH
|
|
26
|
+
HDI_TEXT = 0x2
|
|
27
|
+
HDI_FORMAT = 0x4
|
|
28
|
+
HDI_LPARAM = 0x8
|
|
29
|
+
HDI_BITMAP = 0x10
|
|
30
|
+
HDI_IMAGE = 0x20
|
|
31
|
+
HDI_DI_SETITEM = 0x40
|
|
32
|
+
HDI_ORDER = 0x80
|
|
33
|
+
HDI_FILTER = 0x100
|
|
34
|
+
|
|
35
|
+
HDF_LEFT = 0x0
|
|
36
|
+
HDF_RIGHT = 0x1
|
|
37
|
+
HDF_CENTER = 0x2
|
|
38
|
+
HDF_JUSTIFYMASK = 0x3
|
|
39
|
+
HDF_RTLREADING = 0x4
|
|
40
|
+
|
|
41
|
+
HDF_OWNERDRAW = 0x8000
|
|
42
|
+
HDF_STRING = 0x4000
|
|
43
|
+
HDF_BITMAP = 0x2000
|
|
44
|
+
HDF_BITMAP_ON_RIGHT = 0x1000
|
|
45
|
+
HDF_IMAGE = 0x800
|
|
46
|
+
HDF_SORTUP = 0x400
|
|
47
|
+
HDF_SORTDOWN = 0x200
|
|
48
|
+
#if (_WIN32_WINNT >= = 0x0600)
|
|
49
|
+
HDF_CHECKBOX = 0x40
|
|
50
|
+
HDF_CHECKED = 0x80
|
|
51
|
+
HDF_FIXEDWIDTH = 0x100
|
|
52
|
+
HDF_SPLITBUTTON = 0x1000000
|
|
53
|
+
#endif
|
|
54
|
+
|
|
55
|
+
HDM_FIRST = 0x1200
|
|
56
|
+
HDM_GETITEMCOUNT = HDM_FIRST+0
|
|
57
|
+
HDM_INSERTITEMA = HDM_FIRST+1
|
|
58
|
+
HDM_INSERTITEMW = HDM_FIRST+10
|
|
59
|
+
HDM_DELETEITEM = HDM_FIRST+2
|
|
60
|
+
HDM_GETITEMA = HDM_FIRST+3
|
|
61
|
+
HDM_GETITEMW = HDM_FIRST+11
|
|
62
|
+
HDM_SETITEMA = HDM_FIRST+4
|
|
63
|
+
HDM_SETITEMW = HDM_FIRST+12
|
|
64
|
+
|
|
65
|
+
if UNICODE
|
|
66
|
+
HDM_INSERTITEM = HDM_INSERTITEMW
|
|
67
|
+
HDM_GETITEM = HDM_GETITEMW
|
|
68
|
+
HDM_SETITEM = HDM_SETITEMW
|
|
69
|
+
else
|
|
70
|
+
HDM_INSERTITEM = HDM_INSERTITEMA
|
|
71
|
+
HDM_GETITEM = HDM_GETITEMA
|
|
72
|
+
HDM_SETITEM = HDM_SETITEMA
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
HHT_NOWHERE = 0x1
|
|
76
|
+
HHT_ONHEADER = 0x2
|
|
77
|
+
HHT_ONDIVIDER = 0x4
|
|
78
|
+
HHT_ONDIVOPEN = 0x8
|
|
79
|
+
HHT_ONFILTER = 0x10
|
|
80
|
+
HHT_ONFILTERBUTTON = 0x20
|
|
81
|
+
HHT_ABOVE = 0x100
|
|
82
|
+
HHT_BELOW = 0x200
|
|
83
|
+
HHT_TORIGHT = 0x400
|
|
84
|
+
HHT_TOLEFT = 0x800
|
|
85
|
+
|
|
86
|
+
HDM_GETITEMRECT = HDM_FIRST+7
|
|
87
|
+
HDM_SETIMAGELIST = HDM_FIRST+8
|
|
88
|
+
HDM_GETIMAGELIST = HDM_FIRST+9
|
|
89
|
+
HDM_ORDERTOINDEX = HDM_FIRST+15
|
|
90
|
+
HDM_CREATEDRAGIMAGE = HDM_FIRST+16
|
|
91
|
+
HDM_GETORDERARRAY = HDM_FIRST+17
|
|
92
|
+
HDM_SETORDERARRAY = HDM_FIRST+18
|
|
93
|
+
HDM_SETHOTDIVIDER = HDM_FIRST+19
|
|
94
|
+
HDM_SETBITMAPMARGIN = HDM_FIRST+20
|
|
95
|
+
HDM_GETBITMAPMARGIN = HDM_FIRST+21
|
|
96
|
+
HDM_SETUNICODEFORMAT = CCM_SETUNICODEFORMAT
|
|
97
|
+
HDM_GETUNICODEFORMAT = CCM_GETUNICODEFORMAT
|
|
98
|
+
HDM_SETFILTERCHANGETIMEOUT = HDM_FIRST+22
|
|
99
|
+
HDM_EDITFILTER = HDM_FIRST+23
|
|
100
|
+
HDM_CLEARFILTER = HDM_FIRST+24
|
|
101
|
+
|
|
102
|
+
HDN_FIRST = -300
|
|
103
|
+
HDN_ITEMCHANGINGA = HDN_FIRST-0
|
|
104
|
+
HDN_ITEMCHANGINGW = HDN_FIRST-20
|
|
105
|
+
HDN_ITEMCHANGEDA = HDN_FIRST-1
|
|
106
|
+
HDN_ITEMCHANGEDW = HDN_FIRST-21
|
|
107
|
+
HDN_ITEMCLICKA = HDN_FIRST-2
|
|
108
|
+
HDN_ITEMCLICKW = HDN_FIRST-22
|
|
109
|
+
HDN_ITEMDBLCLICKA = HDN_FIRST-3
|
|
110
|
+
HDN_ITEMDBLCLICKW = HDN_FIRST-23
|
|
111
|
+
HDN_DIVIDERDBLCLICKA = HDN_FIRST-5
|
|
112
|
+
HDN_DIVIDERDBLCLICKW = HDN_FIRST-25
|
|
113
|
+
HDN_BEGINTRACKA = HDN_FIRST-6
|
|
114
|
+
HDN_BEGINTRACKW = HDN_FIRST-26
|
|
115
|
+
HDN_ENDTRACKA = HDN_FIRST-7
|
|
116
|
+
HDN_ENDTRACKW = HDN_FIRST-27
|
|
117
|
+
HDN_TRACKA = HDN_FIRST-8
|
|
118
|
+
HDN_TRACKW = HDN_FIRST-28
|
|
119
|
+
HDN_GETDISPINFOA = HDN_FIRST-9
|
|
120
|
+
HDN_GETDISPINFOW = HDN_FIRST-29
|
|
121
|
+
HDN_BEGINDRAG = HDN_FIRST-10
|
|
122
|
+
HDN_ENDDRAG = HDN_FIRST-11
|
|
123
|
+
HDN_FILTERCHANGE = HDN_FIRST-12
|
|
124
|
+
HDN_FILTERBTNCLICK = HDN_FIRST-13
|
|
125
|
+
|
|
126
|
+
if UNICODE
|
|
127
|
+
HDN_ITEMCHANGING = HDN_ITEMCHANGINGW
|
|
128
|
+
HDN_ITEMCHANGED = HDN_ITEMCHANGEDW
|
|
129
|
+
HDN_ITEMCLICK = HDN_ITEMCLICKW
|
|
130
|
+
HDN_ITEMDBLCLICK = HDN_ITEMDBLCLICKW
|
|
131
|
+
HDN_DIVIDERDBLCLICK = HDN_DIVIDERDBLCLICKW
|
|
132
|
+
HDN_BEGINTRACK = HDN_BEGINTRACKW
|
|
133
|
+
HDN_ENDTRACK = HDN_ENDTRACKW
|
|
134
|
+
HDN_TRACK = HDN_TRACKW
|
|
135
|
+
HDN_GETDISPINFO = HDN_GETDISPINFOW
|
|
136
|
+
else
|
|
137
|
+
HDN_ITEMCHANGING = HDN_ITEMCHANGINGA
|
|
138
|
+
HDN_ITEMCHANGED = HDN_ITEMCHANGEDA
|
|
139
|
+
HDN_ITEMCLICK = HDN_ITEMCLICKA
|
|
140
|
+
HDN_ITEMDBLCLICK = HDN_ITEMDBLCLICKA
|
|
141
|
+
HDN_DIVIDERDBLCLICK = HDN_DIVIDERDBLCLICKA
|
|
142
|
+
HDN_BEGINTRACK = HDN_BEGINTRACKA
|
|
143
|
+
HDN_ENDTRACK = HDN_ENDTRACKA
|
|
144
|
+
HDN_TRACK = HDN_TRACKA
|
|
145
|
+
HDN_GETDISPINFO = HDN_GETDISPINFOA
|
|
146
|
+
end
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
# A window that is usually positioned above columns of text or numbers like a Listview's one.
|
|
150
|
+
# <br>See also <a href="https://docs.microsoft.com/en-us/windows/desktop/Controls/
|
|
151
|
+
# window-controls"> Windows Control section of Microsoft Docs.</a>
|
|
152
|
+
class Header < WinControl
|
|
153
|
+
include ModCommCtrl
|
|
154
|
+
include RC
|
|
155
|
+
|
|
156
|
+
HDTEXTFILTER = API.defstruct "
|
|
157
|
+
LPSTR pszText;
|
|
158
|
+
INT cchTextMax;"
|
|
159
|
+
|
|
160
|
+
HDITEM = API.defstruct "
|
|
161
|
+
UINT mask;
|
|
162
|
+
int cxy;
|
|
163
|
+
LPTSTR pszText;
|
|
164
|
+
HBITMAP hbm;
|
|
165
|
+
int cchTextMax;
|
|
166
|
+
int fmt;
|
|
167
|
+
LPARAM lParam;
|
|
168
|
+
int iImage;
|
|
169
|
+
int iOrder;
|
|
170
|
+
UINT type;
|
|
171
|
+
void* pvFilter;"
|
|
172
|
+
|
|
173
|
+
HD_LAYOUT = API.defstruct "
|
|
174
|
+
RECT *prc;
|
|
175
|
+
WINDOWPOS *pwpos;"
|
|
176
|
+
|
|
177
|
+
HD_HITTESTINFO = API.defstruct "
|
|
178
|
+
POINT pt;
|
|
179
|
+
UINT flags;
|
|
180
|
+
int iItem;"
|
|
181
|
+
|
|
182
|
+
NMHEADER = API.defstruct "
|
|
183
|
+
NMHDR hdr;
|
|
184
|
+
int iItem;
|
|
185
|
+
int iButton;
|
|
186
|
+
HDITEM *pitem;"
|
|
187
|
+
|
|
188
|
+
HeaderFormats = {
|
|
189
|
+
:left => HDF_LEFT,
|
|
190
|
+
:right => HDF_RIGHT,
|
|
191
|
+
:center => HDF_CENTER,
|
|
192
|
+
:justifymask => HDF_JUSTIFYMASK,
|
|
193
|
+
:rtlreading => HDF_RTLREADING,
|
|
194
|
+
:ownerdraw => HDF_OWNERDRAW,
|
|
195
|
+
:string => HDF_STRING,
|
|
196
|
+
:bitmap => HDF_BITMAP,
|
|
197
|
+
:bitmap_on_right => HDF_BITMAP_ON_RIGHT,
|
|
198
|
+
:image => HDF_IMAGE,
|
|
199
|
+
:sortup => HDF_SORTUP,
|
|
200
|
+
:sortdown => HDF_SORTDOWN,
|
|
201
|
+
:checkbox => HDF_CHECKBOX,
|
|
202
|
+
:checked => HDF_CHECKED,
|
|
203
|
+
:fixedwidth => HDF_FIXEDWIDTH,
|
|
204
|
+
:splitbutton => HDF_SPLITBUTTON
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
WinStyles= {
|
|
208
|
+
:horz => HDS_HORZ,
|
|
209
|
+
:buttons => HDS_BUTTONS,
|
|
210
|
+
:hottrack => HDS_HOTTRACK,
|
|
211
|
+
:hidden => HDS_HIDDEN,
|
|
212
|
+
:dragdrop => HDS_DRAGDROP,
|
|
213
|
+
:fulldrag => HDS_FULLDRAG,
|
|
214
|
+
:filterbar => HDS_FILTERBAR,
|
|
215
|
+
:flat => HDS_FLAT,
|
|
216
|
+
:checkboxes => HDS_CHECKBOXES,
|
|
217
|
+
:nosizing => HDS_NOSIZING,
|
|
218
|
+
:overflow => HDS_OVERFLOW
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
PreDefinedEvents = {
|
|
222
|
+
:begindrag => [WM_NOTIFY, HDN_BEGINDRAG, 'xs', NMHEADER],
|
|
223
|
+
:enddrag => [WM_NOTIFY, HDN_ENDDRAG, 'xs', NMHEADER],
|
|
224
|
+
:filterchange => [WM_NOTIFY, HDN_FILTERCHANGE, 'xs', NMHEADER],
|
|
225
|
+
:filterbtnclick => [WM_NOTIFY, HDN_FILTERBTNCLICK, 'xs', NMHEADER],
|
|
226
|
+
:itemchanging => [WM_NOTIFY, HDN_ITEMCHANGING, 'xs', NMHEADER],
|
|
227
|
+
:itemchanged => [WM_NOTIFY, HDN_ITEMCHANGED, 'xs', NMHEADER],
|
|
228
|
+
:itemclick => [WM_NOTIFY, HDN_ITEMCLICK, 'xs', NMHEADER],
|
|
229
|
+
:itemdblclick => [WM_NOTIFY, HDN_ITEMDBLCLICK, 'xs', NMHEADER],
|
|
230
|
+
:dividerdblclick => [WM_NOTIFY, HDN_DIVIDERDBLCLICK, 'xs', NMHEADER],
|
|
231
|
+
:begintrack => [WM_NOTIFY, HDN_BEGINTRACK, 'xs', NMHEADER],
|
|
232
|
+
:endtrack => [WM_NOTIFY, HDN_ENDTRACK, 'xs', NMHEADER],
|
|
233
|
+
:track => [WM_NOTIFY, HDN_TRACK, 'xs', NMHEADER],
|
|
234
|
+
:getdispinfo => [WM_NOTIFY, HDN_GETDISPINFO, 'xs', NMHEADER]
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
# ( Nothing )
|
|
238
|
+
DefaultEvents = []
|
|
239
|
+
|
|
240
|
+
class Item # Wrapper of HDITEM and index
|
|
241
|
+
include RC
|
|
242
|
+
|
|
243
|
+
ItemFormats = {
|
|
244
|
+
:left => HDF_LEFT,
|
|
245
|
+
:right => HDF_RIGHT,
|
|
246
|
+
:center => HDF_CENTER,
|
|
247
|
+
:justifymask => HDF_JUSTIFYMASK,
|
|
248
|
+
:rtlreading => HDF_RTLREADING,
|
|
249
|
+
:ownerdraw => HDF_OWNERDRAW,
|
|
250
|
+
:string => HDF_STRING,
|
|
251
|
+
:bitmap => HDF_BITMAP,
|
|
252
|
+
:bitmap_on_right => HDF_BITMAP_ON_RIGHT,
|
|
253
|
+
:image => HDF_IMAGE,
|
|
254
|
+
:sortup => HDF_SORTUP,
|
|
255
|
+
:sortdown => HDF_SORTDOWN,
|
|
256
|
+
:checkbox => HDF_CHECKBOX,
|
|
257
|
+
:checked => HDF_CHECKED,
|
|
258
|
+
:fixedwidth => HDF_FIXEDWIDTH,
|
|
259
|
+
:splitbutton => HDF_SPLITBUTTON
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
def self.[](*args) self.new(*args); end
|
|
263
|
+
|
|
264
|
+
def initialize(*args)
|
|
265
|
+
@owner = args.shift if args[0].is_a?(RWin::Window)
|
|
266
|
+
@index = args.shift
|
|
267
|
+
if args.empty?
|
|
268
|
+
@hditem = HDITEM.new
|
|
269
|
+
return # hold only index
|
|
270
|
+
end
|
|
271
|
+
fmt = 0
|
|
272
|
+
while args.last.is_a?(Symbol)
|
|
273
|
+
fmt |= ItemFormats[args.pop].to_i
|
|
274
|
+
end
|
|
275
|
+
str, cxy, iimage = args
|
|
276
|
+
@hditem = HDITEM[HDI_TEXT | HDI_FORMAT | HDI_WIDTH | HDI_IMAGE*(iimage ? 1 : 0),
|
|
277
|
+
cxy.to_i, str.to_s, 0, str.size, fmt]
|
|
278
|
+
hditem.iImage = iimage.to_i
|
|
279
|
+
end
|
|
280
|
+
|
|
281
|
+
def owner=(win)
|
|
282
|
+
@owner = win
|
|
283
|
+
end
|
|
284
|
+
def owner()
|
|
285
|
+
@owner
|
|
286
|
+
end
|
|
287
|
+
|
|
288
|
+
def index=(idx)
|
|
289
|
+
@index=idx
|
|
290
|
+
end
|
|
291
|
+
def index()
|
|
292
|
+
@index
|
|
293
|
+
end
|
|
294
|
+
|
|
295
|
+
def format=(*args)
|
|
296
|
+
fmt=0
|
|
297
|
+
while args.last.is_a?(Symbol)
|
|
298
|
+
fmt |= ItemFormats[args.pop].to_i
|
|
299
|
+
end
|
|
300
|
+
fmt |= args[0] unless args.empty?
|
|
301
|
+
if @owner.alive?
|
|
302
|
+
@hditem.mask = HDI_FORMAT
|
|
303
|
+
@hditem.fmt = fmt
|
|
304
|
+
update
|
|
305
|
+
else
|
|
306
|
+
@format=fmt
|
|
307
|
+
end
|
|
308
|
+
end
|
|
309
|
+
def format()
|
|
310
|
+
if @owner.alive?
|
|
311
|
+
@hditem.mask = HDI_FORMAT
|
|
312
|
+
SendMessage(HDM_GETITEM, @index, @hditem)
|
|
313
|
+
@hditem.fmt
|
|
314
|
+
else
|
|
315
|
+
@format
|
|
316
|
+
end
|
|
317
|
+
end
|
|
318
|
+
|
|
319
|
+
def text=(str)
|
|
320
|
+
@hditem.mask = HDI_TEXT
|
|
321
|
+
@hditem.pszText = str.to_s
|
|
322
|
+
@hditem.cchTextMax = str.size
|
|
323
|
+
@owner.SendMessage(HDM_SETITEM, @index, @hditem)
|
|
324
|
+
end
|
|
325
|
+
def text()
|
|
326
|
+
@hditem.mask = HDI_TEXT
|
|
327
|
+
buff = TCHAR[260]
|
|
328
|
+
@hditem.cchTextMax = buff.size
|
|
329
|
+
@hditem.pszText = buff
|
|
330
|
+
@owner.SendMessage(HDM_GETITEM, @index, @hditem)
|
|
331
|
+
buff.to_s
|
|
332
|
+
end
|
|
333
|
+
|
|
334
|
+
def image=(idx)
|
|
335
|
+
@hditem.mask = HDI_IMAGE
|
|
336
|
+
@hditem.iImage = idx.to_i
|
|
337
|
+
@owner.SendMessage(HDM_SETITEM, @index, @hditem)
|
|
338
|
+
end
|
|
339
|
+
def imgage()
|
|
340
|
+
@hditem.mask = HDI_IMAGE
|
|
341
|
+
@owner.SendMessage(HDM_GETITEM, @index, @hditem)
|
|
342
|
+
@hditem.iImage
|
|
343
|
+
end
|
|
344
|
+
|
|
345
|
+
def data=(dt)
|
|
346
|
+
@hditem.mask = HDI_LPARAM
|
|
347
|
+
@owner.SendMessage(HDM_GETITEM, @index, @hditem)
|
|
348
|
+
lparam = @hditem.lParam
|
|
349
|
+
if (lparam&1)==0 && lparam>NilID
|
|
350
|
+
data = ObjectSpace._id2ref(lparam)
|
|
351
|
+
if n = @owner._ar_data.index(data)
|
|
352
|
+
@owner._ar_data.delete_at(n)
|
|
353
|
+
end
|
|
354
|
+
end
|
|
355
|
+
@hditem.lParam = dt.__id__
|
|
356
|
+
@owner.SendMessage(HDM_SETITEM, @index, @hditem)
|
|
357
|
+
if (lparam&1)==0 && lparam>NilID
|
|
358
|
+
@owner._ar_data << data
|
|
359
|
+
end
|
|
360
|
+
end
|
|
361
|
+
def data()
|
|
362
|
+
@hditem.mask = HDI_LPARAM
|
|
363
|
+
@owner.SendMessage(HDM_GETITEM, @index, @hditem)
|
|
364
|
+
ObjectSpace._id2ref(@hditem.lParam)
|
|
365
|
+
end
|
|
366
|
+
|
|
367
|
+
def hditem()
|
|
368
|
+
@hditem
|
|
369
|
+
end
|
|
370
|
+
def update()
|
|
371
|
+
@owner.SendMessage(HDM_SETITEM, @index, @hditem)
|
|
372
|
+
end
|
|
373
|
+
end # class Item
|
|
374
|
+
|
|
375
|
+
########################### Main ###########################
|
|
376
|
+
|
|
377
|
+
attr_reader :_ar_data
|
|
378
|
+
def initialize(*args)
|
|
379
|
+
super
|
|
380
|
+
@_classname = "SysHeader32"
|
|
381
|
+
@_acceptable_events = PreDefinedEvents.dup
|
|
382
|
+
@_ar_data = []
|
|
383
|
+
@_items = []
|
|
384
|
+
end
|
|
385
|
+
|
|
386
|
+
#
|
|
387
|
+
def create()
|
|
388
|
+
super
|
|
389
|
+
@_items.each_with_index{|val, idx| insert_item(idx, *val)}
|
|
390
|
+
self.imagelist = @_imagelist if @_imagelist
|
|
391
|
+
@_items = @_imagelist = nil
|
|
392
|
+
end
|
|
393
|
+
|
|
394
|
+
# Inserts item at specified args.<br>
|
|
395
|
+
# `formats' can be both an integer or some symbols.
|
|
396
|
+
def insert_item(index, text, width=nil, image=nil, *formats)
|
|
397
|
+
if alive?
|
|
398
|
+
fmt = formats[0].is_a?(Integer) ? formats[0] : 0
|
|
399
|
+
while formats.last.is_a?(Symbol) #; dpp args.last
|
|
400
|
+
fmt = fmt | HeaderFormats[formats.pop]
|
|
401
|
+
end
|
|
402
|
+
hditem = HDITEM[HDI_TEXT | HDI_FORMAT | HDI_WIDTH | HDI_IMAGE*(image ? 1 : 0),
|
|
403
|
+
width.to_i, text.to_s, 0, text.size, fmt]
|
|
404
|
+
hditem.iImage = image.to_i
|
|
405
|
+
SendMessage(HDM_INSERTITEM, index.to_i, hditem)
|
|
406
|
+
else
|
|
407
|
+
@_items[index] = text, width, image, *formats
|
|
408
|
+
end
|
|
409
|
+
end
|
|
410
|
+
|
|
411
|
+
|
|
412
|
+
# Deletes an item at specified index from this heder control.
|
|
413
|
+
def delete_item(index)
|
|
414
|
+
alive? ? SendMessage(HDM_DELETEITEM, index.to_i, 0) : @_items.delete_at(index)
|
|
415
|
+
end
|
|
416
|
+
|
|
417
|
+
# Retreives a Header::Item at specified index.
|
|
418
|
+
def fetch(index)
|
|
419
|
+
alive? ? Item.new(self, index) : @_items.fetch(index)
|
|
420
|
+
end
|
|
421
|
+
|
|
422
|
+
# Assignes an imagelist to this Header control.
|
|
423
|
+
def imagelist=(il)
|
|
424
|
+
if alive?
|
|
425
|
+
SendMessage(HDM_SETIMAGELIST, 0, il._himagelist)
|
|
426
|
+
else
|
|
427
|
+
@_imagelist = il
|
|
428
|
+
end
|
|
429
|
+
end
|
|
430
|
+
|
|
431
|
+
# Gets an imagelist assigned to this Header control.
|
|
432
|
+
def imagelist()
|
|
433
|
+
alive? ? APP.hrsc2ref(SendMessage(HDM_GETIMAGELIST, 0, 0)) : @_imagelist
|
|
434
|
+
end
|
|
435
|
+
|
|
436
|
+
# Not implemented yet
|
|
437
|
+
def data()
|
|
438
|
+
end
|
|
439
|
+
# Not implemented yet
|
|
440
|
+
def data=(arg)
|
|
441
|
+
end
|
|
442
|
+
|
|
443
|
+
protected
|
|
444
|
+
def _apply_options(arg)
|
|
445
|
+
if st = WinStyles[arg]
|
|
446
|
+
self.style |= st
|
|
447
|
+
return nil
|
|
448
|
+
end
|
|
449
|
+
super
|
|
450
|
+
end
|
|
451
|
+
end
|
|
452
|
+
end
|
|
453
|
+
|
|
454
|
+
module WR
|
|
455
|
+
class MyForm < Form
|
|
456
|
+
def initialize()
|
|
457
|
+
resize 400, 300
|
|
458
|
+
_<< Imagelist.loadb64(:iml, "JJMAIBAYAAwAAgACAACAAf7/f7/AsAYoBQkImnYAAAAACAIEAgRRAMAgQEAEEBQADAwCA2QEgQoAAAAAAAABANhAAAAICB6CAQEAc4BoQCwADAYDAACAgEiAH+AAA/4LoP9/wBzgIBALCEAMFH4MfwdfhD/CZ+FX8L34Z/w4fh5/EF+Iv8Sn4nfxTfiv/Fx+MH8ZX40/xufjl/Hd+Pf8gH5CfyJfkb/JJ+S38o4hmMxmMxmMAAAEQiEQiERJkEEQCilEsP1+v1+v4EAwKRHEsEARLWF8SqWHb7fb7fcEAEWg4JQyqABD/RCIR8CB4ICo9cQQUggfBAN9wQUggfCAJHr9cQmThAfBASESEMAoQFw4FR8MgYEBzlwhgOi33D4NFwCEAEMDAQiJ2pgiAQkCAH/DiCdT87tYgBTrRnmfP/KKAMExZ9/gAARgBgf/QZ+hX9D36OAEImj6jskAgaO1gGkgYBo7fSpGl8FI/6UP0s/pi/TX+nT9Pv6aJVRBqbgHwAH3AA4BBA+AQgHgIIA4DCAGBAgAgUJAwUPwEJR7/R7/gkDWaFwAepqFaMHAD4BCB+AgdTpIf5A=")
|
|
459
|
+
|
|
460
|
+
_<< Header[:hdr1, "header1", 10, 10, 360, 20, :buttons, :dragdrop, :checkboxes, :imagelist=>_.iml]
|
|
461
|
+
_.hdr1.accept_events :itemclick
|
|
462
|
+
_.hdr1.insert_item(0, "text1", 200, 0, :center)
|
|
463
|
+
_.hdr1.insert_item(1, "text2", 100, 1)
|
|
464
|
+
end
|
|
465
|
+
|
|
466
|
+
def created()
|
|
467
|
+
# _.hdr1.imagelist = @iml
|
|
468
|
+
end
|
|
469
|
+
|
|
470
|
+
def hdr1_itemclick(arg)
|
|
471
|
+
idx = arg.iItem
|
|
472
|
+
_.hdr1.fetch(idx).text += "#{idx}"
|
|
473
|
+
_.hdr1.fetch(idx).data = "#{idx}"
|
|
474
|
+
dpp _.hdr1.fetch(idx).data
|
|
475
|
+
_.hdr1.fetch(idx).image = 2
|
|
476
|
+
end
|
|
477
|
+
self.start
|
|
478
|
+
end
|
|
479
|
+
end if __FILE__==$0
|