purebasic.info

PureBasic forum
Текущее время: Ср сен 19, 2018 2:28 pm

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 35 ]  На страницу Пред.  1, 2, 3
Автор Сообщение
 Заголовок сообщения: Re: Ввод дробных чисел в StringGadget
СообщениеДобавлено: Пт июл 29, 2016 8:32 am 
Не в сети
профессор

Зарегистрирован: Пт фев 20, 2009 12:57 pm
Сообщений: 1694
Откуда: Алматы
Благодарил (а): 15 раз.
Поблагодарили: 46 раз.
Пункты репутации: 5
в каждом слове... только точки... после буквы ллл... ты поймешь что я сказать хотеееееел... (вырвалось :))


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Ввод дробных чисел в StringGadget
СообщениеДобавлено: Пт июл 29, 2016 11:35 am 
Не в сети
доцент

Зарегистрирован: Пн апр 06, 2015 3:43 pm
Сообщений: 30
Благодарил (а): 22 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
mestnyi писал(а):
Цитата:
Ограничение на ввод до точки 3 цифры

Код:
1
If  Len(StringField(Text,1,".")) >=3

это замени на это
Код:
1
If  Len(StringField(Text,1,".")) >=5


Цитата:
в котором должно быть до точки 5 знаков

Цитата:
после точки 2 цыфры
Код:
1
If Len(StringField(Text, 2, ".")) >= 2

это замени на это
Код:
1
If Len(StringField(Text, 2, ".")) >= 3


Цитата:
а после точки 3 знака
:D

Это мне как раз понятно. Не понятно другое как добавить несколько гаджетов с разными ограничениями одновременно!
То есть 1 гаджет 253,23
Второй 23521,352
Третий 24,1254
Четвертый 235,2541
И т.д.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Ввод дробных чисел в StringGadget
СообщениеДобавлено: Пт июл 29, 2016 1:08 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Вс дек 09, 2012 9:02 pm
Сообщений: 771
Откуда: Дагестан
Благодарил (а): 0 раз.
Поблагодарили: 11 раз.
Пункты репутации: 0
Цитата:
Не понятно другое как добавить несколько гаджетов с разными ограничениями одновременно!

Так пойдет?
Код:
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
 
Structure EditProc
 Gadget.l   ; Идентификатор гаджета
 GadgetID.l ; Системный идентификатор гаджета (хендл)
 *EditWndProc ; Процедура-обработчик событий
 
 Flag.i ;
EndStructure
 
 
;Global EditProc_1.EditProc ;Зачем оно тут надо?
 
#one = 1<<6
#two = 1<<2
 
