purebasic.info

PureBasic forum
Текущее время: Ср окт 18, 2017 7:47 pm

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




Начать новую тему Ответить на тему  [ 1 сообщение ] 
Автор Сообщение
 Заголовок сообщения: SplitterGadgetEx
СообщениеДобавлено: Сб июл 19, 2014 10:03 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Вс дек 09, 2012 9:02 pm
Сообщений: 763
Откуда: Дагестан
Благодарил (а): 0 раз.
Поблагодарили: 10 раз.
Пункты репутации: 0
Что скажете? SplitterGadgetEx или SplitterGadget удобен в использовании. вот мой пример:
Код:
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
ProcedureDLL SetSplitterSize(SpliterName,FirstMinimumSize,SecondMinimumSize,SpliterPosition=0,Flag=0)
 If Flag &#PB_Splitter_Vertical
  If FirstMinimumSize=-1 : FirstMinimumSize=SpliterPosition : EndIf
   SetGadgetAttribute(SpliterName,#PB_Splitter_FirstMinimumSize,FirstMinimumSize)
    If SecondMinimumSize=-1 : SecondMinimumSize=GadgetWidth(SpliterName)-SpliterPosition : EndIf
     SetGadgetAttribute(SpliterName,#PB_Splitter_SecondMinimumSize,SecondMinimumSize)
     If SpliterPosition=0 And SpliterPosition=0 : SpliterPosition=GadgetWidth(SpliterName)/2 : EndIf
      SetGadgetState(SpliterName, SpliterPosition)
      Else  
     If FirstMinimumSize=-1 : FirstMinimumSize=SpliterPosition : EndIf
     SetGadgetAttribute(SpliterName,#PB_Splitter_FirstMinimumSize,FirstMinimumSize)
    If SecondMinimumSize=-1 : SecondMinimumSize=GadgetHeight(SpliterName)-SpliterPosition : EndIf
    SetGadgetAttribute(SpliterName,#PB_Splitter_SecondMinimumSize,SecondMinimumSize)
   If SpliterPosition=0 : SpliterPosition=GadgetHeight(SpliterName)/2 : EndIf
  SetGadgetState(SpliterName, SpliterPosition)
 EndIf
EndProcedure  
 
ProcedureDLL SplitterGadgetEx(*SpliterName,GadgetFirst,GadgetSecond,SpliterPosition=0,FirstMinimumSize=0,SecondMinimumSize=0,x=0,y=0,w=0,h=0,Flag=0);#PB_Splitter_Vertical)
 Protected SpliterName=PeekL(*SpliterName)
  If GadgetType(GadgetFirst)=#PB_GadgetType_Splitter And FirstMinimumSize <>-1
    If Flag ! #PB_Splitter_Vertical
     If FirstMinimumSize
      FirstMinimumSize+4
       Else
      FirstMinimumSize=GetGadgetAttribute(GadgetFirst,#PB_Splitter_FirstMinimumSize)+4
     EndIf
    EndIf
   ;Flag=Flag|#PB_Splitter_SecondFixed
  Else
   ;Flag=Flag|#PB_Splitter_FirstFixed
  EndIf
  SpliterName = SplitterGadget(#PB_Any, x,y,w,h, GadgetFirst, GadgetSecond, Flag)
  If GadgetType(GadgetFirst)=#PB_GadgetType_Splitter
   ;Debug ID(GetGadgetAttribute(GadgetFirst,#PB_Splitter_SecondFixed))
   ; SetSplitterSize(GadgetFirst,GetGadgetAttribute(GadgetFirst,#PB_Splitter_FirstMinimumSize),GetGadgetAttribute(GadgetFirst,#PB_Splitter_SecondMinimumSize),10,Flag)
 
    EndIf
  ; If h=100 : SpliterPosition/3  : EndIf
  SetSplitterSize(SpliterName,FirstMinimumSize,SecondMinimumSize,SpliterPosition,Flag)
  PokeL(*SpliterName, PeekL(@SpliterName))
EndProcedure
 
 
Macro SplitterObject(SpliterName,GadgetFirst,GadgetSecond,SpliterPosition=0,FirstMinimumSize=0,SecondMinimumSize=0,x=0,y=0,w=0,h=0,Flag=0);#PB_Splitter_Vertical)
 SplitterGadgetEx(@SpliterName,GadgetFirst,GadgetSecond,SpliterPosition,FirstMinimumSize,SecondMinimumSize,x,y,w,h,Flag);#PB_Splitter_Vertical)
 
EndMacro
 
 
 Global Splitter_Six
 Procedure Resize()
  ResizeGadget(Splitter_Six,#PB_Ignore,#PB_Ignore,WindowWidth(EventWindow())-10,WindowHeight(EventWindow())-10)
 EndProcedure
 
 Procedure ContainerResize()
   Protected Gadget
   
  If IsGadget(4) And IsGadget(14)
    Gadget=4
    ResizeGadget(14,3,1,GadgetWidth(Gadget)-6,GadgetHeight(Gadget)-2)
  EndIf
 
  If IsGadget(6) And IsGadget(16)
    Gadget=6
    ResizeGadget(16,3,1,GadgetWidth(Gadget)-6,GadgetHeight(Gadget)-2)
  EndIf
 EndProcedure
 
If OpenWindow(0, 0, 0, 630, 380, "SplitterGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered|#PB_Window_SizeGadget)
 
    ButtonGadget(1, 0, 0, 0, 0, "Button 1")
    ButtonGadget(2, 0, 0, 0, 0, "Button 2")
   
    ButtonGadget(3, 0, 0, 0, 0, "Button 3")
    ContainerGadget(4, 0, 0, 0, 0, #PB_Container_Flat)
     TextGadget(14, 0, 0, 0, 0, "TextGadget in ContainerGadget");,#PB_Text_Border)
    CloseGadgetList()
   
    ButtonGadget(5, 0, 0, 0, 0, "Button 5")
    ContainerGadget(6, 0, 0, 0, 0, #PB_Container_Flat)
     TextGadget(16, 0, 0, 0, 0, "TextGadget in ContainerGadget");,#PB_Text_Border)
    CloseGadgetList()
   
    ButtonGadget(7, 0, 0, 0, 0, "Button 7")
   
    SplitterObject(Splitter_First,1,2,310,0,-1, 5, 5, 620, 370,#PB_Splitter_SecondFixed)
    SplitterObject(Splitter_Second,5,6,310,0,-1, 5, 5, 620, 370,#PB_Splitter_SecondFixed)
   
    SplitterObject(Splitter_Thread,Splitter_First,Splitter_Second,100,-1,0, 5, 5, 620, 370,#PB_Splitter_Vertical|#PB_Splitter_FirstFixed)
   
    SplitterObject(Splitter_Four,3,4,310,0,-1, 5, 5, 620, 370,#PB_Splitter_SecondFixed)
    SplitterObject(Splitter_Five,Splitter_Thread,Splitter_Four,520,0,-1, 5, 5, 620, 370,#PB_Splitter_Vertical|#PB_Splitter_SecondFixed)
   
    SplitterObject(Splitter_Six,7,Splitter_Five,24,-1,0, 5, 5, 620, 370,#PB_Splitter_FirstFixed)
   
    BindEvent(#PB_Event_SizeWindow,@Resize())
   
    PostEvent(#PB_Event_Gadget,0,4)
    BindGadgetEvent(4,@ContainerResize())
   
    PostEvent(#PB_Event_Gadget,0,6)
    BindGadgetEvent(6,@ContainerResize())
 
    Repeat
    Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf




Код:
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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
 
 Procedure RedrawWindow( Window )
  CompilerIf #PB_Compiler_OS = #PB_OS_Windows
    RedrawWindow_(WindowID(Window),0,0,#RDW_UPDATENOW|#RDW_ALLCHILDREN)
    UpdateWindow_(WindowID(Window))
  CompilerElse
    gtk_widget_queue_draw_ ( g_list_nth_data_( gtk_container_get_children_( gtk_bin_get_child_( WindowID( Window ))), 0))
  CompilerEndIf
EndProcedure
 
;
Procedure ResizeSplitter()
  #PB_EventType_SizeSplitter = #PB_EventType_SizeItem
  Static MouseMoveX, MouseMoveY
  Protected FirstGadget, SecondGadget, SplitterGadget = EventGadget()
  Protected Left, Top, Right, Bottom, MouseX, MouseY, Window = GetActiveWindow();EventWindow()
 
  If IsGadget(SplitterGadget) And GadgetType(SplitterGadget) = #PB_GadgetType_Splitter And IsWindow(Window)
    FirstGadget = GetGadgetAttribute(SplitterGadget, #PB_Splitter_FirstGadget)
    SecondGadget = GetGadgetAttribute(SplitterGadget, #PB_Splitter_SecondGadget)
   
    If (IsGadget(FirstGadget) And IsGadget(SecondGadget))
      MouseX = DesktopMouseX()
      MouseY = DesktopMouseY()
     
      Left = (GadgetX(FirstGadget,#PB_Gadget_ScreenCoordinate)+GadgetWidth(FirstGadget))
      Top = (GadgetY(FirstGadget,#PB_Gadget_ScreenCoordinate)+GadgetHeight(FirstGadget))
      Right = GadgetX(SecondGadget,#PB_Gadget_ScreenCoordinate)
      Bottom = GadgetY(SecondGadget,#PB_Gadget_ScreenCoordinate)
     
      If (MouseX >= Left And MouseX <= Right) Or
         (MouseY >= Top And MouseY <= Bottom)
       
        If ((MouseX <>-1 And MouseY <>-1) And
            ((MouseMoveX <> MouseX) Or (MouseMoveY <> MouseY)))
          MouseMoveX = MouseX
          MouseMoveY = MouseY
         
          RedrawWindow( Window )
          PostEvent(#PB_Event_Gadget,Window,SplitterGadget,#PB_EventType_SizeSplitter)
        EndIf
      EndIf  
    EndIf
  EndIf  
EndProcedure
 
;
ProcedureDLL SplitterGadgetEx(SplitterName,GadgetFirst=-1,GadgetSecond=-1,X=0,Y=0,w=0,h=0,FirstMinimumSize=0,SecondMinimumSize=0,SpliterPosition=-1,Flag=0,MinSize = 0);#PB_Splitter_Vertical)
  Protected SplitterNameID
  ;
  If IsGadget(GadgetFirst)
    If SecondMinimumSize = -1
      If ((Flag & #PB_Splitter_Vertical) = #PB_Splitter_Vertical)
        SecondMinimumSize = SpliterPosition
      Else
        SecondMinimumSize =  h-SpliterPosition
      EndIf
    EndIf
    If FirstMinimumSize = -1
      FirstMinimumSize = SpliterPosition
    EndIf
   
    If GadgetType(GadgetFirst) = #PB_GadgetType_Splitter
      If GadgetType(GetGadgetAttribute(GadgetFirst, #PB_Splitter_FirstGadget)) = #PB_GadgetType_Splitter
        Protected FirstSpliterPosition = GetGadgetState(GadgetFirst)
      EndIf  
      If ((Flag & #PB_Splitter_SecondFixed) = #PB_Splitter_SecondFixed)
        If ((Flag & #PB_Splitter_Vertical) = #PB_Splitter_Vertical)
          SpliterPosition=((GadgetWidth(GetGadgetAttribute(GadgetFirst,#PB_Splitter_SecondGadget))+GetGadgetState(GadgetFirst))-SpliterPosition)
          FirstMinimumSize=4+(GadgetWidth(GetGadgetAttribute(GadgetFirst,#PB_Splitter_FirstGadget)))+FirstMinimumSize
        Else
          SpliterPosition=((GadgetHeight(GetGadgetAttribute(GadgetFirst,#PB_Splitter_SecondGadget))+GetGadgetState(GadgetFirst))-SpliterPosition)
          FirstMinimumSize=4+(GadgetHeight(GetGadgetAttribute(GadgetFirst,#PB_Splitter_FirstGadget)))+FirstMinimumSize
        EndIf
      ElseIf ((Flag & #PB_Splitter_FirstFixed) = #PB_Splitter_FirstFixed)
        SecondMinimumSize = SecondMinimumSize - (SpliterPosition+FirstMinimumSize)
      EndIf
    Else
      If ((Flag & #PB_Splitter_FirstFixed) = #PB_Splitter_FirstFixed)
      ElseIf ((Flag & #PB_Splitter_SecondFixed) = #PB_Splitter_SecondFixed)
      Else
        If SpliterPosition >= 0
          SpliterPosition=FirstMinimumSize+SpliterPosition+4
        EndIf
      EndIf
    EndIf
   
    If ((Flag & #PB_Splitter_FirstFixed) = #PB_Splitter_FirstFixed)
      SecondMinimumSize = SecondMinimumSize - (SpliterPosition+FirstMinimumSize)
    EndIf
    ;
    SplitterNameID = SplitterGadget(SplitterName, X,Y,w,h, GadgetFirst, GadgetSecond, Flag)
    If SplitterName =-1 :SplitterName = SplitterNameID :EndIf
   
    ;
    SetGadgetAttribute(SplitterName,#PB_Splitter_FirstMinimumSize,FirstMinimumSize)
    SetGadgetAttribute(SplitterName,#PB_Splitter_SecondMinimumSize,SecondMinimumSize)
    SetGadgetState(SplitterName, SpliterPosition)
   
    If GadgetType(GadgetFirst) = #PB_GadgetType_Splitter
      If GadgetType(GetGadgetAttribute(GadgetFirst,#PB_Splitter_FirstGadget)) = #PB_GadgetType_Splitter
        SetGadgetState(GadgetFirst, FirstSpliterPosition)
      EndIf  
    Else
    EndIf
   
    PostEvent(#PB_Event_Gadget,GetActiveWindow(),SplitterName,#PB_EventType_SizeSplitter)
    BindGadgetEvent(SplitterName,@ResizeSplitter())
  EndIf
  ProcedureReturn SplitterNameID
EndProcedure
 
 
 
 Global Splitter_Six
 Procedure Resize()
  ResizeGadget(Splitter_Six,#PB_Ignore,#PB_Ignore,WindowWidth(EventWindow())-10,WindowHeight(EventWindow())-10)
 EndProcedure
 
 Procedure ContainerResize()
   Protected Gadget
   
  If IsGadget(4) And IsGadget(14)
    Gadget=4
    ResizeGadget(14,3,1,GadgetWidth(Gadget)-6,GadgetHeight(Gadget)-2)
  EndIf
 
  If IsGadget(6) And IsGadget(16)
    Gadget=6
    ResizeGadget(16,3,1,GadgetWidth(Gadget)-6,GadgetHeight(Gadget)-2)
  EndIf
 EndProcedure
 
If OpenWindow(0, 0, 0, 630, 380, "SplitterGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered|#PB_Window_SizeGadget)
 
    ButtonGadget(1, 0, 0, 0, 0, "Button 1")
    ButtonGadget(2, 0, 0, 0, 0, "Button 2")
   
    ButtonGadget(3, 0, 0, 0, 0, "Button 3")
    ContainerGadget(4, 0, 0, 0, 0, #PB_Container_Flat)
     TextGadget(14, 0, 0, 0, 0, "TextGadget in ContainerGadget 14");,#PB_Text_Border)
    CloseGadgetList()
   
    ButtonGadget(5, 0, 0, 0, 0, "Button 5")
    ContainerGadget(6, 0, 0, 0, 0, #PB_Container_Flat)
     TextGadget(16, 0, 0, 0, 0, "TextGadget in ContainerGadget 16");,#PB_Text_Border)
    CloseGadgetList()
   
    ButtonGadget(7, 0, 0, 0, 0, "Button 7")
   
    Splitter_First=SplitterGadgetEx(-1,1,2, 5, 5, 620, 370,0,-1,310,#PB_Splitter_SecondFixed)
    Splitter_Second=SplitterGadgetEx(-1,5,6, 5, 5, 620, 370,0,-1,310,#PB_Splitter_SecondFixed)
   
    Splitter_Thread=SplitterGadgetEx(-1,Splitter_First,Splitter_Second, 5, 5, 620, 370,-1,0,100,#PB_Splitter_Vertical|#PB_Splitter_FirstFixed)
   
    Splitter_Four=SplitterGadgetEx(-1,3,4, 5, 5, 620, 370,0,-1,310,#PB_Splitter_SecondFixed)
    Splitter_Five=SplitterGadgetEx(-1,Splitter_Thread,Splitter_Four, 5, 5, 620, 370,0,-1,100,#PB_Splitter_Vertical|#PB_Splitter_SecondFixed)
   
    Splitter_Six=SplitterGadgetEx(-1,7,Splitter_Five, 5, 5, 620, 370,-1,0,24,#PB_Splitter_FirstFixed)
   
    BindEvent(#PB_Event_SizeWindow,@Resize())
   
    PostEvent(#PB_Event_Gadget,0,4)
    BindGadgetEvent(4,@ContainerResize())
   
    PostEvent(#PB_Event_Gadget,0,6)
    BindGadgetEvent(6,@ContainerResize())
 
    Repeat
    Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf
 



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

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


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

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


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

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