1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270
|
# -*- coding: utf-8 -*-
#
# text (display styles) widget demo (called by 'widget')
#
# toplevel widget が存在すれば削除する
if defined?($style_demo) && $style_demo
$style_demo.destroy
$style_demo = nil
end
# demo 用の toplevel widget を生成
$style_demo = TkToplevel.new {|w|
title("Text Demonstration - Display Styles")
iconname("style")
positionWindow(w)
}
base_frame = TkFrame.new($style_demo).pack(:fill=>:both, :expand=>true)
# frame 生成
TkFrame.new(base_frame) {|frame|
TkButton.new(frame) {
#text '了解'
text '閉じる'
command proc{
tmppath = $style_demo
$style_demo = nil
tmppath.destroy
}
}.pack('side'=>'left', 'expand'=>'yes')
TkButton.new(frame) {
text 'コード参照'
command proc{showCode 'style'}
}.pack('side'=>'left', 'expand'=>'yes')
}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m')
# text 生成
txt = TkText.new(base_frame){|t|
# 生成
setgrid 'true'
#width 70
#height 32
wrap 'word'
font $font
TkScrollbar.new(base_frame) {|s|
pack('side'=>'right', 'fill'=>'y')
command proc{|*args| t.yview(*args)}
t.yscrollcommand proc{|first,last| s.set first,last}
}
pack('expand'=>'yes', 'fill'=>'both')
# テキストタグ設定 (フォント関連)
family = 'Courier'
if $tk_version =~ /^4.*/
style_tag_bold = TkTextTag.new(t, 'font'=>'-*-Courier-Bold-O-Normal--*-120-*-*-*-*-*-*')
style_tag_big = TkTextTag.new(t, 'font'=>'-*-Courier-Bold-R-Normal--*-140-*-*-*-*-*-*', 'kanjifont'=>$msg_kanji_font)
style_tag_verybig = TkTextTag.new(t, 'font'=>'-*-Helvetica-Bold-R-Normal--*-240-*-*-*-*-*-*')
# style_tag_small = TkTextTag.new(t, 'font'=>'-Adobe-Helvetica-Bold-R-Normal-*-100-*', 'kanjifont'=>$kanji_font)
style_tag_small = TkTextTag.new(t, 'font'=>'-Adobe-Helvetica-Bold-R-Normal-*-100-*')
else
style_tag_bold = TkTextTag.new(t, 'font'=>[family, 12, :bold, :italic])
style_tag_big = TkTextTag.new(t, 'font'=>[family, 14, :bold])
style_tag_verybig = TkTextTag.new(t, 'font'=>['Helvetica', 24, :bold])
style_tag_small = TkTextTag.new(t, 'font'=>'Times 8 bold')
end
###
# case($tk_version)
# when /^4.*/
# style_tag_big = TkTextTag.new(t, 'font'=>'-*-Courier-Bold-R-Normal--*-140-*-*-*-*-*-*', 'kanjifont'=>$msg_kanji_font)
# style_tag_small = TkTextTag.new(t, 'font'=>'-Adobe-Helvetica-Bold-R-Normal-*-100-*', 'kanjifont'=>$kanji_font)
# when /^8.*/
# unless $style_demo_do_first
# $style_demo_do_first = true
# Tk.tk_call('font', 'create', '@bigascii',
# '-copy', '-*-Courier-Bold-R-Normal--*-140-*-*-*-*-*-*')
# Tk.tk_call('font', 'create', '@smallascii',
# '-copy', '-Adobe-Helvetica-Bold-R-Normal-*-100-*')
# Tk.tk_call('font', 'create', '@cBigFont',
# '-compound', '@bigascii @msg_knj')
# Tk.tk_call('font', 'create', '@cSmallFont',
# '-compound', '@smallascii @kanji')
# end
# style_tag_big = TkTextTag.new(t, 'font'=>'@cBigFont')
# style_tag_small = TkTextTag.new(t, 'font'=>'@cSmallFont')
# end
# テキストタグ設定 (色,レリーフ関連)
if TkWinfo.depth($root).to_i > 1
style_tag_color1 = TkTextTag.new(t, 'background'=>'#a0b7ce')
style_tag_color2 = TkTextTag.new(t, 'foreground'=>'red')
style_tag_raised = TkTextTag.new(t, 'relief'=>'raised', 'borderwidth'=>1)
style_tag_sunken = TkTextTag.new(t, 'relief'=>'sunken', 'borderwidth'=>1)
else
style_tag_color1 = TkTextTag.new(t, 'background'=>'black',
'foreground'=>'white')
style_tag_color2 = TkTextTag.new(t, 'background'=>'black',
'foreground'=>'white')
style_tag_raised = TkTextTag.new(t, 'background'=>'white',
'relief'=>'raised', 'borderwidth'=>1)
style_tag_sunken = TkTextTag.new(t, 'background'=>'white',
'relief'=>'sunken', 'borderwidth'=>1)
end
# テキストタグ設定 (その他)
if $tk_version =~ /^4\.[01]/
style_tag_bgstipple = TkTextTag.new(t, 'background'=>'black',
'borderwidth'=>0,
'bgstipple'=>'gray25')
else
style_tag_bgstipple = TkTextTag.new(t, 'background'=>'black',
'borderwidth'=>0,
'bgstipple'=>'gray12')
end
style_tag_fgstipple = TkTextTag.new(t, 'fgstipple'=>'gray50')
style_tag_underline = TkTextTag.new(t, 'underline'=>'on')
style_tag_overstrike = TkTextTag.new(t, 'overstrike'=>'on')
style_tag_right = TkTextTag.new(t, 'justify'=>'right')
style_tag_center = TkTextTag.new(t, 'justify'=>'center')
if $tk_version =~ /^4.*/
style_tag_super = TkTextTag.new(t, 'offset'=>'4p', 'font'=>'-Adobe-Courier-Medium-R-Normal--*-100-*-*-*-*-*-*')
style_tag_sub = TkTextTag.new(t, 'offset'=>'-2p', 'font'=>'-Adobe-Courier-Medium-R-Normal--*-100-*-*-*-*-*-*')
else
style_tag_super = TkTextTag.new(t, 'offset'=>'4p', 'font'=>[family, 10])
style_tag_sub = TkTextTag.new(t, 'offset'=>'-2p', 'font'=>[family, 10])
end
style_tag_margins = TkTextTag.new(t, 'lmargin1'=>'12m', 'lmargin2'=>'6m',
'rmargin'=>'10m')
style_tag_spacing = TkTextTag.new(t, 'spacing1'=>'10p', 'spacing2'=>'2p',
'lmargin1'=>'12m', 'lmargin2'=>'6m',
'rmargin'=>'10m')
# テキスト挿入
insert('end', 'このようにテキスト widget は情報を様々なスタイルで表示すること
ができます。')
insert('end', 'タグ', style_tag_big)
insert('end', 'というメカニズムでコントロールされます。
タグとはテキスト widget 内のある文字 (の範囲)に対して適用できる
単なる名前のことです。タグは様々な表示スタイルに設定できます。
設定すると、そのタグのついた文字は指定したスタイルで表示される
ようになります。使用できる表示スタイルは次の通りです。
')
insert('end', '
1. フォント', style_tag_big)
insert('end', ' どんな X のフォントでも使えます。')
insert('end', 'large', style_tag_verybig)
insert('end', '
とか')
# insert('end', '小さい', style_tag_small)
insert('end', 'small', style_tag_small)
insert('end', 'とか。
')
insert('end', '
2. 色', style_tag_big)
insert('end', ' ')
insert('end', '背景色', style_tag_color1)
insert('end', 'も')
insert('end', '前景色', style_tag_color2)
insert('end', 'も')
insert('end', '両方', style_tag_color1, style_tag_color2)
insert('end', 'とも変えることができます。
')
insert('end', '
3. 網かけ', style_tag_big)
insert('end', ' このように描画の際に')
insert('end', '背景も', style_tag_bgstipple)
insert('end', '文字も', style_tag_fgstipple)
insert('end', '単なる塗りつぶし
でなく、網かけを使うことができます。
')
insert('end', '
4. 下線', style_tag_big)
insert('end', ' このように')
insert('end', '文字に下線を引く', style_tag_underline)
insert('end', 'ことができます。
')
insert('end', '
5. 打ち消し線', style_tag_big)
insert('end', ' このように')
insert('end', '文字に重ねて線を引く', style_tag_overstrike)
insert('end', 'ことができます。
')
insert('end', '
6. 3D 効果', style_tag_big)
insert('end', ' 背景に枠をつけて、文字を')
insert('end', '飛び出す', style_tag_raised)
insert('end', 'ようにしたり')
insert('end', '沈む', style_tag_sunken)
insert('end', '
ようにできます。
')
insert('end', '
7. 行揃え', style_tag_big)
insert('end', ' このように行を
')
insert('end', '左に揃えたり
')
insert('end', '右に揃えたり
', style_tag_right)
insert('end', '真中に揃えたりできます。
', style_tag_center)
insert('end', '
8. 肩付き文字と添字', style_tag_big)
insert('end', ' 10')
insert('end', 'n', style_tag_super)
insert('end', ' のように肩付き文字の効果や、')
insert('end', '
X')
insert('end', 'i', style_tag_sub)
insert('end', 'のように添字の効果を出すことができます。
')
insert('end', '
9. マージン', style_tag_big)
insert('end', 'テキストの左側に余分な空白を置くことができます:
')
insert('end', 'この段落はマージンの使用例です。スクリーン',
style_tag_margins)
insert('end', '上で折り返されて表示されている1行のテキストです。',
style_tag_margins)
insert('end', '左側には2種類のマージンを持ちます。', style_tag_margins)
insert('end', '1行目に対するものと、', style_tag_margins)
insert('end', '2行目以降の連続したマージン', style_tag_margins)
insert('end', 'です。また右側にもマージンがあります。', style_tag_margins)
insert('end', '行の折り返し位置を決めるために使用することができます。
', style_tag_margins)
insert('end', '
10. スペーシング', style_tag_big)
insert('end', '3つのパラメータで行のスペーシングを')
insert('end', '制御す
ることができます。Spacing1で、行の')
insert('end', '上にどのくらいの空間を置くか、
spacing3')
insert('end', 'で行の下にどのくらいの空間を置くか、')
insert('end', '行が折り返されているなら
ば、spacing2で、')
insert('end', 'テキスト行を生成している行の間にどのくらい')
insert('end', 'の空間を置
くかを示します。
')
insert('end', 'これらのインデントされた段落はどのように',
style_tag_spacing)
insert('end', 'スペーシングがが行われるのかを示します。',
style_tag_spacing)
insert('end', '各段落は実際はテキストwidget', style_tag_spacing)
insert('end', 'の1行で、widgetによって折り畳まれています。
', style_tag_spacing)
insert('end', 'Spacing1はこのテキストでは10pointに', style_tag_spacing)
insert('end', '設定されています。', style_tag_spacing)
insert('end', 'これにより、段落の間に大きな間隔が', style_tag_spacing)
insert('end', '存在しています。', style_tag_spacing)
insert('end', 'Spacing2は2pointに設定されています。', style_tag_spacing)
insert('end', 'これで段落の中にほんの少し間隔が存在しています。',
style_tag_spacing)
insert('end', 'Spacing3はこの例では使用されていません。
', style_tag_spacing)
insert('end', '間隔がどこにあるかを見たければ、これらの段落の',
style_tag_spacing)
insert('end', 'なかでテキストを選択してください。選択の', style_tag_spacing)
insert('end', '反転した部分には余分にとられた間隔が', style_tag_spacing)
insert('end', '含まれています。
', style_tag_spacing)
}
txt.width 70
txt.height 32
|