Показать сообщение отдельно
Старый 29.09.2013, 11:30   #9
Snogg
AnyKey`щик
 
Регистрация: 22.09.2013
Сообщений: 19
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: TextBox с поддержкой русских символов

Не могу заставить работать функцию текстбокса в таком режиме:
Если мышь наведена на текстбокс, то можно вводить текст, если не наведена - то нельзя и нажатые клавиши не считываются. Я пытался что-то сделать, но у меня, при наведении на область текстбокса нажатые клавиши не вписываются.
Function my_input$(s$,x#,y#,dx#,dy#)
cur_pos%=Len(s)
view_text$="Введите ответ"

Color 220,220,220
Rect x,y,dx,dy,1
Color 0,0,0
Rect x+2,y+2,dx-4,dy-4,0
view_text=Left(s,cur_pos)
view_text=view_text+"|"
view_text=view_text+Right(s,Len(s)-cur_pos)
Text x+dx/2,y+dy/2,view_text,1,1
If MouseOverlap(x#,y#,x#+dx#,y#+dy#)=True Then ;And MouseHit(1)
	on=1
	Else
	on=0
End If

If on=1 Then
k=GetKey()
Select True
Case (k>31)And(k<256)
temp$=s
s$=Left(temp$,cur_pos)+Chr(k)+Right(temp$,Len(temp$)-cur_pos)
cur_pos=cur_pos+1

Case k=8
If cur_pos<>0 Then
temp$=s$
s= Left(temp$,cur_pos-1)+Right(temp$,Len(temp$)-cur_pos)
cur_pos=cur_pos-1
EndIf

Case k=4
If cur_pos<>Len(s) Then
temp$=s
s= Left(temp$,cur_pos)+Right(temp$,Len(temp$)-cur_pos-1)
EndIf

Case k=31
cur_pos=cur_pos-1
If cur_pos<0 Then cur_pos=0

Case k=30
cur_pos=cur_pos+1
If cur_pos>Len(s) Then cur_pos=Len(s)

Case k=1
cur_pos=0

Case k=2
cur_pos=Len(s)

End Select

End If
Return s$
End Function
Function MouseOverlap(X,Y,X1,Y1)
  If (MouseX()>X) And (MouseX()<X1) And  (MouseY()>Y) And (MouseY()<Y1) Then Return True Else  Return False
End Function
(Offline)
 
Ответить с цитированием