1 type Style
2 {
3 //str pFontName
4 //str pFontBold
5 //str pFontSize
6
7 uint hFont
8 uint fNewFont
9 uint hBrush
10 uint fNewBrush
11
12 uint fTextColor
13 uint pTextColor
14
15 str pDescr
16 //uint FontColor
17 //uint bkcolor
18 }
19
20
21
22 type Styles <inherit=hash index=Style>
23 {
24 }
25
26 method Styles.oftype( uint ctype )
27 {
28 return
29 }
30
31 method Styles.init()
32 {
33 this->hash.oftype( Style )
34 }
35 /*
36 property ustr Style.FontName<result>()
37 {
38 }
39
40 property Style.FontName( ustr name )
41 {
42 }
43
44 property uint Style.FontBold()
45 {
46 }
47
48 property Style.FontBold( uint val )
49 {
50 }*/
51
52 /*method Style.SetFont( str descr )
53 {
54 gt fgt
55 fgt.load( descr )
56
57 }*/
58
59
60
61
62 method Style Styles.GetStyle( str name )
63 {
64 uint find = this.find(name)
65 return find->Style
66 //return this[name]//->Style
67 }
68
69
70 method Style.Free()
71 {
72 if .fNewBrush : DeleteObject( .hBrush )
73 if .fNewFont : DeleteObject( .hFont )
74 .hBrush = 0
75 .hFont = 0
76 .fNewFont = 0
77 .fNewBrush = 0
78 .pTextColor = 0
79 .fTextColor = 0
80 }
81
82 method Style.delete()
83 {
84 .Free()
85 }
86
87 method Style.Update( )
88 {
89 .Free()
90 gt dgt
91 dgt.root().load( .pDescr )
92 str attrib
93 uint istyle as dgt.root().findrel("/style")
94 if &istyle &&
95 uint( istyle.get( "ver", "" ) ) == 1
96 {
97 uint ibrush as istyle.findrel( "/brush" )
98 if &ibrush
99 {
100 if *ibrush.get( "color", attrib )
101 {
102 if "".substr( attrib, 0, 9 ) == "syscolor_"
103 {
104 .hBrush = GetSysColorBrush( uint( "".substr( attrib, 9, *attrib - 9 ) ))// + 1
105 }
106 else
107 {
108 LOGBRUSH lb
109 lb.lbStyle = 0//$BS_SOLID
110 lb.lbColor = uint( attrib )
111 lb.lbHatch = 0
112 .hBrush = CreateBrushIndirect( lb )
113 .fNewBrush = 1
114 }
115 /*switch attrib
116 {
117 case "SCROLLBAR" = 0
118 case "BACKGROUND" = 1
119 case "ACTIVECAPTION" = 2
120 case "INACTIVECAPTION" = 3
121 case "MENU" = 4
122 case "WINDOW" = 5
123 case "WINDOWFRAME" = 6
124 case "MENUTEXT" = 7
125 case "WINDOWTEXT" = 8
126 case "CAPTIONTEXT" = 9
127 case "ACTIVEBORDER" = 10
128 case "INACTIVEBORDER" = 11
129 case "APPWORKSPACE" = 12
130 case "HIGHLIGHT" = 13
131 case "HIGHLIGHTTEXT" = 14
132 case "BTNFACE" = 15
133 case "BTNSHADOW" = 16
134 case "GRAYTEXT" = 17
135 case "BTNTEXT" = 18
136 case "INACTIVECAPTIONTEXT" = 19
137 case "BTNHIGHLIGHT" = 20
138 default
139 {
140 uint color = uint( attrib )
141 }
142 }*/
143 }
144 }
145
146 uint itext as istyle.findrel( "/text" )
147 if &itext
148 {
149 if *itext.get( "color", attrib )
150 {
151 .fTextColor = 1
152 if "".substr( attrib, 0, 9 ) == "syscolor_"
153 {
154 //.hTextColor = uint( "".substr( attrib, 9, *attrib - 9 ) )
155 .pTextColor = GetSysColor( uint( "".substr( attrib, 9, *attrib - 9 ) ) )
156 }
157 else
158 {
159 //.hTextColor = 0x1000
160 .pTextColor = uint( attrib )
161 }
162 }
163 }
164 uint ifont as istyle.findrel( "/font" )
165 if &ifont
166 {
167 LOGFONT lf
168 GetObject( GetStockObject( $DEFAULT_GUI_FONT ), sizeof( LOGFONT ), &lf )
169 if *ifont.get( "name", attrib )
170 {
171 if *attrib > 63 : attrib.setlen( 63 )
172 mcopy( &lf.lfFaceName, attrib.ptr(), *attrib )
173 }
174 if *ifont.get( "size", attrib )
175 {
176 if attrib[0] == '+' || attrib[1] == '-'
177 {
178 lf.lfHeight -= int( attrib )
179 }
180 else
181 {
182 lf.lfHeight = int( attrib )
183 }
184 }
185 if *ifont.get( "bold", attrib )
186 {
187 lf.lfWeight = ?( uint( attrib ), 800, 400 )
188 }
189 if *ifont.get( "underline", attrib )
190 {
191 lf.lfUnderline = uint( attrib )
192 }
193 if *ifont.get( "italic", attrib )
194 {
195 lf.lfItalic = uint( attrib )
196 }
197 if *ifont.get( "strikeout", attrib )
198 {
199 lf.lfUnderline = uint( attrib )
200 }
201 .hFont = CreateFontIndirect( lf )
202 .fNewFont = 1
203 }
204 }
205 }
206
207
208 method Style Styles.AddStyle( str name, str descr )
209 {
210 uint s as this[name]
211 s.pDescr = descr
212 s.Update()
213 return s
214 }
215
216 method Styles.Update()
217 {
218 foreach s, this
219 {
220 s.Update()
221 }
222 }
Редактировать