purebasic.info

PureBasic forum
Текущее время: Пт июл 20, 2018 1:57 am

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




Начать новую тему Ответить на тему  [ 1 сообщение ] 
Автор Сообщение
 Заголовок сообщения: FreeGadget()
СообщениеДобавлено: Вт мар 11, 2014 8:08 am 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Вс дек 09, 2012 9:02 pm
Сообщений: 771
Откуда: Дагестан
Благодарил (а): 0 раз.
Поблагодарили: 11 раз.
Пункты репутации: 0
Объясните мне в чем дело? вопрос на 102 и 103 строках.
Код:
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
 Enumeration
      #Designer
      #Form
      #Form1
      #Form2
  EndEnumeration
 
 Global WindowCheck.b
 Global SelectWindow.l =-1
   
 
Procedure _AnchorGadget(h=7,Window=-1)
  OldGadgetList=UseGadgetList(WindowID(Window) )
   Gadget= ButtonGadget(#PB_Any, 0, 0, 10, 10, "")
     UseGadgetList(OldGadgetList)
 ProcedureReturn Gadget
EndProcedure  
 
   
;-> {- Точки на гаджет при выборе -} <-  ;Ok
;{--------------------------------------
 
Global Dim Anchor.l(0)
 
 
Procedure _AnchorFree()
 If ArraySize(Anchor())
 Protected i  
  For i=0 To ArraySize(Anchor())
   FreeGadget(Anchor(i))
   Next
  ReDim Anchor(0)
 EndIf
EndProcedure  
 
Procedure _AnchorFree1()
 ReDim Anchor(0)
EndProcedure  
 
Procedure _AnchorResize(SelectObject.i,WindowCheck.b=0) ;Ok
 If ArraySize(Anchor())
 Protected Result,x,y,w,h,wx,wy
 Protected AnchorParent =GetGadgetData(Anchor(0))
 Protected AnchorSize   =GadgetWidth(Anchor(0))
 If WindowCheck
  If IsWindow(SelectObject)
   If IsWindow(AnchorParent)
     wx= WindowX(AnchorParent ,#PB_Window_InnerCoordinate)
     wy= WindowY(AnchorParent ,#PB_Window_InnerCoordinate)
   EndIf  
   x =(WindowX(SelectObject)-wx)
   y =(WindowY(SelectObject)-wy)
   w =WindowWidth(SelectObject,#PB_Window_FrameCoordinate)
   h =WindowHeight(SelectObject,#PB_Window_FrameCoordinate)
  EndIf
 Else
  If IsGadget(SelectObject)
    If IsWindow(AnchorParent)
     wx= WindowX(AnchorParent ,#PB_Window_InnerCoordinate)
     wy= WindowY(AnchorParent ,#PB_Window_InnerCoordinate)
    EndIf  
    x =GadgetX(SelectObject,#PB_Gadget_ScreenCoordinate)-wx
    y =GadgetY(SelectObject,#PB_Gadget_ScreenCoordinate)-wy
    w =GadgetWidth(SelectObject)
    h =GadgetHeight(SelectObject)
  EndIf
 EndIf
 If IsWindow(SelectObject) Or IsGadget(SelectObject)
  Result=ArraySize(Anchor())-7
  ResizeGadget(Anchor(Result+0),x-AnchorSize,(y+h/2)-AnchorSize/2,#PB_Ignore,#PB_Ignore) ;влево
  ResizeGadget(Anchor(Result+1),x-AnchorSize,y-AnchorSize,#PB_Ignore,#PB_Ignore)         ;влево и верх
  ResizeGadget(Anchor(Result+2),(x+w/2)-AnchorSize/2,y-AnchorSize,#PB_Ignore,#PB_Ignore) ;верх
  ResizeGadget(Anchor(Result+3),x+w,y-AnchorSize,#PB_Ignore,#PB_Ignore)                  ;вправо и верх
  ResizeGadget(Anchor(Result+4),x+w,(y+h/2)-AnchorSize/2,#PB_Ignore,#PB_Ignore)          ;вправо
  ResizeGadget(Anchor(Result+5),x+w,y+h,#PB_Ignore,#PB_Ignore)                           ;вправо и вниз  
  ResizeGadget(Anchor(Result+6),(x+w/2)-AnchorSize/2,y+h,#PB_Ignore,#PB_Ignore)          ;вниз  
  ResizeGadget(Anchor(Result+7),x-AnchorSize,y+h,#PB_Ignore,#PB_Ignore)                  ;влево и вниз
 EndIf
 EndIf  
EndProcedure  
 
Procedure _AnchorCreate(SelectObject.i,AnchorParent.i,Reset.b=#False,WindowCheck.b=#False,AnchorSize.b=7) ;Ok
 Protected i.i
 Static Number.i, Result.i
 If Reset
  Number=1
  Result=0
 Else  
  Number+1
 EndIf  
 ReDim Anchor((Number*8)-1)
 For i =Result To ArraySize(Anchor())
   Anchor(i) = _AnchorGadget(AnchorSize,AnchorParent)
 Next
 Result=ArraySize(Anchor())+1
_AnchorResize(SelectObject,WindowCheck)
  ProcedureReturn ArraySize(Anchor())
EndProcedure  
 
Procedure _AnchorShowWindow(SelectWindow,SelectKey=0,AnchorSize=7,AnchorParent=-1) ;Ok
 If ArraySize(Anchor())
   _AnchorFree() ;сним пропадаеть событие #PB_Event_LeftClick
   ;_AnchorFree1() ;сним не очишаеть старые якоры но событие #PB_Event_LeftClick остается
    _AnchorCreate(SelectWindow,AnchorParent,#True,#True,AnchorSize)
 ;_AnchorResize(SelectWindow,WindowCheck); или мне не уничтожать а просто переместить? но мне интересно почему оно так себя ведет "#PB_Event_LeftClick"
 Else
  _AnchorCreate(SelectWindow,AnchorParent,#True,#True,AnchorSize)
 EndIf
EndProcedure
 
;---------------------------------------
 
 
OpenWindow(#Designer, 0, 0, 930, 600, "Designer",  #PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_SizeGadget)
 
  OpenWindow(#Form, 30, 30, 550, 450, "Form", #PB_Window_SystemMenu|#PB_Window_SizeGadget,WindowID(#Designer) ) ;|#WS_CHILD|#WS_POPUP
  SetParent_(WindowID(#Form),WindowID(#Designer))
   
  OpenWindow(#Form1, 630, 30, 250, 150, "Form1", #PB_Window_SystemMenu,WindowID(#Designer) ) ;|#WS_CHILD|#WS_POPUP
  SetParent_(WindowID(#Form1),WindowID(#Designer))
 
  OpenWindow(#Form2, 630, 260, 250, 150, "Form1", #PB_Window_SystemMenu|#PB_Window_SizeGadget,WindowID(#Designer) ) ;|#WS_CHILD|#WS_POPUP
  SetParent_(WindowID(#Form2),WindowID(#Designer))
     
Repeat
      lEvent = WaitWindowEvent()
       
      If lEvent=#PB_Event_LeftClick
        Debug "LeftClick"+EventWindow()
      EndIf
       
      If lEvent=#WM_LBUTTONDOWN
       EventWindow= GetActiveWindow()
       If IsWindow(EventWindow) :WindowCheck=#True :Debug "Window"
        SelectWindow= EventWindow
       EndIf
         
       ElseIf lEvent=#WM_LBUTTONUP
         If WindowCheck
          _AnchorShowWindow(SelectWindow,SelectKey,AnchorSize,AnchorParent)
         EndIf
 
       EndIf
      Until lEvent = #PB_Event_CloseWindow
   End



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

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


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

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


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

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