Procedure EditWndProc(hwnd, msg, wParam, lParam)
  Protected *PointOldEditFunc  
  *GadgetInfa.EditProc = GetWindowLong_(hWnd,#GWL_USERDATA)
 
  With *GadgetInfa
    Gadget=\Gadget
    *PointOldEditFunc=\EditWndProc
   
    Static figures, point
    If \Flag & #one = #one
      figures = 5
      point = 3
    ElseIf \Flag & #two = #two
      figures = 3
      point = 2
    EndIf
  EndWith
 
  If  msg=258
    If wParam>='0' And wParam<='9'
     
      Text.s=GetGadgetText(Gadget)
     
      If Text<>""
        If  Len(StringField(Text,1,".")) >=figures
          If FindString(Text, ".", 1)=0
            msg=0
            MessageBeep_(#MB_ICONERROR)
          EndIf
        EndIf
        SendMessage_(hWnd,#EM_GETSEL,@Min,@Max)
       
        If Len(StringField(Text, 2, ".")) >= point And Min >= FindString(Text, ".", 1)
          msg=0
          MessageBeep_(#MB_ICONERROR)
        EndIf
      EndIf
     
    ElseIf wParam='.'
     
      SendMessage_(hWnd,#EM_GETSEL,@Min,@Max)
      If Min=0
        MessageBeep_(#MB_ICONERROR)
        ProcedureReturn 0
      EndIf
     
      Text.s=GetGadgetText(Gadget)
      If Text<>""
        If FindString(Text, ".",1)>0
          msg=0
          MessageBeep_(#MB_ICONERROR)
        EndIf
      Else
        msg=0
        MessageBeep_(#MB_ICONERROR)
      EndIf
     
    ElseIf wParam=8
     
    Else
      msg=0
      MessageBeep_(#MB_ICONERROR)
    EndIf
  EndIf
 
  ProcedureReturn CallWindowProc_(*PointOldEditFunc,hwnd, msg, wParam, lParam)
EndProcedure
 
; Создаём StringGadget
Procedure StringGadget_Ex(Gadget, X, Y, Width, Height, Content$, Flags=0)
 X=StringGadget(Gadget, X, Y, Width, Height, Content$, Flags)
 If X
   *EditProc.EditProc = AllocateMemory(SizeOf(EditProc))
    With *EditProc
      \Flag = Flags
      \Gadget=Gadget
     \GadgetID=GadgetID(Gadget)
     \EditWndProc=GetWindowLong_(\GadgetID, #GWL_WNDPROC)
     SetWindowLong_(\GadgetID,#GWL_USERDATA, *EditProc)
     SetWindowLong_(\GadgetID, #GWL_WNDPROC, @EditWndProc())
   EndWith
 EndIf
ProcedureReturn X
EndProcedure
 
; Удаляем StringGadget
Procedure Free_StringGadget_Ex(Gadget)
 If IsGadget(Gadget)
  If GadgetType(Gadget)=#PB_GadgetType_String
    *mem=GetWindowLong_(GadgetID(Gadget),#GWL_USERDATA)
    If *mem
      FreeMemory(*mem)
    EndIf
    ProcedureReturn FreeGadget(Gadget)
  EndIf
 EndIf
ProcedureReturn 0
EndProcedure
 
If OpenWindow(0, 0, 0, 322, 205, "StringGadget Flags", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    StringGadget_Ex(0, 8,  10, 306, 20, "пять цифер и три точки", #one)
    StringGadget_Ex(1, 8,  35, 306, 20, "три цифер и две точки", #two)
   
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf
 



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Ввод дробных чисел в StringGadget
СообщениеДобавлено: Пт июл 29, 2016 1:40 pm 
Не в сети
доцент

Зарегистрирован: Пн апр 06, 2015 3:43 pm
Сообщений: 30
Благодарил (а): 22 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
mestnyi писал(а):
Цитата:
Не понятно другое как добавить несколько гаджетов с разными ограничениями одновременно!

Так пойдет?
Код:
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
 
Structure EditProc
 Gadget.l   ; Идентификатор гаджета
 GadgetID.l ; Системный идентификатор гаджета (хендл)
 *EditWndProc ; Процедура-обработчик событий
 
 Flag.i ;
EndStructure
 
 
;Global EditProc_1.EditProc ;Зачем оно тут надо?
 
#one = 1<<6
#two = 1<<2
 
Procedure EditWndProc(hwnd, msg, wParam, lParam)
  Protected *PointOldEditFunc  
  *GadgetInfa.EditProc = GetWindowLong_(hWnd,#GWL_USERDATA)
 
  With *GadgetInfa
    Gadget=\Gadget
    *PointOldEditFunc=\EditWndProc
   
    Static figures, point
    If \Flag & #one = #one
      figures = 5
      point = 3
    ElseIf \Flag & #two = #two
      figures = 3
      point = 2
    EndIf
  EndWith
 
  If  msg=258
    If wParam>='0' And wParam<='9'
     
      Text.s=GetGadgetText(Gadget)
     
      If Text<>""
        If  Len(StringField(Text,1,".")) >=figures
          If FindString(Text, ".", 1)=0
            msg=0
            MessageBeep_(#MB_ICONERROR)
          EndIf
        EndIf
        SendMessage_(hWnd,#EM_GETSEL,@Min,@Max)
       
        If Len(StringField(Text, 2, ".")) >= point And Min >= FindString(Text, ".", 1)
          msg=0
          MessageBeep_(#MB_ICONERROR)
        EndIf
      EndIf
     
    ElseIf wParam='.'
     
      SendMessage_(hWnd,#EM_GETSEL,@Min,@Max)
      If Min=0
        MessageBeep_(#MB_ICONERROR)
        ProcedureReturn 0
      EndIf
     
      Text.s=GetGadgetText(Gadget)
      If Text<>""
        If FindString(Text, ".",1)>0
          msg=0
          MessageBeep_(#MB_ICONERROR)
        EndIf
      Else
        msg=0
        MessageBeep_(#MB_ICONERROR)
      EndIf
     
    ElseIf wParam=8
     
    Else
      msg=0
      MessageBeep_(#MB_ICONERROR)
    EndIf
  EndIf
 
  ProcedureReturn CallWindowProc_(*PointOldEditFunc,hwnd, msg, wParam, lParam)
EndProcedure
 
; Создаём StringGadget
Procedure StringGadget_Ex(Gadget, X, Y, Width, Height, Content$, Flags=0)
 X=StringGadget(Gadget, X, Y, Width, Height, Content$, Flags)
 If X
   *EditProc.EditProc = AllocateMemory(SizeOf(EditProc))
    With *EditProc
      \Flag = Flags
      \Gadget=Gadget
     \GadgetID=GadgetID(Gadget)
     \EditWndProc=GetWindowLong_(\GadgetID, #GWL_WNDPROC)
     SetWindowLong_(\GadgetID,#GWL_USERDATA, *EditProc)
     SetWindowLong_(\GadgetID, #GWL_WNDPROC, @EditWndProc())
   EndWith
 EndIf
ProcedureReturn X
EndProcedure
 
; Удаляем StringGadget
Procedure Free_StringGadget_Ex(Gadget)
 If IsGadget(Gadget)
  If GadgetType(Gadget)=#PB_GadgetType_String
    *mem=GetWindowLong_(GadgetID(Gadget),#GWL_USERDATA)
    If *mem
      FreeMemory(*mem)
    EndIf
    ProcedureReturn FreeGadget(Gadget)
  EndIf
 EndIf
ProcedureReturn 0
EndProcedure
 
If OpenWindow(0, 0, 0, 322, 205, "StringGadget Flags", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    StringGadget_Ex(0, 8,  10, 306, 20, "пять цифер и три точки", #one)
    StringGadget_Ex(1, 8,  35, 306, 20, "три цифер и две точки", #two)
   
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf
 



Да! Спасибо!
Единственное не понял момента:
Код:
1
2
3
 
#one = 1<<6
#two = 1<<2


Можно обьяснить подробнее?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Ввод дробных чисел в StringGadget
СообщениеДобавлено: Пт июл 29, 2016 5:31 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Вс дек 09, 2012 9:02 pm
Сообщений: 771
Откуда: Дагестан
Благодарил (а): 0 раз.
Поблагодарили: 11 раз.
Пункты репутации: 0
А что именно объяснить то?
можно было и так, только теряется "мульти" выбор. :)
Код:
1
2
3
4
5
6
7
8
9
10
11
12
#one = 1
#two = 2
 
Flag = #one
 
If Flag = #one
  Debug "#one"
EndIf
 
If Flag = #two
  Debug "#two"
EndIf


вот попробую на примере
с бинарными константами такое возможно
Код:
1
2
3
4
5
6
7
8
9
10
11
12
#one = 1<<1
#two = 1<<2
 
Flag = #one|#two
 
If Flag & #one = #one
  Debug "#one"
EndIf
 
If Flag & #two = #two
  Debug "#two"
EndIf


а "простими" нет
Код:
1
2
3
4
5
6
7
8
9
10
11
12
#one = 1
#two = 2
 
Flag = #one|#two
 
If Flag = #one
  Debug "#one"
EndIf
 
If Flag = #two
  Debug "#two"
EndIf



Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 35 ]  На страницу Пред.  1, 2, 3

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: Bing [Bot] и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB