EnglishРусский  

   ..

   addustr.g

   app.g

   btn.g

   btnpic.g

   comp.g

   ctrl.g

   ctrlci.g

   dialogs.g

   dlgbtns.g

   edit.g

   events.g

   fonts.g

   form.g

   gray.g

   grey.g

   header.g

   images.g

   label.g

   labeled.g

   locustr.g

   menu.g

   panel.g

   picture.g

   styles.g

   tab.g

   tabitem.g

   tabpage.g

   timer.g

   toolbar.g

   tray.g

   url.g

   vis.g

   viswin.g

Реклама

Инсталлятор CreateInstall
Бесплатные и коммерческие инсталляторы

source\lib\vis\edit.g
  1 /******************************************************************************
  2 *
  3 * Copyright (C) 2004-2007, The Gentee Group. All rights reserved. 
  4 * This file is part of the Gentee open source project - http://www.gentee.com. 
  5 * 
  6 * THIS FILE IS PROVIDED UNDER THE TERMS OF THE GENTEE LICENSE ("AGREEMENT"). 
  7 * ANY USE, REPRODUCTION OR DISTRIBUTION OF THIS FILE CONSTITUTES RECIPIENTS 
  8 * ACCEPTANCE OF THE AGREEMENT.
  9 *
 10 * ID: vis.edit 17.07.07 0.0.A.
 11 *
 12 * Author: Alexander Krivonogov ( gentee )
 13 *
 14 ******************************************************************************/
 15 
 16 /* Компонента vEdit, порождена от vCtrl
 17 События
 18    onChange - изменение текста
 19 */
 20 type vEdit <inherit = vCtrl>
 21 {  
 22 //Hidden fields
 23    uint fNewText
 24    uint pBorder
 25    uint pChanged
 26    uint pReadOnly 
 27    ustr pText  
 28    uint pPassword
 29    uint pMaxLen
 30    uint pMultiline
 31    uint pWordWrap
 32    uint pScrollBars
 33    
 34 //Events
 35    evEvent OnChange
 36 }
 37 
 38 
 39 define <export>{
 40 //Режим отображения полос прокрутки ScrollBars
 41    sbNone = 0 
 42    sbHorz = 1
 43    sbVert = 2
 44    sbBoth = 3
 45 }
 46 
 47 /*------------------------------------------------------------------------------
 48    Public methods
 49 */
 50 
 51 /*Метод Sel( uint start, uint len )
 52 Выделить часть текста
 53 start - позизия начала выделения
 54 len - длина выделения в символах
 55 */
 56 method vEdit.Sel( uint start, uint len )
 57 {
 58    this.WinMsg( $EM_SETSEL, start, start + len ) 
 59 } 
 60 
 61 /*Метод SelAll()
 62 Выделить весь текст
 63 */
 64 method vEdit.SelAll()
 65 {
 66    this.Sel( 0, -1 )
 67 }
 68 
 69 
 70 /*------------------------------------------------------------------------------
 71    Properties
 72 */
 73 /* Свойство uint ReadOnly - Get Set
 74 Усотанавливает или определяет можно ли изменять текст
 75 1 - текст изменять нельзя
 76 0 - текст изменять можно
 77 */
 78 property uint vEdit.ReadOnly 
 79 {
 80    return this.pReadOnly
 81 }
 82 
 83 property  vEdit.ReadOnly( uint val )
 84 {
 85    if val != this.pReadOnly
 86    {
 87       this.pReadOnly = val
 88       this.WinMsg( $EM_SETREADONLY, val )
 89    }
 90 }
 91 
 92 /*Свойство ustr Text - Get Set
 93 Получить, установить редактируемый текст
 94 */
 95 method vEdit.iSetText()
 96 {
 97    SetWindowText( this.hwnd, .pText.ptr() )   
 98 }
 99 
