powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / SingleLineEdit
13 сообщений из 13, страница 1 из 1
SingleLineEdit
    #32749273
sokol_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dobrii den!
Xochu v SingleLineEdit vvodit tolko cifri i tochki, ili tolko bukvi, kak eto organizovat? V kakom sobii eto pisat? Elsi mozno, napishite kod pls:)
...
Рейтинг: 0 / 0
SingleLineEdit
    #32749288
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Edit Mask control использовать?
...
Рейтинг: 0 / 0
SingleLineEdit
    #32749336
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Филипп, разумеется, как всегда прав :-), но вот тут наваял примерчик, может кому понравится:
Код: plaintext
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.
$PBExportHeader$wm.srw
forward
global type wm from Window
end type
type st_1 from statictext within wm
end type
type sle_digit from singlelineedit within wm
end type
end forward

global type wm from Window
int X= 1326 
int Y= 680 
int Width= 1701 
int Height= 1324 
boolean TitleBar=true
string Title="Untitled"
long BackColor= 67108864 
boolean ControlMenu=true
boolean MinBox=true
boolean MaxBox=true
boolean Resizable=true
st_1 st_1
sle_digit sle_digit
end type
global wm wm

on wm.create
this.st_1=create st_1
this.sle_digit=create sle_digit
this.Control[]={this.st_1,&
this.sle_digit}
end on

on wm.destroy
destroy(this.st_1)
destroy(this.sle_digit)
end on

type st_1 from statictext within wm
int X= 233 
int Y= 44 
int Width= 814 
int Height= 76 
boolean Enabled=false
boolean FocusRectangle=false
long TextColor= 33554432 
long BackColor= 67108864 
int TextSize=- 10 
int Weight= 400 
string FaceName="Arial"
FontCharSet FontCharSet=Ansi!
FontFamily FontFamily=Swiss!
FontPitch FontPitch=Variable!
end type

type sle_digit from singlelineedit within wm
event editing pbm_enchange
int X= 174 
int Y= 148 
int Width= 855 
int Height= 92 
int TabOrder= 10 
BorderStyle BorderStyle=StyleLowered!
boolean AutoHScroll=false
long TextColor= 33554432 
int TextSize=- 10 
int Weight= 400 
string FaceName="Arial"
FontCharSet FontCharSet=Ansi!
FontFamily FontFamily=Swiss!
FontPitch FontPitch=Variable!
end type

event editing;//if match (this.Text, "^[A-z]+$") then
if match (this.Text, "^[0-9]+$") then
	st_1.Text = ""
else
	this.Text = left(this.Text, len(this.Text ) -  1 )
	SelectText ( - 1 ,  1 )
	st_1.Text = "Ошибка!"
end if

end event
...
Рейтинг: 0 / 0
SingleLineEdit
    #32749369
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PL99, я бы скорее вот в эту сторону пошел:
Код: plaintext
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.
$PBExportHeader$u_sle_digits.sru
forward
global type u_sle_digits from singlelineedit
end type
end forward

global type u_sle_digits from singlelineedit
integer width =  718 
integer height =  120 
integer textsize = - 10 
integer weight =  400 
fontcharset fontcharset = ansi!
fontpitch fontpitch = variable!
fontfamily fontfamily = swiss!
string facename = "Arial"
long textcolor =  33554432 
string text = ""
borderstyle borderstyle = stylelowered!
event wm_keydown pbm_keydown
end type
global u_sle_digits u_sle_digits

type prototypes
function boolean PeekMessageA (ref blob lpMsg, long hWnd, uint uMsgFilterMin, uint uMsgFilterMax, uint wRemoveMsg) library "user32.dll"
end prototypes

event wm_keydown; /*------------------------------------------------------------------------------

 Event   :			 u_sle_digits.Wm_keydown

 Returns:         Long

 Parameters:      value KeyCode key
                  value UnsignedLong keyflags

 Copyright © 2004 DTI - Philip Salgannik

 Date Created: 10/21/2004

 Description:	pbm_keydown
 
--------------------------------------------------------------------------------
 Modifications:
 Date            Author              Comments
------------------------------------------------------------------------------*/ 
blob{ 28 }  lblb_msg
integer lpdot
string lscurrt
boolean lb_remove

CHOOSE CASE key
	CASE Key1!, Key2!, Key3!, Key4!, Key5!, Key6!, Key7!, Key8!, Key9!, Key0!, KeyBack!, &
		KeyDelete!, keyleftarrow!, keyrightarrow!, keynumpad0!, keynumpad1!, keynumpad2!, keynumpad3!, &
		keynumpad4!,keynumpad5!,keynumpad6!,keynumpad7!,keynumpad8!,keynumpad9!
		
	CASE keyperiod!
		
		lscurrt = Text
		lpdot = Pos(lscurrt, ".")
		IF lpdot >  0  THEN 
			//lpdot = Pos(lscurrt, ".", lpdot)
			lb_remove = TRUE //lpdot >  0 
		END IF
		
	CASE ELSE
		lb_remove = TRUE
		
