home *** CD-ROM | disk | FTP | other *** search
/ Chip 2004 April / CMCD0404.ISO / Software / Demo / conceptdraw / data1.cab / Samples__Basic / Solutions / Diagraming / CircleDiagram / CircleDiagram.cdb < prev    next >
Text File  |  2004-02-13  |  32KB  |  633 lines

  1. #IF Target_MacOS
  2.     Const constrUserMenuName As String = "Fill Diagrams"
  3.     Const constrFillFirstDiagram As String = "Fill First Diagram"
  4.     Const constrFillSecondDiagram As String = "Fill Second Diagram"
  5.     Const constrRefreshBothDiagrams As String = "Refresh Both Diagrams"
  6. #ELSE
  7.     Const constrUserMenuName As String = "Fill Di&agrams"
  8.     Const constrFillFirstDiagram As String = "Fill &First Diagram"
  9.     Const constrFillSecondDiagram As String = "Fill &Second Diagram"
  10.     Const constrRefreshBothDiagrams As String = "&Refresh Both Diagrams"
  11. #ENDIF 
  12.  
  13.  
  14. '╨í╨╕╨╝╨▓╨╛╨╗, ╤ü╨╗╤â╨╢╨░╤ë╨╕╨╣ ╤Ç╨░╨╖╨┤╨╡╨╗╨╕╤é╨╡╨╗╨╡╨╝ ╨╝╨╡╨╢╨┤╤â ╨┐╨╛╨╗╤Å╨╝╨╕.
  15. Const constrCharSeparator As String = ";"
  16.  
  17. '╨£╨░╤ü╤ü╨╕╨▓, ╤ü╨╛╨┤╨╡╤Ç╨╢╨░╤ë╨╕╨╣ ╨╜╨╛╨╝╨╡╤Ç╨░ ╤ü╤é╨╛╨╗╨▒╤å╨╛╨▓, ╨▓ ╨║╨╛╤é╨╛╤Ç╤ï╤à ╨╖╨░╨┐╨╕╤ü╨░╨╜╨╛ ╨╕╨╝╤Å ╤ä╨╕╨╗╨╕╨░╨╗╨░, ╨▓ ╤ä╨░╨╣╨╗╨╡ ╨┤╨░╨╜╨╜╤ï╤à ╨║╨░╨╢╨┤╨╛╨│╨╛ ╨╕╨╖ ╤é╨╕╨┐╨╛╨▓. 
  18. Dim aiNameFieldPos(1) As Integer
  19. '╨£╨░╤ü╤ü╨╕╨▓, ╤ü╨╛╨┤╨╡╤Ç╨╢╨░╤ë╨╕╨╣ ╨╜╨╛╨╝╨╡╤Ç╨░ ╤ü╤é╨╛╨╗╨▒╤å╨╛╨▓, ╨▓ ╨║╨╛╤é╨╛╤Ç╤ï╤à ╨╖╨░╨┐╨╕╤ü╨░╨╜╨░ ╨┐╤Ç╨╕╨▒╤ï╨╗╤î ╤ä╨╕╨╗╨╕╨░╨╗╨░ ╨╖╨░ ╨╕╨╜╤é╨╡╤Ç╨╡╤ü╤â╤Ä╤ë╨╕╨╣ ╨┐╨╡╤Ç╨╕╨╛╨┤, ╨▓ ╤ä╨░╨╣╨╗╨╡ ╨┤╨░╨╜╨╜╤ï╤à ╨╛╨┤╨╜╨╛╨│╨╛ ╨╕╨╖ ╤é╨╕╨┐╨╛╨▓. 
  20. Dim aiValueFieldPos(1) As Integer
  21. '╨ÿ╨╜╨╕╤å╨╕╨░╨╗╨╕╨╖╨░╤å╨╕╤Å ╤ì╤é╨╕╤à ╨╝╨░╤ü╤ü╨╕╨▓╨╛╨▓.
  22. aiNameFieldPos(0)=1
  23. aiValueFieldPos(0)=9
  24. aiNameFieldPos(1)=2
  25. aiValueFieldPos(1)=3
  26.  
  27. '╨£╨░╨║╤ü╨╕╨╝╨░╨╗╤î╨╜╨╛╨╡ ╨║╨╛╨╗╨╕╤ç╨╡╤ü╤é╨▓╨╛ ╤ü╤é╤Ç╨╛╨║ ╨▓ ╤ä╨░╨╣╨╗╨╡ ╨┤╨░╨╜╨╜╤ï╤à, ╨║╨╛╤é╨╛╤Ç╨╛╨╡ ╨▒╤â╨┤╨╡╤é ╨╛╨▒╤Ç╨░╨▒╨░╤é╤ï╨▓╨░╤é╤î ╤ü╨║╤Ç╨╕╨┐╤é.
  28. Const conintMaxProcessingStrings As Integer = 10
  29.  
  30. '╨¿╨╕╤Ç╨╕╨╜╨░ ╨╛╨▒╤è╨╡╨║╤é╨░, ╤ü╨╛╨┤╨╡╤Ç╨╢╨░╤ë╨╡╨│╨╛ ╨╗╨╡╨│╨╡╨╜╨┤╤â ╨┤╨╕╨░╨│╤Ç╨░╨╝╨╝╤ï.
  31. Const condblLegendWidth As Double = 600
  32.  
  33. '╨ÿ╨╜╨┤╨╡╨║╤ü ╤é╨╕╨┐╨░ ╨┤╨╕╨░╨│╤Ç╨░╨╝╨╝╤ï, ╨║╨╛╤é╨╛╤Ç╨░╤Å ╨▒╤â╨┤╨╡╤é ╤ü╨╛╨╖╨┤╨░╨╜╨░ ╨┐╤Ç╨╕ ╨┤╨░╨╜╨╜╨╛╨╝ ╨▓╤ï╨╖╨╛╨▓╨╡ ╤ä╤â╨╜╨║╤å╨╕╨╕ ╨┐╨╛╤ü╤é╤Ç╨╛╨╡╨╜╨╕╤Å.
  34. Dim intDiagramIndex As Integer
  35. '╨ñ╨╗╨░╨│, ╨┐╨╛╨║╨░╨╖╤ï╨▓╨░╤Ä╤ë╨╕╨╣ ╨╕╤ü╨┐╨╛╨╗╤î╨╖╨╛╨▓╨░╤é╤î ╨╗╨╕ ╨▒╨╕╨▒╨╗╨╕╨╛╤é╨╡╤ç╨╜╤ï╨╡ ╨╛╨▒╤è╨╡╨║╤é╤ï ╨┐╤Ç╨╕ ╨┐╨╛╤ü╤é╤Ç╨╛╨╡╨╜╨╕╨╕ ╨┤╨╕╨░╨│╤Ç╨░╨╝╨╝.
  36. Dim bUseLibObjects As Boolean
  37.  
  38. '╨£╨░╤ü╤ü╨╕╨▓╤ï, ╤ü╨╛╨┤╨╡╤Ç╨╢╨░╤ë╨╕╨╡ ╨┤╨░╨╜╨╜╤ï╨╡ ╨╛ ╤Ç╨░╨▒╨╛╤é╨╡ ╤ä╨╕╨╗╨╕╨░╨╗╨╛╨▓.
  39. '╨ÿ╨╝╨╡╨╜╨░ ╤ä╨╕╨╗╨╕╨░╨╗╨╛╨▓.
  40. Dim asNames() As String
  41. '╨ƒ╤Ç╨╕╨▒╤ï╨╗╤î ╤ä╨╕╨╗╨╕╨░╨╗╨╛╨▓.
  42. Dim adValues() As Double
  43. '╨ƒ╤Ç╨╛╤å╨╡╨╜╤é╨╜╨╛╨╡ ╨╛╤é╨╜╨╛╤ê╨╡╨╜╨╕╨╡ ╨┐╤Ç╨╕╨▒╤ï╨╗╨╕ ╤ä╨╕╨╗╨╕╨░╨╗╨░ ╨║ ╨╛╨▒╤ë╨╡╨╣ ╨┐╤Ç╨╕╨▒╤ï╨╗╨╕.
  44. Dim aiPercents() As Double
  45. '╨¥╨╛╨╝╨╡╤Ç ╨┐╨╛╤ü╨╗╨╡╨┤╨╜╨╡╨│╨╛ ╨╕╨╜╨┤╨╡╨║╤ü╨░, ╤Ç╨╡╨░╨╗╤î╨╜╨╛ ╨╕╤ü╨┐╨╛╨╗╤î╨╖╨╛╨▓╨░╨▓╤ê╨╡╨│╨╛╤ü╤Å ╨▓╨╛ ╨▓╤Ç╨╡╨╝╤Å ╨╖╨░╤ç╨╕╤é╤ï╨▓╨░╨╜╨╕╤Å ╨┤╨░╨╜╨╜╤ï╤à.
  46. Dim iMaxUsedIndex As Integer
  47.  
  48. Declare Sub SelectFileAndRefreshDiagram(ByVal strDiagramIndex As String)
  49. Declare Sub AutoRefresh()
  50. Declare Function RefreshDiagram(ByVal intDiagramIndex As Integer, ByVal strTextFileName As String) As Boolean
  51. Declare Function LoadData(ByVal strFileName As String) As Boolean
  52. Declare Function DrawDiagram(ByVal intDiagramIndex As Integer, ByVal strTextFileName As String) As Boolean
  53. Declare Sub DrawSlice(ByVal iSliceNum As Integer, ByVal dSumPercent As Double, ByVal dNewPercent as Double, ByVal iR as Integer, ByVal iG as Integer, ByVal iB as Integer, ByVal DiagramShape As Shape, ByVal LegendShape As Shape)
  54. Declare Sub DrawSliceFromLib(ByVal iSliceNum As Integer, ByVal dSumPercent As Double, ByVal dNewPercent as Double, ByVal iR as Integer, ByVal iG as Integer, ByVal iB as Integer, ByVal DiagramShape As Shape, ByVal LegendShape As Shape, ByVal libMaster As Master)
  55.  
  56. '========================================================================================================================
  57. '========================================================================================================================
  58.  
  59. '╨í╨╛╨╖╨┤╨░╨╜╨╕╨╡ ╨┐╨╛╨╗╤î╨╖╨╛╨▓╨░╤é╨╡╨╗╤î╤ü╨║╨╛╨│╨╛ ╨╝╨╡╨╜╤Ä. ╨É╨▓╤é╨╛╨╝╨░╤é╨╕╤ç╨╡╤ü╨║╨╕ ╨▓╤ï╨╖╤ï╨▓╨░╨╡╤é╤ü╤Å ╨┐╤Ç╨╕ ╨╛╤é╨║╤Ç╤ï╤é╨╕╨╕ ╨┤╨╛╨║╤â╨╝╨╡╨╜╤é╨░ ╨╕╨╖
  60. '╨╝╨░╨║╤Ç╨╛╤ü╨░ ╤â╤Ç╨╛╨▓╨╜╤Å ╨┤╨╛╨║╤â╨╝╨╡╨╜╤é╨░.
  61. Sub CreateUserMenu()
  62.     Dim custMenu As Menu
  63.     Dim newMenuItem As MenuItem
  64.     
  65.     Set custMenu = thisDoc.CustomMenu
  66.     custMenu.Caption = constrUserMenuName 
  67.     custMenu.RemoveAll()
  68.  
  69.     Set newMenuItem = custMenu.AddMenuItem(0)
  70.     newMenuItem.Caption = constrFillFirstDiagram 
  71.     newMenuItem.OnCmdArgs = "1"
  72.     newMenuItem.SetCmdProcessing("SelectFileAndRefreshDiagram")
  73.  
  74.     Set newMenuItem = custMenu.AddMenuItem(0)
  75.     newMenuItem.Caption = constrFillSecondDiagram 
  76.     newMenuItem.OnCmdArgs = "2"
  77.     newMenuItem.SetCmdProcessing("SelectFileAndRefreshDiagram")
  78.  
  79.     Set newMenuItem = custMenu.AddMenuItem(0)
  80.     newMenuItem.Caption = constrRefreshBothDiagrams 
  81.     newMenuItem.SetCmdProcessing("AutoRefresh")
  82. End Sub
  83.  
  84. '========================================================================================================================
  85. '========================================================================================================================
  86.  
  87. '╨É╨▓╤é╨╛╨╝╨░╤é╨╕╤ç╨╡╤ü╨║╨╛╨╡ ╨┐╨╛╤ü╤é╤Ç╨╛╨╡╨╜╨╕╨╡ ╨┤╨╕╨░╨│╤Ç╨░╨╝╨╝╤ï ╨┐╨╛ ╨╛╨▒╨╜╨╛╨▓╨╗╨╡╨╜╨╜╤ï╨╝ ╨┤╨░╨╜╨╜╤ï╨╝ ╨▓ ╤é╨╡╨║╤ü╤é╨╛╨▓╨╛╨╝ ╤ä╨░╨╣╨╗╨╡.
  88. '╨ò╤ü╨╗╨╕ ╨╕╨╝╤Å ╤ä╨░╨╣╨╗╨░ ╤ü╨╛╤à╤Ç╨░╨╜╨╡╨╜╨╛ ╨▓ Property ╨╛╨▒╤è╨╡╨║╤é╨░ ╨╕ ╤é╨░╨║╨╛╨╣ ╤ä╨░╨╣╨╗ ╤ü╤â╤ë╨╡╤ü╤é╨▓╤â╨╡╤é, ╨┤╨╕╨░╨│╤Ç╨░╨╝╨╝╨░ ╨▒╤â╨┤╨╡╤é ╨┐╨╡╤Ç╨╡╤ü╤ç╨╕╤é╨░╨╜╨░ ╨▒╨╡╨╖
  89. '╨╖╨░╨┐╤Ç╨╛╤ü╨░ ╤â ╨┐╨╛╨╗╤î╨╖╨╛╨▓╨░╤é╨╡╨╗╤Å ╨╜╨╛╨▓╨╛╨│╨╛ ╨╕╨╝╨╡╨╜╨╕ ╤ä╨░╨╣╨╗╨░ ╨┤╨░╨╜╨╜╤ï╤à.
  90. Sub AutoRefresh()
  91. On Error GoTo ErrHandler
  92.     '╨ÿ╨╝╤Å ╤ä╨░╨╣╨╗╨░ ╨┤╨░╨╜╨╜╤ï╤à
  93.     Dim strTextFileName As String
  94.     '╨í╤ü╤ï╨╗╨║╨░ ╨╜╨░ Custom Property ╨╛╨▒╤è╨╡╨║╤é╨░ (╨▓ ╨╛╨┤╨╜╨╛╨╝ ╨╕╨╖ ╨╜╨╕╤à ╨╝╨╛╨╢╨╡╤é ╤à╤Ç╨░╨╜╨╕╤é╤î╤ü╤Å ╨┐╨╛╨╗╨╜╨╛╨╡ ╨╕╨╝╤Å ╤ä╨░╨╣╨╗╨░ ╨┤╨░╨╜╨╜╤ï╤à). 
  95.     Dim FileNameProp As CustomProp
  96.     Dim NextShape As Shape
  97.     Dim ActivePage As Page
  98.     Dim i As Integer
  99.     Dim j As Integer
  100.     
  101.     Set ActivePage = thisDoc.ActivePage()
  102.  
  103.     '╨ƒ╤Ç╨╛╨▓╨╡╤Ç╤Å╨╡╨╝ ╨▓╤ü╨╡ ╤ê╤ì╨╣╨┐╤ï ╨▓ ╨┤╨╛╨║╤â╨╝╨╡╨╜╤é╨╡. ╨¿╤ì╨╣╨┐, ╨▓╨╜╤â╤é╤Ç╨╕ ╨║╨╛╤é╨╛╤Ç╨╛╨│╨╛ ╨╛╨▒╨╜╨╛╨▓╨╗╤Å╨╡╤é╤ü╤Å ╨┤╨╕╨░╨│╤Ç╨░╨╝╨╝╨░, 
  104.     '╤â╨╖╨╜╨░╨╡╤é╤ü╤Å ╨┐╨╛ Name.
  105.     For j=1 To ActivePage.ShapesNum()
  106.         Set NextShape = ActivePage.Shape(j)
  107.         Select Case NextShape.Name
  108.         Case "Diagram1"
  109.             intDiagramIndex = 1
  110.         Case "Diagram2"
  111.             intDiagramIndex = 2
  112.         Case Else
  113.             intDiagramIndex = 0
  114.         End Select
  115.         '╨ò╤ü╨╗╨╕ ╨╜╨░╨╣╨┤╨╡╨╜ ╤ê╤ì╨╣╨┐ ╨┤╨╕╨░╨│╤Ç╨░╨╝╨╝╤ï, ╨┐╤Ç╨╛╨▓╨╡╤Ç╤Å╨╡╨╝, ╤ü╨╛╤à╤Ç╨░╨╜╨╡╨╜╨╛ ╨╗╨╕ ╨▓ ╨╜╨╡╨╝ Property ╤ü ╨╕╨╝╨╡╨╜╨╡╨╝ ╤ä╨░╨╣╨╗╨░-╨╕╤ü╤é╨╛╤ç╨╜╨╕╨║╨░ ╨┤╨░╨╜╨╜╤ï╤à.
  116.         If intDiagramIndex <> 0 Then
  117.             i=1
  118.             Set FileNameProp = Nothing
  119.             Do While i<=NextShape.CustomPropsNum() And FileNameProp = Nothing
  120.                 If NextShape.CustomProp(i).Label = "LastSourceFileName" Then
  121.                     Set FileNameProp = NextShape.CustomProp(i) 
  122.                     strTextFileName = FileNameProp.Value
  123.                     '╨ò╤ü╨╗╨╕ Property ╤ü╤â╤ë╨╡╤ü╤é╨▓╤â╨╡╤é, ╨╕ ╤ü╤â╤ë╨╡╤ü╤é╨▓╤â╨╡╤é ╤ä╨░╨╣╨╗, ╤â╨║╨░╨╖╨░╨╜╨╜╤ï╨╣ ╨▓ ╨╜╨╡╨╝ ╨║╨░╨║ ╨╕╤ü╤é╨╛╤ç╨╜╨╕╨║ ╨┤╨░╨╜╨╜╤ï╤à,
  124.                     '╨░╨▓╤é╨╛╨╝╨░╤é╨╕╤ç╨╡╤ü╨║╨╕ ╨╛╨▒╨╜╨╛╨▓╨╗╤Å╨╡╨╝ ╨┤╨╕╨░╨│╤Ç╨░╨╝╨╝╤â.
  125.                     If Dir(strTextFileName) <> "" Then
  126.                          RefreshDiagram(intDiagramIndex, strTextFileName)
  127.                     End If
  128.                 End If
  129.                 i = i + 1    
  130.             Loop 
  131.         End If
  132.     Next
  133.     
  134.     Exit Sub
  135. ErrHandler:
  136.     MsgBox("In performing the macros, an error has occured.", cdbExclamation)
  137. End Sub
  138.  
  139. '========================================================================================================================
  140. '========================================================================================================================
  141.  
  142. '╨ö╨╗╤Å ╨┤╨╕╨░╨│╤Ç╨░╨╝╨╝╤ï ╤â╨║╨░╨╖╨░╨╜╨╜╨╛╨│╨╛ ╨▓ ╨┐╨░╤Ç╨░╨╝╨╡╤é╤Ç╨╡ ╤é╨╕╨┐╨░ ╨╖╨░╨┐╤Ç╨░╤ê╨╕╨▓╨░╨╡╨╝ ╨╕╨╝╤Å ╤ä╨░╨╣╨╗╨░-╨╕╤ü╤é╨╛╤ç╨╜╨╕╨║╨░ ╨┤╨░╨╜╨╜╤ï╤à ╨╕ 
  143. '╤ü╤é╤Ç╨╛╨╕╨╝ ╨┤╨╕╨░╨│╤Ç╨░╨╝╨╝╤â ╨╜╨░ ╨╛╤ü╨╜╨╛╨▓╨░╨╜╨╕╨╕ ╤ì╤é╨╕╤à ╨┤╨░╨╜╨╜╤ï╤à.
  144. Sub SelectFileAndRefreshDiagram(ByVal strDiagramIndex As String)
  145. On Error GoTo ErrHandler
  146.     Dim strTextFileName As String
  147.     
  148.     Select Case strDiagramIndex 
  149.     Case "1"
  150.         intDiagramIndex = 1
  151.     Case "2"
  152.         intDiagramIndex = 2
  153.     Case Else
  154.         intDiagramIndex = 0
  155.     End Select    
  156.     
  157.     '╨ƒ╤Ç╨╡╨┤╨╗╨░╨│╨░╨╡╨╝ ╨┐╨╛╨╗╤î╨╖╨╛╨▓╨░╤é╨╡╨╗╤Ä ╨▓╤ï╨▒╤Ç╨░╤é╤î ╨╕╨╝╤Å ╤ä╨░╨╣╨╗╨░ ╨┤╨░╨╜╨╜╤ï╤à
  158.     strTextFileName = GetOpenFileName("txt","Text Files")
  159.     '╨ò╤ü╨╗╨╕ ╤ä╨░╨╗ ╨▓╤ï╨▒╤Ç╨░╨╜, ╤ü╤é╤Ç╨╛╨╕╨╝ ╨┤╨╕╨░╨│╤Ç╨░╨╝╨╝╤â.
  160.     If strTextFileName <> "" Then
  161.          RefreshDiagram(intDiagramIndex, strTextFileName)
  162.     End If
  163.     Exit Sub
  164. ErrHandler:
  165.     MsgBox("In performing the macros, an error has occured.", cdbExclamation)
  166. End Sub
  167.  
  168. '========================================================================================================================
  169. '========================================================================================================================
  170.  
  171. '╨₧╨▒╨╜╨╛╨▓╨╗╤Å╨╡╨╝ ╨┤╨╕╨░╨│╤Ç╨░╨╝╨╝╤â ╤é╨╕╨┐╨░ intDiagramIndex ╨╜╨░ ╨╛╤ü╨╜╨╛╨▓╨░╨╜╨╕╨╕ ╨┤╨░╨╜╨╜╤ï╤à ╨▓ ╤ä╨░╨╣╨╗╨╡ strTextFileName 
  172. Function RefreshDiagram(ByVal intDiagramIndex As Integer, ByVal strTextFileName As String) As Boolean
  173. On Error GoTo ErrHandler
  174.     RefreshDiagram = False
  175.  
  176.     Dim i As Integer
  177.     
  178.     i = conintMaxProcessingStrings - 1
  179.     ReDim asNames(i) As String
  180.     ReDim adValues(i) As Double
  181.     ReDim aiPercents(i) As Double
  182.  
  183.     '╨ù╨░╤ç╨╕╤é╤ï╨▓╨░╨╡╨╝ ╨┤╨░╨╜╨╜╤ï╨╡ ╨╕╨╖ ╤é╨╡╨║╤ü╤é╨╛╨▓╨╛╨│╨╛ ╤ä╨░╨╣╨╗╨░ ╨╕ ╨┐╨╛╨╝╨╡╤ë╨░╨╡╨╝ ╨╕╤à ╨▓ ╨╝╨░╤ü╤ü╨╕╨▓╤ï. ╨ò╤ü╨╗╨╕ ╨▓╨╛ ╨▓╤Ç╨╡╨╝╤Å 
  184.     '╨▓╤ï╨┐╨╛╨╗╨╜╨╡╨╜╨╕╤Å ╤ä╤â╨╜╨║╤å╨╕╨╕ LoadData ╨╜╨╡ ╨┐╤Ç╨╛╨╕╨╖╨╛╤ê╨╗╨╛ ╨╛╤ê╨╕╨▒╨╛╨║...
  185.     If intDiagramIndex <> 0 And LoadData(strTextFileName) Then
  186.         '... ╤é╨╛ ╤ü╤é╤Ç╨╛╨╕╨╝ ╨┤╨╕╨░╨│╤Ç╨░╨╝╨╝╤â. ╨ò╤ü╨╗╨╕ ╨┤╨╕╨░╨│╤Ç╨░╨╝╨╝╨░ ╨┐╨╛╤ü╤é╤Ç╨╛╨╡╨╜╨░ ╤â╤ü╨┐╨╡╤ê╨╜╨╛, ╤ü╨╛╨╛╨▒╤ë╨░╨╡╨╝ ╨╛╨▒ ╤ì╤é╨╛╨╝ ╨┐╨╛╨╗╤î╨╖╨╛╨▓╨░╤é╨╡╨╗╤Ä.
  187.         If DrawDiagram(intDiagramIndex, strTextFileName) Then
  188.             RefreshDiagram = True
  189.             MsgBox("Diagramma tipa " & CStr(intDiagramIndex) & " bila uspeshno obnovlena na osnovanii dannih iz faila " & strTextFileName)
  190.         End If
  191.     End If
  192.  
  193.     Exit Function
  194. ErrHandler:
  195.     MsgBox("In performing the macros, an error has occured.", cdbExclamation)
  196. End Function
  197.  
  198. '========================================================================================================================
  199. '========================================================================================================================
  200.  
  201. '╨ù╨░╤ç╨╕╤é╤ï╨▓╨░╨╜╨╕╨╡ ╨┤╨░╨╜╨╜╤ï╤à ╨╕╨╖ ╤é╨╡╨║╤ü╤é╨╛╨▓╨╛╨│╨╛ ╤ä╨░╨╣╨╗╨░ strFileName ╨╕ ╤ü╨╛╤à╤Ç╨░╨╜╨╡╨╜╨╕╨╡ ╨╕╤à ╨▓ ╨╝╨░╤ü╤ü╨╕╨▓╨░╤à.
  202. Function LoadData(ByVal strFileName As String) As Boolean
  203. On Error GoTo ErrHandle
  204.  
  205.     Dim intFileNumber As Integer        '╨ÿ╨┤╨╡╨╜╤é╨╕╤ä╨╕╨║╨░╤é╨╛╤Ç ╨╛╨▒╤Ç╨░╨▒╨░╤é╤ï╨▓╨░╨╡╨╝╨╛╨│╨╛ ╤ä╨░╨╣╨╗╨░ ╨┤╨░╨╜╨╜╤ï╤à
  206.     Dim strLineData As String        '╨ƒ╨╡╤Ç╨╡╨╝╨╡╨╜╨╜╨░╤Å, ╤ü╨╛╨┤╨╡╤Ç╨╢╨░╤ë╨░╤Å ╨╛╨┤╨╜╤â ╤ü╤é╤Ç╨╛╨║╤â ╨╕╨╖ ╤é╨╡╨║╤ü╤é╨╛╨▓╨╛╨│╨╛ ╤ä╨░╨╣╨╗╨░
  207.     Dim intFieldsCounter As Integer    '╨¥╨╛╨╝╨╡╤Ç ╨╛╨▒╤Ç╨░╨▒╨░╤é╤ï╨▓╨░╤Ä╤ë╨╡╨│╨╛╤ü╤Å ╨┐╨╛╨╗╤Å ╤ü╤é╤Ç╨╛╨║╨╕
  208.     Dim intSeparatorPos As Integer    '╨ƒ╨╛╨╖╨╕╤å╨╕╤Å ╤Ç╨░╨╖╨┤╨╡╨╗╨╕╤é╨╡╨╗╤Å ╨┐╨╛╨╗╨╡╨╣ ╤ü╤é╤Ç╨╛╨║╨╕
  209.     Dim strFiels As String            '╨í╨╛╨┤╨╡╤Ç╨╢╨╕╨╝╨╛╨╡ ╨╛╨┤╨╜╨╛╨│╨╛ ╨┐╨╛╨╗╤Å ╤ü╤é╤Ç╨╛╨║╨╕
  210.     Dim fNoError As Boolean            '╨ñ╨╗╨░╨│, ╨┐╨╛╨║╨░╨╖╤ï╨▓╨░╤Ä╤ë╨╕╨╣, ╤ç╤é╨╛ ╨┐╤Ç╨╕ ╨╛╨▒╤Ç╨░╨▒╨╛╤é╨║╨╡ ╨┤╨░╨╜╨╜╤ï╤à ╤ä╨░╨╣╨╗╨░ ╨╜╨╡╤é ╨╛╤ê╨╕╨▒╨╛╨║
  211.     Dim strCharSeparator As String    '╨á╨░╨╖╨┤╨╡╨╗╨╕╤é╨╡╨╗╤î ╨┐╨╛╨╗╨╡╨╣ ╤ü╤é╤Ç╨╛╨║╨╕
  212.     Dim dSumOfValues As Double        '╨₧╨▒╤ë╨░╤Å ╨┐╤Ç╨╕╨▒╤ï╨╗╤î ╨▓╨╛ ╨▓╤ü╨╡╤à ╤â╨╢╨╡ ╨╖╨░╤ç╨╕╤é╨░╨╜╨╜╤ï╤à ╤ä╨╕╨╗╨╕╨░╨╗╨░╤à
  213.     Dim i As Integer
  214.     
  215.     strCharSeparator = constrCharSeparator
  216.     
  217.     fNoError = True
  218.     
  219.     '╨₧╤é╨║╤Ç╤ï╤é╨╕╨╡ ╤é╨╡╨║╤ü╤é╨╛╨▓╨╛╨│╨╛ ╤ä╨░╨╣╨╗╨░ ╨┤╨╗╤Å ╤ç╤é╨╡╨╜╨╕╤Å ╨┤╨░╨╜╨╜╤ï╤à
  220.     intFileNumber = FreeFile()
  221.     Open strFileName For Input As #intFileNumber    
  222.     
  223.     iMaxUsedIndex = -1    
  224.     
  225.     '╨ù╨░╤ç╨╕╤é╤ï╨▓╨░╨╡╨╝ ╨┐╨╛ ╨╛╨┤╨╜╨╛╨╣ ╤ü╤é╤Ç╨╛╨║╨╡ ╨╕╨╖ ╨┤╨╛ ╤é╨╡╤à ╨┐╨╛╤Ç, ╨┐╨╛╨║╨░ ╨╜╨╡ ╨┤╨╛╤ü╤é╨╕╨│╨╜╨╡╨╝ ╨║╨╛╨╜╤å╨░ ╤é╨╡╨║╤ü╤é╨╛╨▓╨╛╨│╨╛ ╤ä╨░╨╣╨╗╨░ ╨╕╨╗╨╕ ╨┐╨╛╨║╨░ ╨╜╨╡ ╨▓╨╛╨╖╨╜╨╕╨║╨╜╨╡╤é ╨╛╤ê╨╕╨▒╨║╨░
  226.     Do While (Not EOF(intFileNumber)) And fNoError
  227.         '╨ù╨░╤ç╨╕╤é╨░╤é╤î ╤ü╤é╤Ç╨╛╨║╤â
  228.         Line Input #intFileNumber, strLineData
  229.         strLineData = Trim$(strLineData)
  230.         '╨ò╤ü╨╗╨╕ ╤ü╤é╤Ç╨╛╨║╨░ ╨╜╨╡ ╨┐╤â╤ü╤é╨░, ╨╛╨▒╤Ç╨░╨▒╨╛╤é╨░╨╡╨╝ ╨╡╨╡.
  231.         If strLineData <> "" Then
  232.             '╨ú╨▓╨╡╨╗╨╕╤ç╨╕╤é╤î ╨╜╨░ 1 ╨╖╨╜╨░╤ç╨╡╨╜╨╕╨╡ ╨╜╨░╨╕╨▒╨╛╨╗╤î╤ê╨╡╨│╨╛ ╨╕╤ü╨┐╨╛╨╗╤î╨╖╤â╤Ä╤ë╨╡╨│╨╛╤ü╤Å ╨╕╨╜╨┤╨╡╨║╤ü╨░ ╨▓ ╨╝╨░╤ü╤ü╨╕╨▓╨░╤à.
  233.             iMaxUsedIndex = iMaxUsedIndex + 1
  234.             '╨ƒ╤Ç╨╛╨▓╨╡╤Ç╨╕╤é╤î, ╨╜╨╡ ╤ü╨╗╨╕╤ê╨║╨╛╨╝ ╨╗╨╕ ╨╝╨╜╨╛╨│╨╛ ╤ü╤é╤Ç╨╛╨║ ╨▓ ╤ä╨░╨╣╨╗╨╡ ╨┤╨░╨╜╨╜╤ï╤à
  235.             If  iMaxUsedIndex > conintMaxProcessingStrings-1 Then
  236.                 MsgBox("V faile soderzhits'a bolee " & conintMaxProcessingStrings & " strok. Eto slishkom mnogo dlja takoj diagrammi.")
  237.                 fNoError = False
  238.             Else
  239.                 '╨ÿ╨╜╨╕╤å╨╕╨░╨╗╨╕╨╖╨░╤å╨╕╤Å ╨╜╨╛╨╝╨╡╤Ç╨░ ╤é╨╡╨║╤â╤ë╨╡╨│╨╛ ╨┐╨╛╨╗╤Å ╤é╨╡╨║╤â╤ë╨╡╨╣ ╤ü╤é╤Ç╨╛╨║╨╕
  240.                 intFieldsCounter = 1
  241.                 Do
  242.                     '╨₧╨▒╤Ç╨░╨▒╨░╤é╤ï╨▓╨░╨╡╨╝ ╨┐╨╛╨╗╤Å ╤ü╤é╤Ç╨╛╨║╨╕ ╨┤╨╛ ╤é╨╡╤à ╨┐╨╛╤Ç, ╨┐╨╛╨║╨░ ╨╜╨╡ ╨┤╨╛╤ü╤é╨╕╨│╨╜╨╡╨╝ ╨║╨╛╨╜╤å╨░ ╤ü╤é╤Ç╨╛╨║╨╕. 
  243.                     '╨ö╨░╨╜╨╜╤ï╨╡ ╨╕╨╖ ╨┐╨╛╨╗╨╡╨╣ ╨┐╨╛╨╝╨╡╤ë╨░╨╡╨╝ ╨▓ ╨╝╨░╤ü╤ü╨╕╨▓╤ï.
  244.                     intSeparatorPos = InStr(strLineData, strCharSeparator)
  245.                     If intSeparatorPos > 0 Then
  246.                         strFiels = Trim(Left(strLineData, intSeparatorPos - 1))
  247.                         strLineData = Right(strLineData, Len(strLineData) - intSeparatorPos)
  248.                     Else
  249.                         '╨¥╨╛╨▓╤ï╨╣ ╤ü╨╡╨┐╨░╤Ç╨░╤é╨╛╤Ç ╨╜╨╡ ╨╜╨░╨╣╨┤╨╡╨╜. ╨¡╤é╨╛ ╨┐╨╛╤ü╨╗╨╡╨┤╨╜╨╡╨╡ ╨┐╨╛╨╗╨╡ ╤ü╤é╤Ç╨╛╨║╨╕.
  250.                         strFiels = Trim(strLineData)
  251.                     End If
  252.                     '╨ò╤ü╨╗╨╕ ╨╜╨╛╨╝╨╡╤Ç ╨┐╨╛╨╗╤Å ╤Ç╨░╨▓╨╡╨╜ ╨╛╨┤╨╜╨╛╨╝╤â ╨╕╨╖ ╨╛╨▒╤è╤Å╨▓╨╗╨╡╨╜╨╜╤ï╤à ╨║╨░╨║ ╤ü╨╛╨┤╨╡╤Ç╨╢╨░╤ë╨╕╨╡ ╨┤╨░╨╜╨╜╤ï╨╡ ╨┤╨╗╤Å ╨┐╨╛╤ü╤é╤Ç╨╛╨╡╨╜╨╕╤Å,
  253.                     '╨╖╨░╨╜╨╛╤ü╨╕╨╝ ╨┤╨░╨╜╨╜╤ï╨╡ ╨▓ ╨╝╨░╤ü╤ü╨╕╨▓╤ï.
  254.                     Select Case intFieldsCounter
  255.                     Case aiNameFieldPos(intDiagramIndex-1)
  256.                         asNames(iMaxUsedIndex) = strFiels
  257.                     Case aiValueFieldPos(intDiagramIndex-1)
  258.                         adValues(iMaxUsedIndex) = strFiels
  259.                     Case Else
  260.                     End Select
  261.                     intFieldsCounter = intFieldsCounter + 1
  262.                 Loop While intSeparatorPos > 0
  263.             End If
  264.         End If
  265.     Loop
  266.     
  267.     Close #intFileNumber
  268.     
  269.     '╨ƒ╤Ç╨╛╨▓╨╡╤Ç╨╕╤é╤î ╨▒╤ï╨╗╨╕ ╨╗╨╕ ╨▓ ╤ä╨░╨╣╨╗╨╡ ╨▓╨╛╨╛╨▒╤ë╨╡ ╨║╨░╨║╨╕╨╡-╤é╨╛ ╨┤╨░╨╜╨╜╤ï╨╡.
  270.     If iMaxUsedIndex = -1 Then
  271.         fNoError = False
  272.         MsgBox("V ukazannom faile ne obnaruzheni dannie.")
  273.     End If
  274.  
  275.  
  276.     If fNoError Then
  277.         '╨ƒ╨╛╨┤╤ü╤ç╨╕╤é╨░╤é╤î ╨╛╨▒╤ë╤â╤Ä ╨┐╤Ç╨╕╨▒╤ï╨╗╤î ╨┐╨╛ ╨▓╤ü╨╡╨╝ ╤ä╨╕╨╗╨╕╨░╨╗╨░╨╝.
  278.         dSumOfValues = 0
  279.         For i = 0 To iMaxUsedIndex 
  280.             dSumOfValues = dSumOfValues + adValues(i)
  281.         Next
  282.         '╨ö╨╗╤Å ╨║╨░╨╢╨┤╨╛╨│╨╛ ╤ä╨╕╨╗╨╕╨░╨╗╨░ ╨┐╨╛╨┤╤ü╤ç╨╕╤é╨░╤é╤î ╨┐╤Ç╨╛╤å╨╡╨╜╤é ╨╛╤é ╨╛╨▒╤ë╨╡╨╣ ╨┐╤Ç╨╕╨▒╤ï╨╗╨╕.
  283.         For i = 0 To iMaxUsedIndex 
  284.             aiPercents(i) = adValues(i) / dSumOfValues * 100
  285.         Next
  286.     End If
  287.     
  288.     LoadData = fNoError
  289.     Exit Function
  290.     
  291. ErrHandle:
  292.     MsgBox ("Proizoshla oshibka pri zachitivanii textovogo faila.", cdbExclamation)
  293.     LoadData = False
  294.     Exit Function
  295. End Function 
  296.  
  297. '========================================================================================================================
  298. '========================================================================================================================
  299.  
  300. '╨ƒ╨╛╤ü╤é╤Ç╨╛╨╡╨╜╨╕╨╡ ╨┤╨╕╨░╨│╤Ç╨░╨╝╨╝╤ï ╨▓ ╨┤╨╛╨║╤â╨╝╨╡╨╜╤é╨╡ ConceptDraw
  301. Function DrawDiagram(ByVal intDiagramIndex As Integer, ByVal strTextFileName As String) As Boolean
  302. On Error GoTo ErrHandle
  303.     Dim i As Integer
  304.     Dim iR As Integer                '╨ª╨▓╨╡╤é Red ╨║╨╛╨╝╨┐╨╛╨╜╨╡╨╜╤é╤ï ╤å╨▓╨╡╤é╨░ Slice ╨▓ RGB-╨┐╤Ç╨╡╨┤╤ü╤é╨░╨▓╨╗╨╡╨╜╨╕╨╕.
  305.     Dim iG As Integer                '╨ª╨▓╨╡╤é Green ╨║╨╛╨╝╨┐╨╛╨╜╨╡╨╜╤é╤ï ╤å╨▓╨╡╤é╨░ Slice ╨▓ RGB-╨┐╤Ç╨╡╨┤╤ü╤é╨░╨▓╨╗╨╡╨╜╨╕╨╕.
  306.     Dim iB As Integer                '╨ª╨▓╨╡╤é Blue ╨║╨╛╨╝╨┐╨╛╨╜╨╡╨╜╤é╤ï ╤å╨▓╨╡╤é╨░ Slice ╨▓ RGB-╨┐╤Ç╨╡╨┤╤ü╤é╨░╨▓╨╗╨╡╨╜╨╕╨╕.
  307.     Dim dSumPercent As Double        '╨í╤â╨╝╨╝╨░╤Ç╨╜╤ï╨╣ ╨┐╤Ç╨╛╤å╨╡╨╜╤é ╨┐╤Ç╨╕╨▒╤ï╨╗╨╕ ╨▓ ╤â╨╢╨╡ ╨╜╨░╤Ç╨╕╤ü╨╛╨▓╨░╨╜╨╜╤ï╤à ╤ä╨╕╨╗╨╕╨░╨╗╨░╤à ╨┐╨╛ ╨╛╤é╨╜╨╛╤ê╨╡╨╜╨╕╤Ä ╨║╨╛ ╨▓╤ü╨╡ ╨┐╤Ç╨╕╨▒╤ï╨╗╨╕    
  308.     Dim dX As Double                '╨Ü╨╛╨╛╤Ç╨┤╨╕╨╜╨░╤é╨░ X ╤å╨╡╨╜╤é╤Ç╨░ ╨┤╨╕╨░╨│╤Ç╨░╨╝╨╝╤ï
  309.     Dim dY As Double                '╨Ü╨╛╨╛╤Ç╨┤╨╕╨╜╨░╤é╨░ Y ╤å╨╡╨╜╤é╤Ç╨░ ╨┤╨╕╨░╨│╤Ç╨░╨╝╨╝╤ï
  310.     Dim dR As Double                '╨á╨░╨┤╨╕╤â╤ü ╨┤╨╕╨░╨│╤Ç╨░╨╝╨╝╤ï
  311.     Dim dLegendX As Double            '╨Ü╨╛╨╛╤Ç╨┤╨╕╨╜╨░╤é╤ï ╨╗╨╡╨▓╨╛╨│╨╛ ╨▓╨╡╤Ç╤à╨╜╨╡╨│╨╛ ╤â╨│╨╗╨░ ╨╗╨╡╨│╨╡╨╜╨┤╤ï 
  312.     Dim dLegendY As Double
  313.     Dim LegendFrame As Shape        '╨í╤ü╤ï╨╗╨║╨░ ╨╜╨░ ╤ê╤ì╨╣╨┐, ╨┐╤Ç╨╡╨┤╤ü╤é╨░╨▓╨╗╤Å╤Ä╤ë╨╕╨╣ ╤Ç╨░╨╝╨║╤â ╨╗╨╡╨│╨╡╨╜╨┤╤ï
  314.     Dim curPage As Page            '╨í╤ü╤ï╨╗╨║╨░ ╨╜╨░ ╤Ç╨░╨▒╨╛╤ç╤â╤Ä ╤ü╤é╤Ç╨░╨╜╨╕╤å╤â
  315.     Dim FileNameProp As CustomProp    '╨í╤ü╤ï╨╗╨║╨░ ╨╜╨░ Custom Property ╨╛╨▒╤è╨╡╨║╤é╨░ (╨▓ ╨╛╨┤╨╜╨╛╨╝ ╨╕╨╖ ╨╜╨╕╤à ╤à╤Ç╨░╨╜╨╕╤é╤ü╤Å ╨┐╨╛╨╗╨╜╨╛╨╡ ╨╕╨╝╤Å ╤ä╨░╨╣╨╗╨░ ╨┤╨░╨╜╨╜╤ï╤à). 
  316.     Dim workLib As Library            '╨í╤ü╤ï╨╗╨║╨░ ╨╜╨░ ╨╛╤é╨║╤Ç╤ï╤é╤â╤Ä ╨▒╨╕╨▒╨╗╨╕╨╛╤é╨╡╨║╤â, ╤ü╨╛╨┤╨╡╤Ç╨╢╨░╤ë╤â╤Ä ╨╕╤ü╨┐╨╛╨╗╤î╨╖╤â╤Ä╤ë╨╕╨╡╤ü╤Å ╨╛╨▒╤è╨╡╨║╤é╤ï.
  317.     Dim libMaster As Master            '╨í╤ü╤ï╨╗╨║╨░ ╨╜╨░ Master, ╤ü╨╛╨┤╨╡╤Ç╨╢╨░╤ë╨╕╨╣ ╨╕╤ü╨┐╨╛╨╗╤î╨╖╤â╤Ä╤ë╨╕╨╣╤ü╤Å ╨╛╨▒╤è╨╡╨║╤é.
  318.     Dim DiagramShape As Shape        '╨í╤ü╤ï╨╗╨║╨░ ╨╜╨░ ╤ê╤ì╨╣╨┐, ╨┐╤Ç╨╡╨┤╤ü╤é╨░╨▓╨╗╤Å╤Ä╤ë╨╕╨╣ ╨┤╨╕╨░╨│╤Ç╨░╨╝╨╝╤â
  319.     Dim LegendShape As Shape        '╨í╤ü╤ï╨╗╨║╨░ ╨╜╨░ ╤ê╤ì╨╣╨┐, ╨┐╤Ç╨╡╨┤╤ü╤é╨░╨▓╨╗╤Å╤Ä╤ë╨╕╨╣ ╨╗╨╡╨│╨╡╨╜╨┤╤â ╨┤╨╕╨░╨│╤Ç╨░╨╝╨╝╤ï
  320.     Dim TitleShape As Shape            '╨í╤ü╤ï╨╗╨║╨░ ╨╜╨░ ╤ê╤ì╨╣╨┐, ╨┐╤Ç╨╡╨┤╤ü╤é╨░╨▓╨╗╤Å╤Ä╤ë╨╕╨╣ ╨╖╨░╨│╨╛╨╗╨╛╨▓╨╛╨║ ╨┤╨╕╨░╨│╤Ç╨░╨╝╨╝╤ï
  321.     
  322.     Set curPage = thisDoc.Page(1)
  323.  
  324.     '╨Æ ╨╖╨░╨▓╨╕╤ü╨╕╨╝╨╛╤ü╤é╨╕ ╨╛╤é ╨╕╨╜╨┤╨╡╨║╤ü╨░, ╨╛╨┐╤Ç╨╡╨┤╨╡╨╗╤Å╨╡╨╝ ╨║╨╛╨╛╤Ç╨┤╨╕╨╜╨░╤é╤ï ╨┤╨╕╨░╨│╤Ç╨░╨╝╨╝╤ï
  325.     Select Case intDiagramIndex
  326.     Case 1
  327.         dX = 700
  328.         dY = 800
  329.         dR = 600
  330.         dLegendX = 1400
  331.         dLegendY = dY - dR 
  332.     Case 2
  333.         dX = 700
  334.         dY = 2300
  335.         dR = 600
  336.         dLegendX = 1400
  337.         dLegendY = dY - dR  
  338.     End Select
  339.         
  340.     i=1
  341.     Set DiagramShape = Nothing
  342.     Set LegendShape = Nothing
  343.     Set TitleShape = Nothing
  344.     '╨ÿ╤ë╨╡╨╝ ╨▓ ╨┤╨╛╨║╤â╨╝╨╡╨╜╤é╨╡ ╤ü╤â╤ë╨╡╤ü╤é╨▓╤â╤Ä╤ë╨╕╨╡ ╤ê╤ì╨╣╨┐╤ï, ╨▓ ╨║╨╛╤é╨╛╤Ç╤ï╤à ╨┤╨╛╨╗╨╢╨╜╤ï ╨▒╤ï╤é╤î ╤ü╨╛╨╖╨┤╨░╨╜╤ï ╨┤╨╕╨░╨│╤Ç╨░╨╝╨╝╨░, ╨╡╨╡ ╨╗╨╡╨│╨╡╨╜╨┤╨░ ╨╕ ╨╡╨╡ ╨╖╨░╨│╨╛╨╗╨╛╨▓╨╛╨║.
  345.     Do While i <= curPage.ShapesNum()
  346.         if curPage.Shape(i).Name = "Diagram" & CStr(intDiagramIndex) Then
  347.             Set DiagramShape = curPage.Shape(i)
  348.         End If
  349.         if curPage.Shape(i).Name = "Legend" & CStr(intDiagramIndex) Then
  350.             Set LegendShape = curPage.Shape(i)
  351.         End If
  352.         if curPage.Shape(i).Name = "Title" & CStr(intDiagramIndex) Then
  353.             Set TitleShape = curPage.Shape(i)
  354.         End If
  355.         i=i+1
  356.     Loop
  357.     '╨ò╤ü╨╗╨╕ ╤ê╤ì╨╣╨┐ ╨┤╨╕╨░╨│╤Ç╨░╨╝╨╝╤ï ╨╜╨╡ ╨╜╨░╨╣╨┤╨╡╨╜, ╨╛╨╜ ╤ü╨╛╨╖╨┤╨░╨╡╤é╤ü╤Å. 
  358.     If DiagramShape = Nothing Then
  359.         Set DiagramShape = curPage.DrawGroup(dX - dR, dY - dR, dX + dR, dY + dR)
  360.         DiagramShape.Name = "Diagram" & CStr(intDiagramIndex)
  361.     Else
  362.     '╨ò╤ü╨╗╨╕ ╤ê╤ì╨╣╨┐ ╨╜╨░╨╣╨┤╨╡╨╜, ╨▓╤ï╤ü╤é╨░╨▓╨╗╤Å╤Ä╤é╤ü╤Å ╨╡╨│╨╛ ╨┐╨░╤Ç╨░╨╝╨╡╤é╤Ç╤ï ╨╕ ╨║╨╛╨╛╤Ç╨┤╨╕╨╜╨░╤é╤ï.
  363.         DiagramShape.RemoveAllShapes()
  364.         DiagramShape.Height = 2*dR
  365.         DiagramShape.Width = 2*dR
  366.         DiagramShape.GPinX = dX
  367.         DiagramShape.GPinY = dY
  368.     End If
  369.     '╨É╨╜╨░╨╗╨╛╨│╨╕╤ç╨╜╨╛ ╨┤╨╗╤Å ╨╗╨╡╨│╨╡╨╜╨┤╤ï ╨╕ ╨╖╨░╨│╨╛╨╗╨╛╨▓╨║╨░
  370.     If LegendShape = Nothing Then
  371.         Set LegendShape = curPage.DrawGroup(dLegendX, dLegendY, dLegendX + condblLegendWidth, dLegendY + (iMaxUsedIndex+1)*100-50)
  372.         LegendShape.Name = "Legend" & CStr(intDiagramIndex)
  373.     Else
  374.         LegendShape.RemoveAllShapes()
  375.         LegendShape.Height = (iMaxUsedIndex+1)*100-50
  376.         LegendShape.Width = condblLegendWidth
  377.         LegendShape.GPinX = dLegendX + LegendShape.Width/2 
  378.         LegendShape.GPinY = dLegendY + LegendShape.Height/2 
  379.     End If
  380.     If TitleShape = Nothing Then
  381.         Set TitleShape = curPage.DrawRect(100, dY-dR-150, 2000, dY-dR-50)
  382.         TitleShape.Name = "Title" & CStr(intDiagramIndex) 
  383.     End If
  384.     TitleShape.FillPattern = 0
  385.     TitleShape.PenPattern = 0
  386.     TitleShape.Text = "Dannie diagrammi importirovani iz kolonok " & aiNameFieldPos(intDiagramIndex - 1) & " i " & aiValueFieldPos(intDiagramIndex - 1) & " faila " & Chr(10) & strTextFileName 
  387.     TitleShape.SetParaHAlign(1, Len(TitleShape.Text), 0)
  388.     TitleShape.SetCharSize(1, Len(TitleShape.Text), 11)
  389.     TitleShape.SetCharStyle(1, Len(TitleShape.Text), 1)
  390.     '╨¥╨░╤Ç╨╕╤ü╨╛╨▓╨░╤é╤î ╤Ç╨░╨╝╨║╤â ╨╗╨╡╨│╨╡╨╜╨┤╤ï
  391.     Set LegendFrame = LegendShape.DrawRect(-10 , -10, LegendShape.Width+10, LegendShape.Height+10)
  392.     LegendFrame.PenWeight = 6
  393.     LegendFrame.PenColor.Index = 0
  394.     LegendFrame.FillPattern = 0
  395.     
  396.     dSumPercent = 0
  397.     Randomize
  398.     '╨ò╤ü╨╗╨╕ ╨┐╤Ç╨╕ ╨┐╨╛╤ü╤é╤Ç╨╛╨╡╨╜╨╕╨╕ ╨┤╨╕╨░╨│╤Ç╨░╨╝╨╝╤ï ╨┤╨╛╨╗╨╢╨╜╤ï ╨╕╤ü╨┐╨╛╨╗╤î╨╖╨╛╨▓╨░╤é╤î╤ü╤Å ╨▒╨╕╨▒╨╗╨╕╨╛╤é╨╡╤ç╨╜╤ï╨╡ ╨╛╨▒╤è╨╡╨║╤é╤ï, ╨╛╤é╨║╤Ç╤ï╨▓╨░╤Ä ╨▒╨╕╨▒╨╗╨╕╨╛╤é╨╡╨║╤â,
  399.     '╨┐╤Ç╨╛╨▓╨╡╤Ç╤Å╤Ä, ╤â╨┤╨░╨╗╨╛╤ü╤î ╨╗╨╕ ╨╡╨╡ ╨╛╤é╨║╤Ç╤ï╤é╤î ╨╕ ╨╡╤ü╤é╤î ╨╗╨╕ ╨▓ ╨╜╨╡╨╣ ╨╜╨╡╨╛╨▒╤à╨╛╨┤╨╕╨╝╤ï╨╣ ╨┤╨╗╤Å ╤Ç╨░╨▒╨╛╤é╤ï ╨╛╨▒╤è╨╡╨║╤é.
  400.     If bUseLibObjects Then        
  401.         '╨₧╤é╨║╤Ç╤ï╨▓╨░╤Ä ╨▒╨╕╨▒╨╗╨╕╨╛╤é╨╡╨║╤â ConceptDraw, ╤ü╨╛╨┤╨╡╤Ç╨╢╨░╤ë╤â╤Ä ╨╕╤ü╨┐╨╛╨╗╤î╨╖╤â╤Ä╤ë╨╕╨╡╤ü╤Å ╨┐╤Ç╨╕ ╨┐╨╛╤ü╤é╤Ç╨╛╨╡╨╜╨╕╨╕ ╤ü╤à╨╡╨╝╤ï ╨╛╨▒╤è╨╡╨║╤é╤ï    
  402.         Set workLib = thisApp.OpenLib("ChartingFigures.cdl")
  403.         '╨₧╤é╨║╤Ç╤ï╨╗╨░╤ü╤î ╨╗╨╕ ╨▒╨╕╨▒╨╗╨╕╨╛╤é╨╡╨║╨░?
  404.         If Null = workLib Then
  405.             DrawDiagram = False
  406.             Msgbox("Ne udalos' otkrit' biblioteku ChartingFigures.cdl")
  407.             Exit Function
  408.         End If
  409.         Set libMaster = workLib.MasterByName("Pie chart slice 2")
  410.         '╨ò╤ü╤é╤î ╨╗╨╕ ╨╜╤â╨╢╨╜╤ï╨╣ ╨╛╨▒╤è╨╡╨║╤é?
  411.         If Null = libMaster Then
  412.             DrawDiagram = False
  413.             Msgbox("Ob'ekt ""Pie chart slice 2"" ne najden v biblioteke")
  414.             Exit Function
  415.         End If
  416.     End If
  417.     '╨ö╨╗╤Å ╨║╨░╨╢╨┤╨╛╨│╨╛ ╨╕╨╖ ╤ä╨╕╨╗╨╕╨░╨╗╨╛╨▓ ╨┤╨╛╨▒╨░╨▓╨╗╤Å╤Ä ╨▓ ╨┤╨╕╨░╨│╤Ç╨░╨╝╨╝╤â ╨╛╨▒╤è╨╡╨║╤é, ╨╕╨╖╨╛╨▒╤Ç╨░╨╢╨░╤Ä╤ë╨╕╨╣ ╨▓╨║╨╗╨░╨┤ ╤ä╨╕╨╗╨╕╨░╨╗╨░ ╨▓ ╨╛╨▒╤ë╨╡╨╡ ╨┤╨╡╨╗╨╛.
  418.     For i = 0 To iMaxUsedIndex
  419.         '╨₧╨┐╤Ç╨╡╨┤╨╡╨╗╤Å╤Ä ╤å╨▓╨╡╤é ╤ü╨╡╨║╤é╨╛╤Ç╨░ ╤ü╨╗╤â╤ç╨░╨╣╨╜╤ï╨╝ ╨╛╨▒╤Ç╨░╨╖╨╛╨╝.        
  420.         iR = Int(Rnd() * 255.999)  
  421.         iG = Int(Rnd() * 255.999)
  422.         iB = Int(Rnd() * 255.999)
  423.         '╨Æ ╨╖╨░╨▓╨╕╤ü╨╕╨╝╨╛╤ü╤é╨╕ ╨╛╤é ╤é╨╛╨│╨╛, ╨╕╤ü╨┐╨╛╨╗╤î╨╖╤â╨╡╤é╤ü╤Å ╨╗╨╕ ╨▒╨╕╨▒╨╗╨╕╨╛╤é╨╡╤ç╨╜╤ï╨╣ ╨╛╨▒╤è╨╡╨║╤é ╨╕╨╗╨╕ ╤ü╨╡╨║╤é╨╛╤Ç ╤Ç╨╕╤ü╤â╨╡╤é╤ü╤Å ╨┐╨╛╨╗╨╜╨╛╤ü╤é╤î╤Ä 
  424.         '╤ü ╨┐╨╛╨╝╨╛╤ë╤î╤Ä ConceptDraw Basic, ╨▓╤ï╨╖╤ï╨▓╨░╨╡╤é╤ü╤Å ╨╛╨┤╨╜╨░ ╨╕╨╖ ╨┤╨▓╤â╤à ╨░╨╗╤î╤é╨╡╤Ç╨╜╨░╤é╨╕╨▓╨╜╤ï╤à ╤ä╤â╨╜╨║╤å╨╕╨╣.
  425.         If bUseLibObjects Then        
  426.             DrawSliceFromLib(i, dSumPercent, aiPercents(i), iR, iG, iB, DiagramShape, LegendShape, libMaster)
  427.         Else
  428.             DrawSlice(i, dSumPercent, aiPercents(i), iR, iG, iB, DiagramShape, LegendShape)
  429.         End If
  430.         '╨ú╨▓╨╡╨╗╨╕╤ç╨╕╨▓╨░╤Ä ╨╖╨╜╨░╤ç╨╡╨╜╨╕╨╡ ╤ü╤â╨╝╨╝╨░╤Ç╨╜╨╛╨│╨╛ ╨┐╤Ç╨╛╤å╨╡╨╜╤é╨░ ╤â╨╢╨╡ ╨╜╨░╤Ç╨╕╤ü╨╛╨▓╨░╨╜╨╜╤ï╤à ╤ä╨╕╨╗╨╕╨░╨╗╨╛╨▓.
  431.         dSumPercent = dSumPercent + aiPercents(i) 
  432.     Next
  433.     
  434.     i=1
  435.     Set FileNameProp = Nothing
  436.     '╨ƒ╨╡╤Ç╨╡╨▒╨╕╤Ç╨░╨╡╨╝ CustomProperty ╨╛╨▒╤è╨╡╨║╤é╨░ ╨┤╨╛ ╤é╨╡╤à ╨┐╨╛╤Ç, ╨┐╨╛╨║╨░ ╨╜╨╡ ╨▒╤â╨┤╨╡╤é ╨╜╨░╨╣╨┤╨╡╨╜ ╤é╨╛╤é, ╤ç╤é╨╛ ╤ü╨╛╨┤╨╡╤Ç╨╢╨╕╤é
  437.     '╨╕╨╝╤Å ╤ä╨░╨╣╨╗╨░ ╨┤╨░╨╜╨╜╤ï╤à. ╨ò╨│╨╛ Label ╨┤╨╛╨╗╨╢╨╡╨╜ ╨▒╤ï╤é╤î ╤Ç╨░╨▓╨╡╨╜ "LastSourceFileName" 
  438.     Do While i<=DiagramShape.CustomPropsNum() And FileNameProp = Nothing
  439.         If DiagramShape.CustomProp(i).Label = "LastSourceFileName" Then
  440.             Set FileNameProp = DiagramShape.CustomProp(i) 
  441.         End If
  442.         i = i + 1    
  443.     Loop 
  444.     '╨ò╤ü╨╗╨╕ ╤é╨░╨║╨╛╨│╨╛ CustomProperty ╨╜╨╡ ╤ü╤â╤ë╨╡╤ü╤é╨▓╤â╨╡╤é, ╨╛╨╜ ╤ü╨╛╨╖╨┤╨░╨╡╤é╤ü╤Å.
  445.     If FileNameProp = Nothing Then
  446.         Set FileNameProp = DiagramShape.AddCustomProp() 
  447.         FileNameProp.Label = "LastSourceFileName" 
  448.     End If
  449.     '╨Æ CustomProperty ╨╖╨░╨┐╨╕╤ü╤ï╨▓╨░╨╡╤é╤ü╤Å ╨╕╨╝╤Å ╤ä╨░╨╣╨╗╨░ ╨┤╨░╨╜╨╜╤ï╤à
  450.     FileNameProp.Value = strTextFileName 
  451.     FileNameProp.Type = 0
  452.     FileNameProp.Prompt = "Imja Fajla, ispol'zovavshegosja v kachestve poslednego istochnika dannih"
  453.     
  454.     DrawDiagram = True
  455.     Exit Function
  456. ErrHandle:
  457.     MsgBox ("Proizoshla oshibka pri postroenii diagrammi.", cdbExclamation)
  458.     DrawDiagram = False
  459.     Exit Function
  460. End Function
  461.  
  462. '========================================================================================================================
  463. '========================================================================================================================
  464.  
  465. '╨ƒ╨╛╤ü╤é╤Ç╨╛╨╡╨╜╨╕╨╡ ╨╛╨┤╨╜╨╛╨│╨╛ ╤ü╨╡╨║╤é╨╛╤Ç╨░, ╨╕╨╖╨╛╨▒╤Ç╨░╨╢╨░╤Ä╤ë╨╡╨│╨╛ ╨┐╤Ç╨╕╨▒╤ï╨╗╤î ╤ä╨╕╨╗╨╕╨░╨╗╨░. ╨ƒ╨╛╤ü╤é╤Ç╨╛╨╡╨╜╨╕╨╡ ╨▒╨╡╨╖ ╨╕╤ü╨┐╨╛╨╗╤î╨╖╨╛╨▓╨░╨╜╨╕╨╡ ╨▒╨╕╨▒╨╗╨╕╨╛╤é╨╡╤ç╨╜╤ï╤à ╨╛╨▒╤è╨╡╨║╤é╨╛╨▓.
  466. 'iSliceNum - ╨┐╨╛╤Ç╤Å╨┤╨║╨╛╨▓╤ï╨╣ ╨╜╨╛╨╝╨╡╤Ç ╤ü╨╡╨║╤é╨╛╤Ç╨░
  467. 'dSumPercent - ╤ü╤â╨╝╨╝╨░╤Ç╨╜╤ï╨╣ ╨┐╤Ç╨╛╤å╨╡╨╜╤é ╤â╨╢╨╡ ╨╕╨╖╨╛╨▒╤Ç╨░╨╢╨╡╨╜╨╜╤ï╤à ╤ü╨╡╨║╤é╨╛╤Ç╨╛╨▓
  468. 'dNewPercent - ╨┐╤Ç╨╛╤å╨╡╨╜╤é, ╨║╨╛╤é╨╛╤Ç╤ï╨╣ ╨▒╤â╨┤╨╡╤é ╨╕╨╖╨╛╨▒╤Ç╨░╨╢╨╡╨╜ ╤ì╤é╨╕╨╝ ╤ü╨╡╨║╤é╨╛╤Ç╨╛╨╝
  469. 'iR, iG, iB - ╤ü╨╛╤ü╤é╨░╨▓╨╗╤Å╤Ä╤ë╨╕╨╡ RGB-╨┐╤Ç╨╡╨┤╤ü╤é╨░╨▓╨╗╨╡╨╜╨╕╤Å ╤å╨▓╨╡╤é ╨░ ╤ü╨╡╨║╤é╨╛╤Ç╨░
  470. 'DiagramShape - ╤ü╤ü╤ï╨╗╨║╨░ ╨╜╨░ ╨│╤Ç╤â╨┐╨┐╤â-╤ê╤ì╨╣╨┐ ╨┤╨╕╨░╨│╤Ç╨░╨╝╨╝╤ï
  471. 'LegendShape - ╤ü╤ü╤ï╨╗╨║╨░ ╨╜╨░ ╨│╤Ç╤â╨┐╨┐╤â-╤ê╤ì╨╣╨┐ ╨╗╨╡╨│╨╡╨╜╨┤╤ï
  472. Sub DrawSlice(ByVal iSliceNum As Integer, ByVal dSumPercent As Double, ByVal dNewPercent as Double, ByVal iR as Integer, ByVal iG as Integer, ByVal iB as Integer, ByVal DiagramShape As Shape, ByVal LegendShape As Shape)
  473.     
  474.     '╨Ü╨╛╨╛╤Ç╨┤╨╕╨╜╨░╤é╤ï ╤å╨╡╨╜╤é╤Ç╨░ ╨┤╨╕╨░╨│╤Ç╨░╨╝╨╝╤ï ╨▓ ╤ü╨╕╤ü╤é╨╡╨╝╨╡ ╨║╨╛╨╛╤Ç╨┤╨╕╨╜╨░╤é ╤ü╨╛╨┤╨╡╤Ç╨╢╨░╤ë╨╡╨╣ ╤ü╨╡╨║╤é╨╛╤Ç ╨│╤Ç╤â╨┐╨┐╤ï
  475.     Dim x1 As Double
  476.     Dim y1 As Double
  477.     '╨á╨░╨┤╨╕╤â╤ü ╨┤╨╕╨░╨│╤Ç╨░╨╝╨╝╤ï
  478.     Dim r As Double
  479.  
  480.     '╨Ü╨╛╨╛╤Ç╨┤╨╕╨╜╨░╤é╤ï ╤é╨╛╤ç╨╡╨║, ╨╕╤ü╨┐╨╛╨╗╤î╨╖╤â╨╡╨╝╤ï╤à ╨┐╤Ç╨╕ ╨┐╨╛╤ü╤é╤Ç╨╛╨╡╨╜╨╕╨╕ ╤ü╨╡╨║╤é╨╛╤Ç╨░.
  481.     '╨Ü╨╛╨╛╤Ç╨┤╨╕╨╜╨░╤é╤ï ╨╜╨░╤ç╨░╨╗╤î╨╜╨╛╨╣ ╤é╨╛╤ç╨║╨╕ ╨┤╤â╨│╨╕ ╤ü╨╡╨║╤é╨╛╤Ç╨░.
  482.     Dim x2 As Double
  483.     Dim y2 As Double
  484.     '╨Ü╨╛╨╛╤Ç╨┤╨╕╨╜╨░╤é╤ï ╨║╨╛╨╜╨╡╤ç╨╜╨╛╨╣ ╤é╨╛╤ç╨║╨╕ ╨┤╤â╨│╨╕ ╤ü╨╡╨║╤é╨╛╤Ç╨░.
  485.     Dim x3 As Double
  486.     Dim y3 As Double
  487.     '╨Ü╨╛╨╛╤Ç╨┤╨╕╨╜╨░╤é╤ï ╤ü╨╡╤Ç╨╡╨┤╨╕╨╜╤ï ╨┤╤â╨│╨╕ ╤ü╨╡╨║╤é╨╛╤Ç╨░.
  488.     Dim x4 As Double
  489.     Dim y4 As Double
  490.     '╨ú╨│╨╛╨╗, ╨╜╨░ ╨║╨╛╤é╨╛╤Ç╤ï╨╣ ╨╜╨░╤ç╨░╨╗╨╛ ╤ü╨╡╨║╤é╨╛╤Ç╨░ ╨╛╤é╤ü╤é╨╛╨╕╤é ╨╛╤é ╨╜╨░╤ç╨░╨╗╤î╨╜╨╛╨╣ ╨╛╤ü╨╕.    
  491.     Dim dCurrAngle as Double
  492.     '╨ª╨╡╨╜╤é╤Ç╨░╨╗╤î╨╜╤ï╨╣ ╤â╨│╨╛╨╗ ╤ü╨╡╨║╤é╨╛╤Ç╨░.
  493.     Dim dSliceAngle as Double
  494.     '╨í╤ü╤ï╨╗╨║╨░ ╨╜╨░ ╨╛╨▒╤è╨╡╨║╤é-╤ê╤ì╨╣╨┐, ╨┐╤Ç╨╡╨┤╤ü╤é╨░╨▓╨╗╤Å╤Ä╤ë╨╕╨╣ ╨╜╨╛╨▓╤ï╨╣ Slice.
  495.     Dim newSlice As Shape    
  496.     '╨Ü╨╛╨╛╤Ç╨┤╨╕╨╜╨░╤é╤ï ╤å╨╡╨╜╤é╤Ç╨░ ╤é╨╡╨║╤ü╤é╨░ ╨╛╨▒╤è╨╡╨║╤é╨░
  497.     Dim TextCenter As DPoint    
  498.     '╨í╤ü╤ï╨╗╨║╨░ ╨╜╨░ ╤ê╤ì╨╣╨┐, ╨┐╤Ç╨╡╨┤╤ü╤é╨░╨▓╨╗╤Å╤Ä╤ë╨╕╨╣ ╤å╨▓╨╡╤é╨╜╨╛╨╣ ╨┐╤Ç╤Å╨╝╨╛╤â╨│╨╛╨╗╤î╨╜╨╕╨║ ╨▓ ╨╗╨╡╨│╨╡╨╜╨┤╨╡, ╤ü╨╛╨╛╤é╨▓╨╡╤é╤ü╤é╨▓╤â╤Ä╤ë╨╕╨╣ ╤ì╤é╨╛╨╝╤â ╤ü╨╡╨║╤é╨╛╤Ç╤â
  499.     Dim LegendColorRect As Shape    
  500.     '╨í╤ü╤ï╨╗╨║╨░ ╨╜╨░ ╤ê╤ì╨╣╨┐, ╨┐╤Ç╨╡╨┤╤ü╤é╨░╨▓╨╗╤Å╤Ä╤ë╨╕╨╣ ╤é╨╡╨║╤ü╤é ╨▓ ╨╗╨╡╨│╨╡╨╜╨┤╨╡, ╤ü╨╛╨╛╤é╨▓╨╡╤é╤ü╤é╨▓╤â╤Ä╤ë╨╕╨╣ ╤ì╤é╨╛╨╝╤â ╤ü╨╡╨║╤é╨╛╤Ç╤â
  501.     Dim TextBoxShape As Shape
  502.     
  503.     Set TextCenter = New DPoint
  504.     
  505.     x1 = DiagramShape.Width/2
  506.     y1 = DiagramShape.Height/2
  507.     r = DiagramShape.Width/2
  508.     
  509.     '╨Æ╤ï╤ç╨╕╤ü╨╗╨╡╨╜╨╕╨╡ ╨║╨╛╨╛╤Ç╨┤╨╕╨╜╨░╤é ╤é╨╛╤ç╨╡╨║, ╨┐╨╛ ╨║╨╛╤é╨╛╤Ç╤ï╨╝ ╤ü╤é╤Ç╨╛╨╕╤é╤ü╤Å Slice. 
  510.     '╨Ü╨╛╨╛╤Ç╨┤╨╕╨╜╨░╤é╤ï ╨╛╤é╨╜╨╛╤ü╨╕╤é╨╡╨╗╤î╨╜╨╛ ╤ü╨╕╤ü╤é╨╡╨╝╤ï ╨║╨╛╨╛╤Ç╨┤╨╕╨╜╨░╤é ╤Ç╨╛╨┤╨╕╤é╨╡╨╗╤î╤ü╨║╨╛╨╣ ╨│╤Ç╤â╨┐╨┐╤ï.
  511.     '╨Æ╤ï╤ç╨╕╤ü╨╗╤Å╤Ä╤é╤ü╤Å ╨┐╨╛ ╤Ç╨░╨┤╨╕╤â╤ü╤â ╨╛╨║╤Ç╤â╨╢╨╜╨╛╤ü╤é╨╕ ╨╕ ╤â╨│╨╗╤â ╨┐╨╛╨▓╨╛╤Ç╨╛╤é╨░ ╨╛╤é╨╜╨╛╤ü╨╕╤é╨╡╨╗╤î╨╜╨╛ ╨╜╨░╤ç╨░╨╗╤î╨╜╨╛╨╣ ╨╛╤ü╨╕.
  512.     dCurrAngle = (2 * 3.14159265 * dSumPercent )/100 
  513.     dSliceAngle = (2 * 3.14159265 * dNewPercent )/100 
  514.     x2 = r * cos(dCurrAngle) + x1
  515.     y2 = r * sin(dCurrAngle) + y1
  516.     x3 = r * cos(dCurrAngle + dSliceAngle) + x1
  517.     y3 = r * sin(dCurrAngle + dSliceAngle) + y1
  518.     x4 = r * cos(dCurrAngle + dSliceAngle/2) + x1
  519.     y4 = r * sin(dCurrAngle + dSliceAngle/2) + y1
  520.     TextCenter.X = 0.8 * r * cos(dCurrAngle + dSliceAngle/2) + x1
  521.     TextCenter.Y = 0.8 * r * sin(dCurrAngle + dSliceAngle/2) + y1
  522.     
  523.     
  524.     Set active_Page = thisDoc.ActivePage()
  525.     '╨ƒ╨╛╤ü╤é╤Ç╨╛╨╡╨╜╨╕╨╡ ╤ü╨╡╨║╤é╨╛╤Ç╨░ ╨┐╨╛ ╨┐╨╛╨╗╤â╤ç╨╡╨╜╨╜╤ï╨╝ ╨║╨╛╨╛╤Ç╨┤╨╕╨╜╨░╤é╨░╨╝
  526.     Set newSlice = DiagramShape.BeginShape()
  527.     newSlice.FillColor.SetRGB(iR, iG, iB)
  528.     newSlice.FillPattern = 1    
  529.     newSlice.Text = CInt(dNewPercent) & "%"
  530.     '╨ª╨▓╨╡╤é ╤é╨╡╨║╤ü╤é╨░ ╤ü╨╡╨│╨╝╨╡╨╜╤é╨░ ╤â╤ü╤é╨░╨╜╨░╨▓╨╗╨╕╨▓╨░╨╡╤é╤ü╤Å ╤é╨░╨║╨╕╨╝, ╤ç╤é╨╛╨▒╤ï ╨╛╨╜ ╨▓╤ü╨╡╨│╨┤╨░ ╨▒╤ï╨╗ ╨▓╨╕╨┤╨╡╨╜ ╨╜╨░ ╤ä╨╛╨╜╨╡ ╤ü╨╡╨│╨╝╨╡╨╜╤é╨░
  531.     newSlice.SetCharColor(1, Len(newSlice.Text), 255 - iR, 255 - iG, 255 - iB)
  532.     DiagramShape.MoveTo(x1,y1)
  533.     DiagramShape.LineTo(x2,y2)
  534.     DiagramShape.ArcTo(x3, y3, x4, y4)
  535.     DiagramShape.LineTo(x1, y1)
  536.     DiagramShape.EndShape()    
  537.     
  538.     '╨ƒ╤Ç╨╡╨╛╨▒╤Ç╨░╨╖╨╛╨▓╨░╨╜╨╕╨╡ ╨║╨╛╨╛╤Ç╨┤╨╕╨╜╨░╤é ╤å╨╡╨╜╤é╤Ç╨░ ╤é╨╡╨║╤ü╤é╨░ ╤ü╨╡╨║╤é╨╛╤Ç╨░ ╨╕╨╖ ╤ü╨╕╤ü╤é╨╡╨╝╤ï  ╨║╨╛╨╛╤Ç╨┤╨╕╨╜╨░╤é ╤Ç╨╛╨┤╨╕╤é╨╡╨╗╤î╤ü╨║╨╛╨╣ ╨│╤Ç╤â╨┐╨┐╤ï 
  539.     '╨▓ ╨╗╨╛╨║╨░╨╗╤î╨╜╤â╤Ä ╤ü╨╕╤ü╤é╨╡╨╝╤â ╨║╨╛╨╛╤Ç╨┤╨╕╨╜╨░╤é.
  540.     newSlice.GPtoLP(TextCenter)
  541.     '╨₧╨┐╤Ç╨╡╨┤╨╡╨╗╨╡╨╜╨╕╨╡ ╤ü╨▓╨╛╨╣╤ü╤é╨▓ ╤é╨╡╨║╤ü╤é╨░ ╤ü╨╡╨║╤é╨╛╤Ç╨░
  542.     newSlice.TextGPinX = TextCenter.X
  543.     newSlice.TextGPinY = TextCenter.Y
  544.     newSlice.TextWidth = 100
  545.     newSlice.TextHeight = 50
  546.     newSlice.SetCharSize(1, Len(newSlice.Text), 12)
  547.     newSlice.SetCharStyle(1, Len(newSlice.Text), 1)
  548.     
  549.     '╨í╨╛╨╖╨┤╨░╨╜╨╕╨╡ ╨▓ ╨¢╨╡╨│╨╡╨╜╨┤╨╡ ╨╛╨┐╤Ç╨╡╨┤╨╡╨╗╨╡╨╜╨╕╤Å ╨┤╨░╨╜╨╜╨╛╨│╨╛ ╤ü╨╡╨║╤é╨╛╤Ç╨░
  550.     
  551.     '╨í╨╛╨╖╨┤╨░╨╡╨╝ ╨║╨▓╨░╨┤╤Ç╨░╤é, ╤å╨▓╨╡╤é ╨║╨╛╤é╨╛╤Ç╨╛╨│╨╛ ╤ü╨╛╨▓╨┐╨░╨┤╨░╨╡╤é ╤ü ╤å╨▓╨╡╤é╨╛╨╝ ╤ü╨╡╨║╤é╨╛╤Ç╨░
  552.     Set LegendColorRect = LegendShape.DrawRect(0, iSliceNum*100, 50, iSliceNum*100+50)
  553.     LegendColorRect.FillColor.SetRGB(iR, iG, iB)
  554.     LegendColorRect.FillPattern = 1
  555.     '╨í╨╛╨╖╨┤╨░╨╡╨╝ TextBox ╤ü ╨╛╨┐╨╕╤ü╨░╨╜╨╕╨╡╨╝ ╤ä╨╕╨╗╨╕╨░╨╗╨░ ╨╕ ╨╡╨│╨╛ ╨┐╤Ç╨╕╨▒╤ï╨╗╨╕.
  556.     Set TextBoxShape = LegendShape.DrawRect(100, iSliceNum*100, condblLegendWidth, iSliceNum*100+50)
  557.     TextBoxShape.FillPattern = 0
  558.     TextBoxShape.PenPattern = 0
  559.     TextBoxShape.Text = asNames(iSliceNum) & ", " & adValues(iSliceNum) & "$"
  560.     TextBoxShape.SetParaHAlign(1, Len(TextBoxShape.Text), 0)
  561.     TextBoxShape.SetCharSize(1, Len(TextBoxShape.Text), 10)
  562.     TextBoxShape.SetCharStyle(1, Len(TextBoxShape.Text), 0)
  563.  
  564.     Set TextCenter = Nothing
  565. End Sub
  566.  
  567. '========================================================================================================================
  568. '========================================================================================================================
  569.  
  570. '╨ƒ╨╛╤ü╤é╤Ç╨╛╨╡╨╜╨╕╨╡ ╨╛╨┤╨╜╨╛╨│╨╛ ╤ü╨╡╨║╤é╨╛╤Ç╨░, ╨╕╨╖╨╛╨▒╤Ç╨░╨╢╨░╤Ä╤ë╨╡╨│╨╛ ╨┐╤Ç╨╕╨▒╤ï╨╗╤î ╤ä╨╕╨╗╨╕╨░╨╗╨░.
  571. 'iSliceNum - ╨┐╨╛╤Ç╤Å╨┤╨║╨╛╨▓╤ï╨╣ ╨╜╨╛╨╝╨╡╤Ç ╤ü╨╡╨║╤é╨╛╤Ç╨░
  572. 'dSumPercent - ╤ü╤â╨╝╨╝╨░╤Ç╨╜╤ï╨╣ ╨┐╤Ç╨╛╤å╨╡╨╜╤é ╤â╨╢╨╡ ╨╕╨╖╨╛╨▒╤Ç╨░╨╢╨╡╨╜╨╜╤ï╤à ╤ü╨╡╨║╤é╨╛╤Ç╨╛╨▓
  573. 'dNewPercent - ╨┐╤Ç╨╛╤å╨╡╨╜╤é, ╨║╨╛╤é╨╛╤Ç╤ï╨╣ ╨▒╤â╨┤╨╡╤é ╨╕╨╖╨╛╨▒╤Ç╨░╨╢╨╡╨╜ ╤ì╤é╨╕╨╝ ╤ü╨╡╨║╤é╨╛╤Ç╨╛╨╝
  574. 'iR, iG, iB - ╤ü╨╛╤ü╤é╨░╨▓╨╗╤Å╤Ä╤ë╨╕╨╡ RGB-╨┐╤Ç╨╡╨┤╤ü╤é╨░╨▓╨╗╨╡╨╜╨╕╤Å ╤å╨▓╨╡╤é ╨░ ╤ü╨╡╨║╤é╨╛╤Ç╨░
  575. 'DiagramShape - ╤ü╤ü╤ï╨╗╨║╨░ ╨╜╨░ ╨│╤Ç╤â╨┐╨┐╤â-╤ê╤ì╨╣╨┐ ╨┤╨╕╨░╨│╤Ç╨░╨╝╨╝╤ï
  576. 'LegendShape - ╤ü╤ü╤ï╨╗╨║╨░ ╨╜╨░ ╨│╤Ç╤â╨┐╨┐╤â-╤ê╤ì╨╣╨┐ ╨╗╨╡╨│╨╡╨╜╨┤╤ï
  577. 'libMaster - ╤ü╤ü╤ï╨╗╨║╨░ ╨╜╨░ Master ╨╕╤ü╨┐╨╛╨╗╤î╨╖╤â╤Ä╤ë╨╡╨│╨╛╤ü╤Å ╨▒╨╕╨▒╨╗╨╕╨╛╤é╨╡╤ç╨╜╨╛╨│╨╛ ╨╛╨▒╤è╨╡╨║╤é╨░
  578. Sub DrawSliceFromLib(ByVal iSliceNum As Integer, ByVal dSumPercent As Double, ByVal dNewPercent as Double, ByVal iR as Integer, ByVal iG as Integer, ByVal iB as Integer, ByVal DiagramShape As Shape, ByVal LegendShape As Shape, ByVal libMaster As Master)
  579.     '╨Ü╨╛╨╛╤Ç╨┤╨╕╨╜╨░╤é╤ï ╤å╨╡╨╜╤é╤Ç╨░ ╨┤╨╕╨░╨│╤Ç╨░╨╝╨╝╤ï ╨▓ ╤ü╨╕╤ü╤é╨╡╨╝╨╡ ╨║╨╛╨╛╤Ç╨┤╨╕╨╜╨░╤é ╤ü╨╛╨┤╨╡╤Ç╨╢╨░╤ë╨╡╨╣ ╤ü╨╡╨║╤é╨╛╤Ç ╨│╤Ç╤â╨┐╨┐╤ï
  580.     Dim x1 As Double
  581.     Dim y1 As Double
  582.     '╨á╨░╨┤╨╕╤â╤ü ╨┤╨╕╨░╨│╤Ç╨░╨╝╨╝╤ï
  583.     Dim r As Double
  584.  
  585.     '╨Ü╨╛╨╛╤Ç╨┤╨╕╨╜╨░╤é╤ï ╨║╨╛╨╜╨╡╤ç╨╜╨╛╨╣ ╤é╨╛╤ç╨║╨╕ ╨┤╤â╨│╨╕ ╤ü╨╡╨║╤é╨╛╤Ç╨░.
  586.     Dim x3 As Double
  587.     Dim y3 As Double
  588.     '╨ú╨│╨╛╨╗, ╨╜╨░ ╨║╨╛╤é╨╛╤Ç╤ï╨╣ ╨║╨╛╨╜╨╡╤å ╤ü╨╡╨║╤é╨╛╤Ç╨░ ╨╛╤é╤ü╤é╨╛╨╕╤é ╨╛╤é ╨╜╨░╤ç╨░╨╗╤î╨╜╨╛╨╣ ╨╛╤ü╨╕.
  589.     Dim dCurrAngle as Double
  590.     '╨í╤ü╤ï╨╗╨║╨░ ╨╜╨░ ╨╛╨▒╤è╨╡╨║╤é-╤ê╤ì╨╣╨┐, ╨┐╤Ç╨╡╨┤╤ü╤é╨░╨▓╨╗╤Å╤Ä╤ë╨╕╨╣ ╨╜╨╛╨▓╤ï╨╣ ╤ü╨╡╨║╤é╨╛╤Ç.
  591.     Dim newSlice As Shape
  592.     
  593.     '╨í╤ü╤ï╨╗╨║╨░ ╨╜╨░ ╤ê╤ì╨╣╨┐, ╨┐╤Ç╨╡╨┤╤ü╤é╨░╨▓╨╗╤Å╤Ä╤ë╨╕╨╣ ╤å╨▓╨╡╤é╨╜╨╛╨╣ ╨┐╤Ç╤Å╨╝╨╛╤â╨│╨╛╨╗╤î╨╜╨╕╨║ ╨▓ ╨╗╨╡╨│╨╡╨╜╨┤╨╡, ╤ü╨╛╨╛╤é╨▓╨╡╤é╤ü╤é╨▓╤â╤Ä╤ë╨╕╨╣ ╤ì╤é╨╛╨╝╤â ╤ü╨╡╨║╤é╨╛╤Ç╤â
  594.     Dim LegendColorRect As Shape
  595.     '╨í╤ü╤ï╨╗╨║╨░ ╨╜╨░ ╤ê╤ì╨╣╨┐, ╨┐╤Ç╨╡╨┤╤ü╤é╨░╨▓╨╗╤Å╤Ä╤ë╨╕╨╣ ╤é╨╡╨║╤ü╤é ╨▓ ╨╗╨╡╨│╨╡╨╜╨┤╨╡, ╤ü╨╛╨╛╤é╨▓╨╡╤é╤ü╤é╨▓╤â╤Ä╤ë╨╕╨╣ ╤ì╤é╨╛╨╝╤â ╤ü╨╡╨║╤é╨╛╤Ç╤â
  596.     Dim TextBoxShape As Shape
  597.     
  598.     x1 = DiagramShape.Width/2
  599.     y1 = DiagramShape.Height/2
  600.     r = DiagramShape.Width/2
  601.     
  602.     '╨Æ╤ï╤ç╨╕╤ü╨╗╨╡╨╜╨╕╨╡ ╨║╨╛╨╛╤Ç╨┤╨╕╨╜╨░╤é ╤é╨╛╤ç╨╡╨║, ╨┐╨╛ ╨║╨╛╤é╨╛╤Ç╤ï╨╝ ╤ü╤é╤Ç╨╛╨╕╤é╤ü╤Å Slice. 
  603.     '╨Ü╨╛╨╛╤Ç╨┤╨╕╨╜╨░╤é╤ï ╨╛╤é╨╜╨╛╤ü╨╕╤é╨╡╨╗╤î╨╜╨╛ ╤ü╨╕╤ü╤é╨╡╨╝╤ï ╨║╨╛╨╛╤Ç╨┤╨╕╨╜╨░╤é ╤Ç╨╛╨┤╨╕╤é╨╡╨╗╤î╤ü╨║╨╛╨╣ ╨│╤Ç╤â╨┐╨┐╤ï.
  604.     '╨Æ╤ï╤ç╨╕╤ü╨╗╤Å╤Ä╤é╤ü╤Å ╨┐╨╛ ╤Ç╨░╨┤╨╕╤â╤ü╤â ╨╛╨║╤Ç╤â╨╢╨╜╨╛╤ü╤é╨╕ ╨╕ ╤â╨│╨╗╤â ╨┐╨╛╨▓╨╛╤Ç╨╛╤é╨░ ╨╛╤é╨╜╨╛╤ü╨╕╤é╨╡╨╗╤î╨╜╨╛ ╨╜╨░╤ç╨░╨╗╤î╨╜╨╛╨╣ ╨╛╤ü╨╕.
  605.     dCurrAngle = (2 * 3.14159265 * (dSumPercent + dNewPercent))/100 
  606.     x3 = r * cos(dCurrAngle) + x1
  607.     y3 = r * sin(dCurrAngle) + y1
  608.     
  609.     Set active_Page = thisDoc.ActivePage()
  610.     '╨ƒ╨╛╤ü╤é╤Ç╨╛╨╡╨╜╨╕╨╡ ╤ü╨╡╨║╤é╨╛╤Ç╨░ ╨┐╨╛ ╨┐╨╛╨╗╤â╤ç╨╡╨╜╨╜╤ï╨╝ ╨║╨╛╨╛╤Ç╨┤╨╕╨╜╨░╤é╨░╨╝
  611.     Set newSlice = DiagramShape.DrawStamp(libMaster.Shape, x1, y1, x3, y3)
  612.     newSlice.FillColor.SetRGB(iR, iG, iB)
  613.     newSlice.Text = CInt(dNewPercent*10)/10 & "%"
  614.     '╨ª╨▓╨╡╤é ╤é╨╡╨║╤ü╤é╨░ ╤ü╨╡╨│╨╝╨╡╨╜╤é╨░ ╤â╤ü╤é╨░╨╜╨░╨▓╨╗╨╕╨▓╨░╨╡╤é╤ü╤Å ╤é╨░╨║╨╕╨╝, ╤ç╤é╨╛╨▒╤ï ╨╛╨╜ ╨▓╤ü╨╡╨│╨┤╨░ ╨▒╤ï╨╗ ╨▓╨╕╨┤╨╡╨╜ ╨╜╨░ ╤ä╨╛╨╜╨╡ ╤ü╨╡╨│╨╝╨╡╨╜╤é╨░
  615.     newSlice.SetCharColor(1, Len(newSlice.Text), 255 - iR, 255 - iG, 255 - iB)
  616.  
  617.         
  618.     Set LegendColorRect = LegendShape.DrawRect(0, iSliceNum*100, 50, iSliceNum*100+50)
  619.     '╨í╨╛╨╖╨┤╨░╨╡╨╝ ╨║╨▓╨░╨┤╤Ç╨░╤é, ╤å╨▓╨╡╤é ╨║╨╛╤é╨╛╤Ç╨╛╨│╨╛ ╤ü╨╛╨▓╨┐╨░╨┤╨░╨╡╤é ╤ü ╤å╨▓╨╡╤é╨╛╨╝ ╤ü╨╡╨║╤é╨╛╤Ç╨░
  620.     LegendColorRect.FillColor.SetRGB(iR, iG, iB)
  621.     LegendColorRect.FillPattern = 1
  622.     '╨í╨╛╨╖╨┤╨░╨╡╨╝ TextBox ╤ü ╨╛╨┐╨╕╤ü╨░╨╜╨╕╨╡╨╝ ╤ä╨╕╨╗╨╕╨░╨╗╨░ ╨╕ ╨╡╨│╨╛ ╨┐╤Ç╨╕╨▒╤ï╨╗╨╕.
  623.     Set TextBoxShape = LegendShape.DrawRect(100, iSliceNum*100, condblLegendWidth, iSliceNum*100+50)
  624.     TextBoxShape.FillPattern = 0
  625.     TextBoxShape.PenPattern = 0
  626.     TextBoxShape.Text = asNames(iSliceNum) & ", " & adValues(iSliceNum) & "$"
  627.     TextBoxShape.SetParaHAlign(1, Len(TextBoxShape.Text), 0)
  628.     TextBoxShape.SetCharSize(1, Len(TextBoxShape.Text), 10)
  629.     TextBoxShape.SetCharStyle(1, Len(TextBoxShape.Text), 0)
  630.  
  631.     Set TextCenter = Nothing
  632. End Sub
  633.