PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Получить событие клика по текстовому гаджету


Получить событие клика по текстовому гаджету

Сообщений 1 страница 18 из 18

1

Почему  не работает этот код? Неужели нельзя связать клик с текстовым гаджетом?

Код:
Enumeration
  #Window_0
EndEnumeration

;- Gadget Constants
;
Enumeration
  #Text_0
EndEnumeration


Procedure Open_Window_0()
  If OpenWindow(#Window_0, 216, 0, 600, 300, "New window ( 0 )",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )

      TextGadget(#Text_0, 130, 55, 405, 185, "hghghfghfhgfghfghfghfghfghg")
      
    EndIf

EndProcedure

Open_Window_0()
Repeat
ev=WaitWindowEvent()

If ev= #PB_Event_Gadget
 If EventGadget()=#Text_0
    
     End

 EndIf
EndIf     
      
Until ev=#PB_Event_CloseWindow

0

2

Только вычитал в справке, оказывается этот гаджет не поддерживает событий.  :disappointed:

0

3

Вот так вот можно

Код:
Enumeration
  #Window_0
EndEnumeration

;- Gadget Constants
;
Enumeration
  #Text_0
EndEnumeration

Procedure IsMouseOver(wnd) 
 GetWindowRect_(wnd,re.RECT) 
 GetCursorPos_(pt.POINT) 
 Result.l = PtInRect_(@re, pt\x | (pt\y<<32) ) 
ProcedureReturn Result 
EndProcedure 



Procedure Open_Window_0()
  If OpenWindow(#Window_0, 216, 0, 600, 300, "New window ( 0 )",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )

      TextGadget(#Text_0, 130, 55, 405, 18, "hghghfghfhgfghfghfghfghfghg")
      
    EndIf

EndProcedure

Open_Window_0()
Repeat
ev=WaitWindowEvent()

If ev= #WM_LBUTTONUP ;#PB_Event_Gadget
 If IsMouseOver(GadgetID(#Text_0))  ;EventGadget()=#Text_0
    
     End

 EndIf
EndIf     
      
Until ev=#PB_Event_CloseWindow

0

4

Спасибо Петр!  Где то я эту процедуру уже видел, может даже слепо использовал.

0

5

Вот так вот можно


нет не работает, а так работает

Код:
Enumeration
  #Window_0
EndEnumeration

;- Gadget Constants
;
Enumeration
  #Text_0
EndEnumeration

Procedure IsMouseOver(wnd) 
 GetWindowRect_(wnd,re.RECT) 
 GetCursorPos_(pt.POINT) 
 Result.l = PtInRect_(@re, pt\x | (pt\y<<32) ) 
ProcedureReturn Result 
EndProcedure 



Procedure Open_Window_0()
  If OpenWindow(#Window_0, 216, 0, 600, 300, "New window ( 0 )",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )

      TextGadget(#Text_0, 130, 55, 405, 18, "hghghfghfhgfghfghfghfghfghg",#SS_NOTIFY)
      
    EndIf

EndProcedure

Open_Window_0()
Repeat
ev=WaitWindowEvent()

If ev= #WM_LBUTTONUP ;#PB_Event_Gadget
 If IsMouseOver(GadgetID(#Text_0))  ;EventGadget()=#Text_0
    
     End

 EndIf
EndIf     
      
Until ev=#PB_Event_CloseWindow

0

6

При использовании флага #SS_NOTIFY, код можно упростить.

Код:
Enumeration
  #Window_0
EndEnumeration

;- Gadget Constants
;
Enumeration
  #Text_0
EndEnumeration

Procedure Open_Window_0()
  If OpenWindow(#Window_0, 216, 0, 600, 300, "New window ( 0 )",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar)
    TextGadget(#Text_0, 130, 55, 405, 18, "hghghfghfhgfghfghfghfghfghg",#SS_NOTIFY)
  EndIf
  
EndProcedure

Open_Window_0()
Repeat
  ev=WaitWindowEvent()
  
  If ev= #PB_Event_Gadget
    If EventGadget()=#Text_0
      End
    EndIf
  EndIf     
  
Until ev=#PB_Event_CloseWindow

0

7

Пётр
вот так на кнопке почему нету событие после отпускания мыши?

Код:
Enumeration
  #Window_0
EndEnumeration

;- Gadget Constants
;
Enumeration
  #Text_0
EndEnumeration

Procedure IsMouseOver(wnd) 
 GetWindowRect_(wnd,re.RECT) 
 GetCursorPos_(pt.POINT) 
 Result.l = PtInRect_(@re, pt\x | (pt\y<<32) ) 
ProcedureReturn Result 
EndProcedure 



Procedure Open_Window_0()
  If OpenWindow(#Window_0, 216, 0, 600, 300, "New window ( 0 )",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
     ButtonGadget(5,5,5,155,55,"ButtonGadget" )

      TextGadget(#Text_0, 130, 55, 405, 18, "hghghfghfhgfghfghfghfghfghg",#SS_NOTIFY)
      
    EndIf

EndProcedure

Open_Window_0()
Repeat
ev=WaitWindowEvent()

If ev= #WM_LBUTTONUP ;#PB_Event_Gadget
 If IsMouseOver(GadgetID(#Text_0))  ;EventGadget()=#Text_0
    
   Debug "#Text_0"
 ElseIf  IsMouseOver(GadgetID(5))  
   Debug "#ButtonGadget"

 EndIf
EndIf     
      
Until ev=#PB_Event_CloseWindow

0

8

mestnyi написал(а):

вот так на кнопке почему нету событие после отпускания мыши?

Почему нет? В этом коде есть такое событие.

0

9

ну не происходит же.

0

10

mestnyi, только оно и происходит

0

11

как, вот это разве, срабатывает?

Код:
ElseIf  IsMouseOver(GadgetID(5))  
   Debug "#ButtonGadget"

Отредактировано mestnyi (15.09.2013 15:39:17)

0

12

mestnyi написал(а):

вот это разве, срабатывает?

Да.

0

13

у меня w8, а почему же у меня не работает интересно.

0

14

Может потому что восьмерка кривая?
Но скорее всего потому что кнопка не поддерживает это событие о никто не гарантирует что будет работать на всех системах.

0

15

а вот это как должно работать, чьё то у меня ошибка при компиляции. 

Код:
Result = ExamineMouse() 
If Result
Debug MouseButton(#PB_MouseButton_Left  )
EndIf

0

16

mestnyi написал(а):

у меня ошибка при компиляции

Мы должны догадаться какая?
В коде есть вызовы функций InitSprite(), InitMouse(), OpenScreen() или OpenWindowedScreen()?

0

17

В коде есть вызовы функций InitSprite(), InitMouse(), OpenScreen() или OpenWindowedScreen()?

нет, значить это не то что мне нужно.

0

18

Ну все таки как получить (WM_LBUTTONDOWN, WM_LBUTTONUP,  WM_MOUSEMOVE) на всех гаджетах или control , то есть на всём что находится в определенном окне?
В линуксе (BUTTONDOWN, BUTTONUP,  MOUSEMOVE)  реально ли получить?

Отредактировано mestnyi (18.01.2014 22:55:12)

0


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Получить событие клика по текстовому гаджету