END CHOOSE

IF lb_remove THEN PeekMessageA(lblb_msg, 0 , 256 , 264 , 1 )

RETURN  0 
		
end event

on u_sle_digits.create
end on

on u_sle_digits.destroy
end on
...
Рейтинг: 0 / 0
SingleLineEdit
    #32749861
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Филипп.
На мой взгляд, не очень прозрачно

А в моем предыдущем посте вместо
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
event editing;//if match (this.Text, "^[A-z]+$") then
if match (this.Text, "^[0-9]+$") then
	st_1.Text = ""
else
	this.Text = left(this.Text, len(this.Text ) -  1 )
	SelectText ( - 1 ,  1 )
	st_1.Text = "Ошибка!"
end if

end event
следует читать
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
event editing;char lch_Text[]
long ll_i, ll_cnt
//if match (this.Text, "^[A-z]+$") then
if match (this.Text, "^[0-9]+$") then
	st_1.Text = ""
else
	lch_Text[] = this.Text 
	ll_cnt = len(this.Text )
	for ll_i =  1  to ll_cnt
		if not match(lch_Text[ll_i] , "^[0-9]+$") then 
			exit
		end if
	next
	this.Text = left(this.Text, ll_i -  1 ) + mid(this.Text, ll_i +  1 ) 
	SelectText ( ll_i,  0 )
	
	st_1.Text = "Ошибка!"
end if
end event
...
Рейтинг: 0 / 0
SingleLineEdit
    #32750340
Renesans
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PL99
Извиняюсь, за вмешательство, но в Вашем примере на сроке
this.Text = left(this.Text, ll_i - 1) + mid(this.Text, ll_i + 1)
билдер у меня вылетает. Не хорошо это в событии, которое вызывается при редактировании Text, трогать содержимое этого самого поля. Скрипт Филиппа не тривиален, но работает.
...
Рейтинг: 0 / 0
SingleLineEdit
    #32750419
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Renesans
А поподробнее?

Разумеется, что приведенный код, что называется, с листа и тщательно не тестировался, но GPF (я правильно понял слова "билдер у меня вылетает"?) у меня не возникали.

PB 6.5.1.620
...
Рейтинг: 0 / 0
SingleLineEdit
    #32750459
Renesans
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PL99
Речь идет о PB 7.0.
Ну я сделал новый проект, импортировал srw. Запускаю. При вводе цифр нормально, как только ввожу букву выводится "Pb70.exe выполнило недопустимую операцию и будет закрыто". Я начал последовательно коментить сроки в скрипте edited. И вышел на эту строку. Почему? Как? Не знаю, но интуитивно чувствую - нельзя изменять переменную, редактированием которой занимается сейчас программа (Это я еще из клиппера помню).
...
Рейтинг: 0 / 0
SingleLineEdit
    #32750491
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Renesans
В PB 7.0.3 build 10213 ошибка не воспроизводится.
...
Рейтинг: 0 / 0
SingleLineEdit
    #32750618
Renesans
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как же тогда локализовать проблему? У меня есть, у Вас нет.
...
Рейтинг: 0 / 0
SingleLineEdit
    #32750823
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RenesansКак же тогда локализовать проблему? У меня есть, у Вас нет.На самом деле это не проблема, т.к. рассматриваемый код практической ценности не имеет :-)
...
Рейтинг: 0 / 0
SingleLineEdit
    #32751244
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PL99не очень прозрачно
Дело не в этом, а в принципиальной разнице подхода :-)
Ваш - грубо, в лоб и поздно, то бишь когда буквочка уже в контроле появилась.
Мой - элегантно и вовремя, ДО того как буквочка в контроле появилась :-)
...
Рейтинг: 0 / 0
SingleLineEdit
    #32751264
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Филипп PL99не очень прозрачно
Дело не в этом, а в принципиальной разнице подхода :-)
Ваш - грубо, в лоб и поздно, то бишь когда буквочка уже в контроле появилась.
Мой - элегантно и вовремя, ДО того как буквочка в контроле появилась :-)Прошу прощения, но вот это
Филипп
Код: plaintext
1.
2.
3.
CASE Key1!, Key2!, Key3!, Key4!, Key5!, Key6!, Key7!, Key8!, Key9!, Key0!, KeyBack!, &
		KeyDelete!, keyleftarrow!, keyrightarrow!, keynumpad0!, keynumpad1!, keynumpad2!, keynumpad3!, &
		keynumpad4!,keynumpad5!,keynumpad6!,keynumpad7!,keynumpad8!,keynumpad9!
на мой взгляд тоже не особенно элегантно, хотя, конечно, относительно поздно и вовремя соглашусь
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / SingleLineEdit
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]