purebasic.info

PureBasic forum
Текущее время: Пт янв 19, 2018 6:39 pm

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




Начать новую тему Ответить на тему  [ Сообщений: 35 ]  На страницу Пред.  1, 2, 3
Автор Сообщение
СообщениеДобавлено: Чт фев 27, 2014 6:22 am 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Вс дек 09, 2012 9:02 pm
Сообщений: 768
Откуда: Дагестан
Благодарил (а): 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
    CompilerIf #PB_Compiler_OS = #PB_OS_Windows
    Import ""
    CompilerElse
    ImportC ""
    CompilerEndIf
      ;PB_Object_EnumerateAll(*object,*callback,*d)
      PB_Object_EnumerateStart(*object)
      PB_Object_EnumerateNext(*object,*id.Integer)
      PB_Object_EnumerateAbort(*object)
      PB_Window_Objects.i
      PB_Gadget_Objects.i
    EndImport
     
    Procedure GetGadgetID(hWnd.i)
      Protected ID
     
      PB_Object_EnumerateStart(PB_Gadget_Objects)
      While PB_Object_EnumerateNext(PB_Gadget_Objects, @ID)
        If hWnd = GadgetID(ID)
          PB_Object_EnumerateAbort(PB_Gadget_Objects)
          ProcedureReturn ID
        EndIf
      Wend
      ProcedureReturn -1
    EndProcedure
     
    Procedure GetWindowID(hWnd.i)
      Protected ID
     
      PB_Object_EnumerateStart(PB_Window_Objects)
      While PB_Object_EnumerateNext(PB_Window_Objects, @ID)
        If hWnd = WindowID(ID)
          PB_Object_EnumerateAbort(PB_Window_Objects)
          ProcedureReturn ID
        EndIf
      Wend
      ProcedureReturn -1
    EndProcedure
   
ProcedureDLL GetGadgetWindow(gadget.i) ;(В)
 CompilerIf #PB_Compiler_OS = #PB_OS_Windows
  If IsGadget(gadget) And GetProp_(GetParent_(GadgetID(gadget)),"PB_WindowID")-1
    ProcedureReturn GetParent_(GadgetID(gadget))
  EndIf  
 CompilerElseIf #PB_Compiler_OS = #PB_OS_Linux
  If IsGadget(gadget)
    ProcedureReturn Gtk_widget_get_toplevel_(GadgetID(gadget))
  EndIf  
 CompilerEndIf  
EndProcedure
 
    OpenWindow(10, 100, 100, 500, 300, "testwindow")
    ButtonGadget(22, 10, 10, 100, 20 , "test")
 
    Debug GetWindowID(GetGadgetWindow(22))
    Debug GetGadgetID(GadgetID(22))
 
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow  
 



Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пн мар 03, 2014 9:36 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Вс дек 09, 2012 9:02 pm
Сообщений: 768
Откуда: Дагестан
Благодарил (а): 0 раз.
Поблагодарили: 11 раз.
Пункты репутации: 0
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
Procedure GetParentWindow(Gadget)
     Static ActiveWindow,ActiveGadget,GetActiveWindow
      ActiveWindow=GetActiveWindow()
      ActiveGadget=GetActiveGadget()
      SetActiveGadget(Gadget)
      GetActiveWindow= GetActiveWindow()
      If ActiveGadget >=0
        SetActiveGadget(ActiveGadget)
      Else
        SetActiveWindow(ActiveWindow)
      EndIf  
      ProcedureReturn GetActiveWindow
    EndProcedure



Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пн апр 28, 2014 12:53 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Вс дек 09, 2012 9:02 pm
Сообщений: 768
Откуда: Дагестан
Благодарил (а): 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
        EnableExplicit
        CompilerIf #PB_Compiler_OS = #PB_OS_Windows
          Import ""
        CompilerElse
          ImportC ""
        CompilerEndIf
          PB_Object_EnumerateStart(*Object)
          PB_Object_EnumerateNext(*Object,*ID.Integer)
          PB_Object_EnumerateAbort(*Object)
          PB_Window_Objects.i
          PB_Gadget_Objects.i
        EndImport
         
        Procedure Gadget(Handle.l)
         Protected ID
          PB_Object_EnumerateStart(PB_Gadget_Objects)
          While PB_Object_EnumerateNext(PB_Gadget_Objects, @ID)
            If Handle = GadgetID(ID) :PB_Object_EnumerateAbort(PB_Gadget_Objects)
              ProcedureReturn ID
            EndIf
          Wend
          ProcedureReturn -1
        EndProcedure
         
        Procedure Window(Handle.l)
         Protected ID
          PB_Object_EnumerateStart(PB_Window_Objects)
          While PB_Object_EnumerateNext(PB_Window_Objects, @ID)
            If Handle = WindowID(ID) :PB_Object_EnumerateAbort(PB_Window_Objects)
              ProcedureReturn ID
            EndIf
          Wend
          ProcedureReturn -1
        EndProcedure
       
        Procedure ID(Handle.l)
         Protected ID
         
          ID=Gadget(Handle)
          If IsGadget(ID)
           ProcedureReturn ID
          EndIf
         
          ID=Window(Handle)
          If IsWindow(ID)
           ProcedureReturn ID
          EndIf
         
          ProcedureReturn -1
        EndProcedure
       
        Procedure GetParent(ChildID.l)
         Protected ID
          CompilerIf #PB_Compiler_OS = #PB_OS_Windows
           While ChildID <>0
            ChildID=GetParent_(ChildID)
            ID=ID(ChildID)
             If IsGadget(ID) And GadgetID(ID)=ChildID
              ProcedureReturn ChildID
             ElseIf IsWindow(ID) And WindowID(ID)=ChildID
              ProcedureReturn ChildID
             EndIf
           Wend  
          CompilerElseIf #PB_Compiler_OS = #PB_OS_Linux
           While ChildID <>0
            ChildID=gtk_widget_get_parent_(ChildID)
            ID=ID(ChildID)
             If IsGadget(ID) And GadgetID(ID)=ChildID
              ProcedureReturn ChildID
             ElseIf IsWindow(ID) And WindowID(ID)=ChildID
              ProcedureReturn ChildID
             EndIf
           Wend  
         CompilerEndIf
        EndProcedure
 
         
          OpenWindow(1, 330, 330, 300, 300, "1")  
          ButtonGadget(2, 10, 10, 50, 30, "2")
         
          ContainerGadget(3,55,55,133,133,#PB_Container_Flat)
           ButtonGadget(4, 10, 10, 50, 30, "4")
          CloseGadgetList()
           
          Debug "Window "+ ID(GetParent(GadgetID(2)))
          Debug "Gadget "+ ID(GetParent(GadgetID(4)))
         
        Repeat :Until WaitWindowEvent()=#PB_Event_CloseWindow



Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пн апр 28, 2014 7:01 pm 
Не в сети
PureBasic Coder
Аватар пользователя

Зарегистрирован: Чт ноя 10, 2011 10:50 am
Сообщений: 4049
Откуда: Ростов-на-Дону
Благодарил (а): 70 раз.
Поблагодарили: 80 раз.
Пункты репутации: 24
Как я понял, данный код кроссплатформенный и нуждается в тестировании и на винде? Правильно работает. У меня выводит:
Цитата:
Window 1
Gadget 3

_________________
Пурик - лучший язык программирования


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пн апр 28, 2014 8:13 pm 
Не в сети
профессор
Аватар пользователя

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


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

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


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


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

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