PureBasic - форум

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

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


Вы здесь » PureBasic - форум » PureBasic для Windows » Похожие события


Похожие события

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

1

через кол бек получаю пустую строку а через вайтевент работает

Код:
UsePNGImageDecoder()
Enumeration #PB_Compiler_EnumerationValue
  #GadgetsWindow
  #GadgetsListIcon
EndEnumeration
; ------------------------------------------
;{- прием сброщеных файлов                      ; Ok
; ------------------------------------------
Procedure.l FormCallback(hWindow, iMessage, wParam, lParam)
  Protected Result, lpClassName.s, hInstance, Thread
  Select iMessage
    Case #WM_DROPFILES
      
    Buffer = AllocateMemory(1000)
    DragQueryFile_(EventwParam(),0,Buffer,1000)
    Debug PeekS(Buffer)
    
        
          
    Default
    EndSelect  
    Result = #PB_ProcessPureBasicEvents
  ProcedureReturn Result
EndProcedure

;}------------------------------------------
; ------------------------------------------


;Global Buffer = AllocateMemory(1000)
If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  
  DragAcceptFiles_(WindowID(0),#True)
  SetWindowCallback(@FormCallback() ,0)
  
Repeat
EventID=WaitWindowEvent()
Select EventID
  Case #WM_DROPFILES
    Buffer = AllocateMemory(1000)
    DragQueryFile_(EventwParam(),0,Buffer,1000)
    Debug PeekS(Buffer)
     
EndSelect
If EventID=#PB_Event_CloseWindow
  Quit=1
EndIf
Until Quit=1
EndIf

0

2

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

через кол бек получаю пустую строку

EventwParam() в Callback даст некорректный результат.
Требуемые данные находятся в переменной wParam.

Код:
UsePNGImageDecoder()
Enumeration #PB_Compiler_EnumerationValue
  #GadgetsWindow
  #GadgetsListIcon
EndEnumeration
; ------------------------------------------
;{- прием сброщеных файлов                      ; Ok
; ------------------------------------------
Procedure.l FormCallback(hWindow, iMessage, wParam, lParam)
  Protected Result, lpClassName.s, hInstance, Thread
  Select iMessage
    Case #WM_DROPFILES
      
      Buffer = AllocateMemory(1000)
      DragQueryFile_(wParam,0,Buffer,1000)
      Debug PeekS(Buffer)
      
      
      
    Default
  EndSelect  
  Result = #PB_ProcessPureBasicEvents
  ProcedureReturn Result
EndProcedure

;}------------------------------------------
; ------------------------------------------


;Global Buffer = AllocateMemory(1000)
If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  
  DragAcceptFiles_(WindowID(0),#True)
  SetWindowCallback(@FormCallback() ,0)
  
  Repeat
    EventID=WaitWindowEvent()
    Select EventID
      Case #WM_DROPFILES
        Buffer = AllocateMemory(1000)
        DragQueryFile_(EventwParam(),0,Buffer,1000)
        Debug PeekS(Buffer)
        
    EndSelect
    If EventID=#PB_Event_CloseWindow
      Quit=1
    EndIf
  Until Quit=1
EndIf

Но можно сделать и так.

Код:
Enumeration #PB_Compiler_EnumerationValue
  #GadgetsWindow
  #GadgetsListIcon
EndEnumeration


If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  
  EnableWindowDrop(0, #PB_Drop_Files, #PB_Drag_Link)
  
  Repeat
    EventID=WaitWindowEvent()
    Select EventID
      Case #PB_Event_WindowDrop
        
        Debug EventDropFiles()
        
    EndSelect
    
  Until EventID=#PB_Event_CloseWindow
  
EndIf

0

3

EventwParam() в Callback даст некорректный результат.
Требуемые данные находятся в переменной wParam.

то что нужно, спасибо.

0

4

пишет сток переполнен, а раньше работало, почему?

Код:
#window = 3
#window1 = 15

Global ETCallback
 
Procedure EventTypeCallback(Window, Message, wParam, lParam)
  If Message = #WM_LBUTTONDOWN
    StatusBarText(1,0,"На гаджете №"+Str(EventGadget())+" произошло событие - (#WM_LBUTTONDOWN)",0)
        
  ElseIf Message = #WM_LBUTTONUP 
    StatusBarText(1,0,"На гаджете №"+Str(EventGadget())+" произошло событие - (#WM_LBUTTONUP)",0)
    
  ElseIf Message = #WM_MOUSEMOVE
    StatusBarText(1,0,"На гаджете №"+Str(EventGadget())+" произошло событие - (#WM_MOUSEMOVE)",0)
     
  EndIf
  
  
  Result = CallWindowProc_(ETCallback, Window, Message, wParam, lParam)
 ProcedureReturn Result
EndProcedure

Procedure Event(hWnd)
  ETCallback = SetWindowLongPtr_(hWnd, #GWL_WNDPROC, @EventTypeCallback())
 ProcedureReturn ETCallback
EndProcedure
 
 Procedure WinCallback(hWnd, uMsg, wParam, lParam)
   Select uMsg
     Case #WM_SETCURSOR
       Event(GadgetID(1))
   EndSelect     
    ProcedureReturn #PB_ProcessPureBasicEvents
  EndProcedure
  

OpenWindow(#window, 0, 0, 800, 600, "Designer",#WS_EX_COMPOSITED |#PB_Window_ScreenCentered |  #PB_Window_Invisible | #PB_Window_SystemMenu | #PB_Window_SizeGadget)
 OpenWindow(#window1, 0,0, 500, 100, "Test", #PB_Window_Invisible|#PB_Window_SystemMenu| #WS_CHILD|#WS_POPUP, WindowID(#window))
  SetParent_(WindowID(#window1), WindowID(#window)) ; заменяем родительское окно заданного дочернего окна.
  
  ButtonGadget(1, 5, 5, 80, 25, "ButtonGadget")
  
  HideWindow(#window,0) ; отображаем главное окно
  HideWindow(#window1,0) ; отображаем дочернее окно
  
   If CreateStatusBar(1,WindowID(#window))
    AddStatusBarField(#PB_Ignore)
  
 EndIf
 
 SetWindowCallback(@WinCallback(),#window1)       ; активируем callback функцию
  Repeat
    Event = WaitWindowEvent()
    Select Event 
     Case #PB_Event_CloseWindow 
       If EventWindow() = #Window 
         End 
       EndIf 
   EndSelect  
Until Event= #PB_Event_CloseWindow

0

5

а как очищать?

0

6

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

пишет сток переполнен

Стоки нужно регулярно прочищать, иначе они могут забиться!  :D

Зачем больше одного раза ставить Callback на гаджет? Из-за этого проблемы со стеком. :dontknow:

0

7

Зачем больше одного раза ставить Callback на гаджет?

Я же писал нужно проследить события на гаджете, заранее не известно сколько гаджетов будет и какие будут.

0

8

Однократно установи Callback на каждый гаджет. Зачем же это делать много раз?

0

9

Это я понял, но как это сделать? Не соображу.

0

10

Какова цель всего этого?

0

11

Какова цель всего этого?

делаю дизайнер форм. И допустим я добавил на форму кнопку и текстовое поле. при клике на кнопку надо выделить кнопку, чтобы переместить растянуть и тому прочее, и соответственно при клике на текстовое поле производить операции с ним.

0

12

Тогда почему не снимаешь перехват Callback функции у гаджета, который до этого был в фокусе?

Где-то были пару дизайнеров форм с исходниками. Поищи их.

0

13

Тогда почему не снимаешь перехват Callback функции у гаджета, который до этого был в фокусе?

мне бы пример какой нибудь.

Однократно установи Callback на каждый гаджет.

питаюсь вот так то срабатываеть то ощипка

Код:
Global sd, ss,ass
 Procedure WinCallback(hWnd, uMsg, wParam, lParam)
   Select uMsg
     Case #WM_SETCURSOR
       
       
       sd+1
       If sd =1  
         ss=GetGadgetid(WindowID(#window1)) 
         Event(GadgetID(GetGadgetId(WindowID(#window1))))
       Else
         ass=GetGadgetid(WindowID(#window1))
         If ss <> ass
          sd=0 
         EndIf  
       EndIf

Где-то были пару дизайнеров форм с исходниками

как было бы хорошо.

0

14

Дизайнер форм (исходник). http://s242132022.onlinehome.fr/Downloa … TVD095.zip
Его обсуждение. http://www.purebasic.fr/french/viewtopi … mp;t=11698

0

15

#PB_EventType_LostFocus это что за константа?

0

16

Потеря фокуса.
В справке на EventType() об этом написано. http://purebasic.com/documentation/wind … ttype.html

0

17

как поменят цвет у panelgadget? чьё то нигде не нахожу.

0

18

Панель раскрашивается текущей темой системы. Можно на вкладку панели поместить контейнер и изменить его цвет.

Если же выключена поддержка тем, то можно изменить цвет панели используя функцию PureCOLOR_SetGadgetColor() из библиотеки PureCOLOR.

Код:
; Shows using of several panels...
If OpenWindow(0, 0, 0, 322, 220, "PanelGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  PanelGadget     (0, 8, 8, 306, 203)
  AddGadgetItem (0, -1, "Panel 1")
  PanelGadget (1, 5, 5, 290, 166)
  AddGadgetItem(1, -1, "Sub-Panel 1")
  AddGadgetItem(1, -1, "Sub-Panel 2")
  AddGadgetItem(1, -1, "Sub-Panel 3")
  CloseGadgetList()
  AddGadgetItem (0, -1,"Panel 2")
  ButtonGadget(2, 10, 15, 80, 24,"Button 1")
  ButtonGadget(3, 95, 15, 80, 24,"Button 2")
  CloseGadgetList()
  
  PureCOLOR_SetGadgetColor(0, 0, RGB(0, 255, 0))

  
  Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf

0

19

Панель раскрашивается текущей темой системы

А через api никак перекрасить?

Можно на вкладку панели поместить контейнер и изменить его цвет

я так и сделал.

Код:
PureCOLOR_SetGadgetColor(0, 0, RGB(0, 255, 0))

это строка крутить колесо, то есть убираешь запускается оставляешь форма не отвечает.

0

20

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

А через api никак перекрасить?

Можно.

Код:
; Shows using of several panels...
If OpenWindow(0, 0, 0, 322, 220, "PanelGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  hWnd = PanelGadget(0, 8, 8, 306, 203)
  AddGadgetItem(0, -1, "Panel 1")
  AddGadgetItem(0, -1, "Panel 2")
  CloseGadgetList()
  
  hBrush = CreateSolidBrush_(RGB(168, 255, 179))
  SetClassLong_(hWnd,#GCL_HBRBACKGROUND,hBrush)
  
  Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf

0

21

не работает

Код:
; Shows using of several panels...
If OpenWindow(0, 0, 0, 322, 220, "PanelGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  hWnd = PanelGadget(0, 8, 8, 306, 203)
  AddGadgetItem(0, -1, "Panel 1")
  AddGadgetItem(0, -1, "Panel 2")
  CloseGadgetList()
  
  hBrush = CreateSolidBrush_(RGB(168, 255, 179))
  SetClassLong_(hWnd,#GCL_HBRBACKGROUND,hBrush)
  
  ; для формы
  hBrush1 = CreateSolidBrush_(RGB(168, 255, 0))
  SetClassLongPtr_(WindowID(0),#GCL_HBRBACKGROUND,hBrush1)
  InvalidateRect_(WindowID(0), 0, 1)
  
  
  Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf

если эту строку не вставить и форму не красит

Код:
 InvalidateRect_(WindowID(0), 0, 1)

0

22

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

не работает

Чтобы работало, нужно отключить поддержку тем винды. Об этом выше писал.

0

23

Пётр
если тему отключить тогда у всех гаджетов же отключится? а можно отдельно включить для других в коде.

0

24

Код:
If OpenWindow(0, 0, 0, 322, 220, "PanelGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  hWnd = PanelGadget(0, 8, 8, 306, 203)
  AddGadgetItem(0, -1, "Panel 1")
  AddGadgetItem(0, -1, "Panel 2")
  CloseGadgetList()
  
  hBrush = CreateSolidBrush_(RGB(168, 255, 179))
  SetClassLong_(hWnd,#GCL_HBRBACKGROUND,hBrush)
  null=0 : SetWindowTheme_(hWnd, @null, @null)
    
  Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf

0

25

Пётр
действительно так работает но это не то, весь вид портит. ИМХО самый лучший способ как ты сказал это.

Можно на вкладку панели поместить контейнер и изменить его цвет.

0


Вы здесь » PureBasic - форум » PureBasic для Windows » Похожие события