Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Ответ: Подсчет и ограничение символов в Input()
Global ImperCoolInput_LastUpdTime%=0
Global ImperCoolInput_Cur%=0
Type ImperCoolInput
Field S$
Field Focus%
Field x%
Field y%
Field H%
Field W%
Field MLen%
End Type
Function ImperCoolInput_Create.ImperCoolInput(x%,y%,L%,H%)
ICI.ImperCoolInput=New ImperCoolInput
ICI\x=x
ICI\y=y
ICI\MLen=L
ICI\H=H
ICI\W=ICI\MLen*StringWidth("W")
ICI\S=""
ICI\Focus=False
Return ICI
End Function
Function ImperCoolInput_Delete(ICI.ImperCoolInput)
If ICI=Null Return
Delete ICI
End Function
Function ImperCoolInput_Draw(ICI.ImperCoolInput,Cur%)
If ICI=Null Return
Color 224,223,227
Rect ICI\x,ICI\y,ICI\W+1,ICI\H
If ICI\Focus
If Cur
Color 0,0,0
Rect ICI\x+StringWidth(ICI\S)+1,ICI\y+1,4,ICI\H-2
EndIf
EndIf
Color 0,0,0
Text ICI\x,ICI\y,ICI\S
End Function
Function ImperCoolInput_INPUT(ICI.ImperCoolInput)
If ICI=Null Return
Local c%=GetKey()
If Not c Return
Select c
Case 8
If Len(ICI\S)
ICI\S=Left(ICI\S,Len(ICI\S)-1)
EndIf
Default
If Len(ICI\S)<ICI\MLen
ICI\S=ICI\S+Chr(c)
EndIf
End Select
End Function
Function ImperCoolInput_GetText$(ICI.ImperCoolInput)
Return ICI\S
End Function
Function ImperCoolInput_SetFocus(ICI.ImperCoolInput,FL=True)
If ICI=Null Return
If FL
ImperCoolInput_SetFocus(ImperCoolInput_GetFocus(),False)
EndIf
ICI\Focus=FL
End Function
Function ImperCoolInput_GetFocus.ImperCoolInput()
For ICI.ImperCoolInput=Each ImperCoolInput
If ICI\Focus
Return ICI
EndIf
Next
End Function
Function ImperCoolInput_GetCoordSel.ImperCoolInput(x%,y%)
For ICI.ImperCoolInput=Each ImperCoolInput
If x>ICI\x And x<=ICI\x+ICI\W And y>ICI\y And y<ICI\y+ICI\H
Return ICI
EndIf
Next
End Function
Function ImperCoolInput_DrawAll()
If MilliSecs()-ImperCoolInput_LastUpdTime>=500
ImperCoolInput_LastUpdTime=MilliSecs()
ImperCoolInput_Cur=Not ImperCoolInput_Cur
EndIf
For ICI.ImperCoolInput=Each ImperCoolInput
ImperCoolInput_Draw(ICI,ImperCoolInput_Cur)
Next
End Function
Function ImperCoolInput_UpdateAll()
For ICI.ImperCoolInput=Each ImperCoolInput
If ICI\Focus
ImperCoolInput_INPUT(ICI)
EndIf
Next
End Function
Function ImperCoolInput_DeleteAll()
For ICI.ImperCoolInput=Each ImperCoolInput
ImperCoolInput_Delete(ICI)
Next
End Function
;==================
;DEMO CODE
Graphics 800,600,32
SetBuffer BackBuffer()
Local Font=LoadFont("Arial cyr",30)
SetFont Font
Local A.ImperCoolInput
A=ImperCoolInput_Create(10,10,5,FontHeight())
A=ImperCoolInput_Create(10,10+FontHeight()*2,6,FontHeight())
A=ImperCoolInput_Create(10,10+FontHeight()*4,10,FontHeight())
A=ImperCoolInput_Create(10,10+FontHeight()*6,15,FontHeight())
ImperCoolInput_SetFocus(A)
While Not KeyHit(1)
Cls
If MouseHit(1)
ImperCoolInput_SetFocus(ImperCoolInput_GetCoordSel(MouseX(),MouseY()))
A=ImperCoolInput_GetFocus()
EndIf
ImperCoolInput_UpdateAll()
ImperCoolInput_DrawAll()
AppTitle "current Text= "+ImperCoolInput_GetText(A)
Flip
Wend
ImperCoolInput_DeleteAll()
End
БЛИН! Пишу ГовноКод только потому, что убивает - элементарная задача,а решения до сих пор не видать!
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|