100 method vEdit.iGetText()
101 {
102    uint res = GetWindowTextLength( this.hwnd )
103    .pText.reserve( res + 1 )
104    GetWindowText( this.hwnd, .pText.ptr(), res + 1 )    
105    .pText.setlen( res )
106 }
107 
108 property ustr vEdit.Text <result>
109 {   
110    result = .pText   
111 }
112 
113 property vEdit.Text( ustr val )
114 {
115    if val != .pText
116    {
117       .pText = val
118       this.fNewText = 1      
119       .iSetText()
120       this.fNewText = 0
121    }
122 }
123 
124 /*Свойство ustr MaxLen - Get Set
125 Получить, установить максимальную длину текста в символах
126 */
127 method vEdit.iSetMaxLen()
128 {
129    this.WinMsg( $EM_LIMITTEXT, .pMaxLen )
130 }
131 
132 property uint vEdit.MaxLen
133 {
134    return this.pMaxLen//this.WinMsg( $EM_GETLIMITTEXT )
135 }
136 
137 property vEdit.MaxLen( uint val )
138 {
139    if .pMaxLen != val
140    {
141       .pMaxLen = val
142       .iSetMaxLen()
143    }   
144 }
145 
146 /*Свойство ustr Password - Get Set
147 Получить, установить режим ввода пароля
148 1 - режим ввода пароля включен
149 0 - режим ввода параоля отключен
150 */
151 property uint vEdit.Password
152 {   
153    return  .pPassword
154 }
155 
156 property vEdit.Password( uint val )
157 {
158    if .pPassword != val
159    {   
160       .pPassword = val
161       this.WinMsg( $EM_SETPASSWORDCHAR, ?( val,'*', 0 ))
162       .Invalidate()
163    }
164 }
165 
166 /*Свойство ustr Border - Get Set
167 Установить, получить наличие рамки у поля ввода
168 1 - рамка есть
169 0 - рамки нет
170 */
171 property vEdit.Border( uint val )
172 {
173    .pBorder = val
174    uint style = GetWindowLong( this.hwnd, $GWL_EXSTYLE )
175    if val : style |= $WS_EX_CLIENTEDGE
176    else : style &= ~$WS_EX_CLIENTEDGE
177    SetWindowLong( this.hwnd, $GWL_EXSTYLE, style )      
178    SetWindowPos( this.hwnd, 0, 0, 0, 0, 0, $SWP_FRAMECHANGED | 
179                   $SWP_NOACTIVATE | $SWP_NOZORDER | $SWP_NOMOVE | $SWP_NOSIZE )
180 }
181 
182 property uint vEdit.Border
183 {   
184    return .pBorder
185 }
186 
187 
188 /*Свойство ustr SelStart - Get Set
189 Получить, установить начало выделенного текста
190 */
191 property uint vEdit.SelStart
192 {   
193    uint start
194    this.WinMsg( $EM_GETSEL, &start, 0 )
195    return start  
196 }
197 
198 property vEdit.SelStart( uint val )
199 {
200    this.Sel( val, 0 )
201 }
202 
203 /*Свойство ustr SelLen - Get Set
204 Получить, установить длину выделенного текста
205 */
206 property uint vEdit.SelLen
207 {
208    uint start, end   
209    this.WinMsg( $EM_GETSEL, &start, &end )
210    return end - start   
211 }
212 
213 property vEdit.SelLen( uint val )
214 {
215    this.Sel( this.SelStart, val )    
216 }
217 
218 /*Свойство ustr SelStart - Get
219 Получить/вствавить вместо выделенный текст
220 */
221 property ustr vEdit.SelText<result>
222 {
223    uint start, end   
224    this.WinMsg( $EM_GETSEL, &start, &end )
225    result.substr( this.Text, start, end-start )
226 }
227 
228 property vEdit.SelText( ustr val )
229 {
230    uint start, end
231    this.WinMsg( $EM_GETSEL, &start, &end )   
232    this.pText.replace( start, end - start, val )
233    .iSetText()
234    this.WinMsg( $EM_SETSEL, start, start + *val )   
235 }
236 
237 
238 /*Свойство uint Changed - Get, Set
239 Получить, установить признак изменения текста
240 */
241 property uint vEdit.Changed
242 {
243    return this.pChanged
244 }
245 
246 property vEdit.Changed( uint val )
247 {
248    this.pChanged = val
249 }
250 
251 
252 /*Свойство uint Multiline - Get, Set
253 Получить, установить многострочный режим
254 */
255 property uint vEdit.Multiline
256 {
257    return this.pMultiline
258 }
259 
260 property vEdit.Multiline( uint val )
261 {
262    if this.pMultiline != val
263    {
264       this.pMultiline = val
265       .Virtual( $mReCreateWin )
266    }
267 }
268 
269 /*Свойство uint WordWrap - Get, Set
270 Получить, установить режим переноса по словам, работает при Multiline = 1
271 */
272 property uint vEdit.WordWrap
273 {
274    return this.pWordWrap
275 }
276 
277 property vEdit.WordWrap( uint val )
278 {
279    if this.pWordWrap != val
280    {
281       this.pWordWrap = val
282       .Virtual( $mReCreateWin )
283    }
284 }
285 
286 
287 /*Свойство uint ScrollBars - Get, Set
288 Получить, установить режим отображения полос прокрутки
289 */
290 property uint vEdit.ScrollBars
291 {
292    return this.pScrollBars
293 }
294 
295 property vEdit.ScrollBars( uint val )
296 {
297    if this.pScrollBars != val
298    {
299       this.pScrollBars = val
300       .Virtual( $mReCreateWin )
301    }
302 }
303 
304 /*------------------------------------------------------------------------------
305    Virtual methods
306 */
307 method vEdit vEdit.mCreateWin <alias=vEdit_mWin>()
308 {
309    uint exstyle
310    uint style = /*$ES_AUTOHSCROLL |*/ $WS_CHILD | $WS_CLIPSIBLINGS 
311    if .pBorder : exstyle |= $WS_EX_CLIENTEDGE   
312    if .pReadOnly : style |= $ES_READONLY
313    if .pPassword : style |= $ES_PASSWORD
314    if .pMultiline  
315    {
316       style |= $ES_WANTRETURN | $ES_MULTILINE | $ES_AUTOVSCROLL
317       if !.pWordWrap : style |= $ES_AUTOHSCROLL
318    }    
319    else : style |= $ES_AUTOHSCROLL
320    if .pScrollBars & $sbHorz : style |= $WS_HSCROLL
321    if .pScrollBars & $sbVert : style |= $WS_VSCROLL
322    
323    .CreateWin( "EDIT".ustr(), exstyle, style )   
324    this->vCtrl.mCreateWin()
325    .iSetMaxLen()   
326    .iSetText()   
327    return this
328 }
329 
330 method uint vEdit.mWinCmd <alias=vEdit_mWinCmd>( uint ntfcmd, uint id )
331 {
332    if ntfcmd == $EN_CHANGE  
333    {
334       this.pChanged = !this.fNewText
335       .iGetText()
336       this.OnChange.Run( this )       
337    }
338    return 0
339 }
340 
341 method vEdit.mFocus <alias=vEdit_mFocus> ( evparValUint eu )
342 {
343    this->vCtrl.mFocus( eu )
344    if !.pMultiline && eu.val && !( GetKeyState($VK_LBUTTON) & 0x1000 )
345    {      
346       this.SelAll()
347    }   
348 }
349 
350 /*Виртуальный метод uint vEdit.mSetName - Установка заголовка в режиме проектирования
351 */
352 method uint vEdit.mSetName <alias=vEdit_mSetName>( str newname )
353 {
354 ifdef $DESIGNING {   
355    if !.p_loading && .Text == .Name
356    {
357       .Text = newname.ustr()
358    }
359 }   
360    return 1 
361 }
362 
363 /*------------------------------------------------------------------------------
364    Registration
365 */
366 method vEdit vEdit.init( )
367 {  
368    this.pTypeId = vEdit
369    
370    this.pBorder = 1
371    this.pTabStop = 1
372    this.pCanFocus = 1   
373    this.loc.width = 100
374    this.loc.height = 25
375    this.pMaxLen = 0x8000       
376    return this 
377 }  
378 
379 func init_vEdit <entry>()
380 {
381    regcomp( vEdit, "vEdit", vCtrl, $vCtrl_last, 
382       %{ %{ $mCreateWin,    vEdit_mWin },
383          %{ $mWinCmd,       vEdit_mWinCmd },
384          %{ $mFocus,        vEdit_mFocus },
385          %{ $mSetName,      vEdit_mSetName }
386        },
387       0->collection )   
388       
389 ifdef $DESIGNING {
390    cm.AddComp( vEdit, 1, "Windows", "edit" )
391    
392    cm.AddProps( vEdit, %{ 
393 //"TabOrder" , uint , 0,
394 "Text"     , ustr , 0,
395 "MaxLen"   , uint , 0,
396 "Border"   , uint , 1,
397 "Password" , uint , 0,
398 "Multiline", uint , 0,
399 "WordWrap" , uint , 0,
400 "ScrollBars", uint , 0,
401 "ReadOnly", uint, 0
402    })
403    
404    cm.AddEvents( vEdit, %{
405 "OnChange"      , "evparEvent"
406    })
407    
408    cm.AddPropVals( vEdit, "ScrollBars", %{ 
409 "sbNone", $sbNone,
410 "sbHorz", $sbHorz,     
411 "sbVert", $sbVert,
412 "sbBoth", $sbBoth
413    })
414 }
415 }
Редактировать