|
тоолбар
#34016745
Ссылка:
Ссылка на сообщение:
Ссылка с названием темы:
|
|
|
|
Вин-2000
Лис-8
Сохронение место расположения тоолбара
Вроде как работает
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.
my_form = create("ss")
my_form.Show
ss = create("sditb1",'standart')
ss.Visible=.T.
READ EVENTS
DEFINE CLASS ss AS Form
ShowWindow = 2
AutoCenter = .T.
PROCEDURE QueryUnload
IF TYPE("standart")="O" AND !ISNULL(standart)
standart.sohr_toolbar
RELEASE standart
ENDIF
ENDPROC
PROCEDURE destroy
CLEAR EVENTS
ENDPROC
ENDDEFINE
DEFINE CLASS sditb1 AS toolbar
Caption = ""
Height = 29
Left = 2
Top = 3
Width = 278
ShowWindow = 1
NOd_left = 0
NOd_top = 0
NOd_height = 0
NOd_width = 0
d_left = 0
d_top = 0
dock_position = 0
old_dock_position = 0
Mouse_Move = .F.
Name = "vrem"
ADD OBJECT cmd1 AS commandbutton WITH ;
Top = 3 , ;
Left = 5 , ;
Height = 23 , ;
Width = 23 , ;
Caption = "1", ;
ToolTipText = "", ;
SpecialEffect = 2 , ;
ForeColor = RGB( 0 , 255 , 0 ), ;
Name = "cmd1"
ADD OBJECT cmd2 AS commandbutton WITH ;
Top = 3 , ;
Left = 5 , ;
Height = 23 , ;
Width = 23 , ;
Caption = "2", ;
ToolTipText = "", ;
SpecialEffect = 2 , ;
ForeColor = RGB( 0 , 255 , 0 ), ;
Name = "cmd2"
PROCEDURE Init
PARAMETER name_tool
PUBLIC &name_tool
&name_tool = This
THIS.Name = name_tool
IF !FILE(name_tool+'.txt')
This.Dock( 0 )
RETURN
ENDIF
my_doc_p = FILETOSTR(name_tool+'.txt')
my_and = LEN(my_doc_p) - LEN(STRTRAN(my_doc_p,CHR( 2 ),''))
FOR my_t = 1 TO my_and
my_nach = IIF(my_t= 1 , 1 ,AT(CHR( 2 ),my_doc_p,my_t- 1 )+ 1 )
my_sikoko = IIF(my_t= 1 ,AT(CHR( 2 ),my_doc_p)- 1 ,AT(CHR( 2 ),my_doc_p,my_t)-my_nach)
my_vip = SUBSTR(my_doc_p,my_nach,my_sikoko)
&my_vip
RELEASE my_vip
ENDFOR
my_left_chast = IIF(This.old_dock_position = - 1 ,'NO','')
This.dock(This.old_dock_position,This.&my_left_chast.d_left,This.&my_left_chast.d_top)
my_left_chast = IIF(This.dock_position = - 1 ,'NO','')
This.dock(This.dock_position,This.&my_left_chast.d_left,This.&my_left_chast.d_top)
my_left_chast = IIF(This.old_dock_position = - 1 ,'NO','')
This.dock(This.old_dock_position,This.&my_left_chast.d_left,This.&my_left_chast.d_top)
my_left_chast = IIF(This.dock_position = - 1 ,'NO','')
This.dock(This.dock_position,This.&my_left_chast.d_left,This.&my_left_chast.d_top)
ENDPROC
PROCEDURE dblClick
my_position = This.DockPosition
my_left_chast = IIF(my_position = - 1 ,'NO','')
This.my_pologenie(my_left_chast)
my_left_chast = IIF(This.old_dock_position = - 1 ,'NO','')
This.ustan_pologenie(This.old_dock_position,my_left_chast,.T.)
This.old_dock_position = my_position
NODEFAULT
ENDPROC
PROCEDURE MouseDown
LPARAMETERS nButton, nShift, nXCoord, nYCoord
IF This.DockPosition # - 1
This.Mouse_Move = .T.
ENDIF
ENDPROC
PROCEDURE MouseUp
LPARAMETERS nButton, nShift, nXCoord, nYCoord
IF This.DockPosition = - 1 AND This.Mouse_Move
This.ustan_pologenie(- 1 ,'NO')
ENDIF
This.Mouse_Move = .F.
ENDPROC
PROCEDURE Undock
my_left_chast = IIF(This.DockPosition = - 1 ,'NO','')
This.my_pologenie('')
This.old_dock_position = This.DockPosition
NODEFAULT
ENDPROC
PROCEDURE BeforeDock
LPARAMETERS nLocation
IF This.DockPosition=- 1 AND nLocation#- 1
This.my_pologenie('NO')
This.old_dock_position = This.DockPosition
ENDIF
ENDPROC
PROCEDURE my_pologenie
PARAMETERS dop_pol
IF This.left< 0 OR This.top< 0
RETURN
ENDIF
This.&dop_pol.d_left = This.left
This.&dop_pol.d_top = This.top
IF !EMPTY(dop_pol)
This.&dop_pol.d_height = This.height
This.&dop_pol.d_width = This.width
ENDIF
PROCEDURE ustan_pologenie
PARAMETERS polog, dop_pol, top_left_true
IF top_left_true
This.dock(polog,This.&dop_pol.d_left,This.&dop_pol.d_top)
ENDIF
IF !EMPTY(dop_pol)
IF This.&dop_pol.d_height# 0 AND This.&dop_pol.d_width# 0
This.height = This.&dop_pol.d_height+ 2
This.width = This.&dop_pol.d_width+ 2
ENDIF
ENDIF
PROCEDURE sohr_toolbar
my_left_chast = IIF(This.DockPosition = - 1 ,'NO','')
This.my_pologenie(my_left_chast)
STORE '' TO toolbars
toolbars = name_tool+'.NOd_left='+ALLTRIM(STR(This.NOd_left))+CHR( 2 )+;
name_tool+'.NOd_top='+ALLTRIM(STR(This.NOd_top))+CHR( 2 )+;
name_tool+'.NOd_height='+ALLTRIM(STR(This.NOd_height))+CHR( 2 )+;
name_tool+'.NOd_width='+ALLTRIM(STR(This.NOd_width))+CHR( 2 )+;
name_tool+'.d_left='+ALLTRIM(STR(This.d_left))+CHR( 2 )+;
name_tool+'.d_top='+ALLTRIM(STR(This.d_top))+CHR( 2 )+;
name_tool+'.old_dock_position='+ALLTRIM(STR(This.old_dock_position))+CHR( 2 )+;
name_tool+'.dock_position='+ALLTRIM(STR(This.DockPosition))+CHR( 2 )
STRTOFILE(toolbars,name_tool+'.txt')
ENDPROC
ENDDEFINE
Но уж сильно накручено... Да и колупался я долго...
А хочется что б работал как в МС-офисе.
Меня интересует можно ли все эт сделать более проще...
Особенно меня интересует метод UnDock.
Почему он не срабатывает при перетаскивании а перед MouseUp.
И как это обошли разработчики МС-офиса
|
|
|