Hi, Roger! At the touch of button, a function ZnachAtr (), which replaces the data in the array and the displayed chart in the chart changes, and the name is incorrect. How to replace it inside the function?
Code: Select all
************************************************************************************************************
******** 3.7.5. Значимость градаций описательных шкал (признаков)
******** В данном режиме все градации описательных шкал (признаки) ранжируются в порядке убывания
******** значимости, т.е. вариабельности значений частных критериев статистических баз и баз знаний
************************************************************************************************************
FUNCTION F3_7_5()
LOCAL GetList[0], GetOptions, oRmChart, oRegion1, oRegion2, oRegion3, ;
oRegion4, oRegion5, oRegion6, aBarGroup[0], aLineGroup[0], aPie[0], ;
aDonut[0], aBarGroupFloat[0], aBarGroupIndus[0], aLineGroupIndus[0], ;
aDataAxis1[0], aDataAxis5[0], aDataAxis6[0], cRegSvr, ;
cRmChart, cClsId, cRegQuery, nWhich, oStatus
******* Проверка возможности работать в системе ******************************************
IF M_KodAdmAppls = 0 // Выйти из системы если нет авторизации
LB_Warning("Вы не авторизовались в системе и не можете ей пользоваться!")
RETURN NIL
ENDIF
IF ApplChange() // Перейти в папку выбранного приложения или выйти из системы
LB_Warning("Необходимо задать (выбрать) хотя бы одно текущее приложение !!!")
RETURN NIL
ENDIF
IF .NOT. FILE("Abs.dbf") .OR.; // БД абс.частот
.NOT. FILE("Prc1.dbf") .OR.; // БД процентных распрделений
.NOT. FILE("Prc2.dbf") .OR.;
.NOT. FILE("Inf1.dbf") .OR.;
.NOT. FILE("Inf1.dbf") .OR.;
.NOT. FILE("Inf1.dbf") .OR.;
.NOT. FILE("Inf1.dbf") .OR.;
.NOT. FILE("Inf1.dbf") .OR.;
.NOT. FILE("Inf1.dbf") .OR.;
.NOT. FILE("Inf1.dbf")
Mess := {}
AADD(Mess, 'В текущем приложении нет БД Abs, Prc1, Prc2, Inf1-Inf7.')
AADD(Mess, 'Необходимо их создать в 3-й подсистеме (можно в режиме 3.4) !!!')
LB_Warning(Mess, '3.7.5. Значимость градаций описательных шкал (признаков)')
RETURN NIL
ENDIF
Mess := {}
DO CASE
CASE OSVER() = "3.1"
AADD(Mess, 'На комьютере установлена MS Windows NT 3.1')
CASE OSVER() = "3.5"
AADD(Mess, 'На комьютере установлена MS Windows NT 3.5')
CASE OSVER() = "3.51"
AADD(Mess, 'На комьютере установлена MS Windows NT 3.51')
CASE OSVER() = "4.0"
AADD(Mess, 'На комьютере установлена MS Windows NT 4.0')
CASE OSVER() = "5.0"
AADD(Mess, 'На комьютере установлена MS Windows 2000')
CASE OSVER() = "5.1"
AADD(Mess, 'На комьютере установлена MS Windows XP')
CASE OSVER() = "5.2"
AADD(Mess, 'На комьютере установлена MS Server 2003')
ENDCASE
IF LEN(Mess) > 0
AADD(Mess, 'А для работы профессиональной графики нужна:')
AADD(Mess, 'MS Windows Vista / MS Windows Server 2008 или') // OSVER() = "6.0"
AADD(Mess, 'MS Windows 7 / MS Windows Server 2008 R2') // OSVER() = "6.1"
LB_Warning(Mess, 'Сообщение о неудачном завершении операции')
RETURN NIL
ENDIF
// Еще сделать проверку на то, проинсталлирован ли ActiveX
******* Подготовка данных (расчет значимости признаков во всех моделях) *************
***** Создать БД Zpr_Inf#
CLOSE ALL
aStructure := { { "Num" , "N", 15, 0 }, ; // Порядковый номер после ранжирования
{ "Num_prc" , "N", 21, 7 }, ; // Порядковый номер после ранжирования в процентах
{ "Kod_atr" , "N", 15, 0 }, ; // Код признака, т.е. градации описательной шкалы
{ "Name_atr" , "C",130, 0 }, ; // Наименование признака, т.е. описательной шкалы+"-"+градации описательной шкалы
{ "Kod_OpSc" , "N", 15, 0 }, ; // Код описательной шкалы
{ "Znach_Atr", "N", 21, 7 }, ; // Значимость признака в ее единицах измерения
{ "Zn_AtrNit", "N", 21, 7 }, ; // Значимость признака в ее единицах измерения нарастающим итогом
{ "Znach_Prc", "N", 21, 7 }, ; // Значимость признака в процентах от суммы значимостей всех признаков
{ "Zn_PrcNit", "N", 21, 7 }, ; // Значимость признака в процентах от суммы значимостей всех признаков нарастающим итогом
{ "Delete" , "C", 6, 0 } } // Признак, что данный признак был удален из Abs
DbCreate( "Zpr_Inf1.dbf", aStructure )
DbCreate( "Zpr_Inf2.dbf", aStructure )
DbCreate( "Zpr_Inf3.dbf", aStructure )
DbCreate( "Zpr_Inf4.dbf", aStructure )
DbCreate( "Zpr_Inf5.dbf", aStructure )
DbCreate( "Zpr_Inf6.dbf", aStructure )
DbCreate( "Zpr_Inf7.dbf", aStructure )
// Посчитать БД Zpr_Inf#
CLOSE ALL
USE Abs EXCLUSIVE NEW
USE Attributes EXCLUSIVE NEW
N_Atr = RECCOUNT()
nMax = 7 * 3 * N_Atr + 1
Mess = '3.7.5. Подготовка данных для визуализации значимости признаков'
@ 4,5 DCPROGRESS oProgress SIZE 95,1.1 MAXCOUNT nMax COLOR GRA_CLR_BLUE PERCENT EVERY 100
DCREAD GUI TITLE Mess PARENT @oDialog FIT EXIT
oDialog:show()
nTime = 0
DC_GetProgress(oProgress,0,nMax)
FOR jj=1 TO 7
mNameInf = "Inf"+STR(jj,1)
mNameZpr = "Zpr_Inf"+STR(jj,1)
USE (mNameInf) EXCLUSIVE NEW
USE (mNameZpr) EXCLUSIVE NEW
****** Копирование кодов и наименований атрибутов в базы значимостей
SELECT Attributes
DBGOTOP()
DO WHILE .NOT. EOF()
mKodAtr = Kod_atr
mNameAtr = Name_atr
mKodOpSc = Kod_OpSc
SELECT (mNameInf)
DBGOTO(mKodAtr)
mDisp = Disp
SELECT (mNameZpr)
APPEND BLANK
REPLACE Kod_atr WITH mKodAtr
REPLACE Name_atr WITH mNameAtr
REPLACE Kod_OpSc WITH mKodOpSc
REPLACE Znach_Atr WITH mDisp
DC_GetProgress(oProgress, ++nTime, nMax) // 1
SELECT Attributes
DBSKIP(1)
ENDDO
****** Сортировка базы по значимости признаков
SELECT (mNameZpr)
INDEX ON STR(999999999999.9999999 - Znach_Atr, 21, 7) TO (mNameZpr)
****** Расчет значимости признака в ее единицах измерения нарастающим итогом
DBGOTOP()
mSumZntr = 0
DO WHILE .NOT. EOF()
mSumZntr = mSumZntr + Znach_atr
REPLACE Zn_AtrNit WITH mSumZntr
DC_GetProgress(oProgress, ++nTime, nMax) // 2
DBSKIP(1)
ENDDO
****** Расчет значимости признаков в процентах от суммы значимостей всех признаков и нарастающим итогом в процентах
mMaxLen = 0
mNumPP = 0
mSumZnPrc = 0
DBGOTOP()
DO WHILE .NOT. EOF()
mZnPrc = Znach_Atr / mSumZntr * 100
mSumZnPrc = mSumZnPrc + mZnPrc
REPLACE Num WITH ++mNumPP
REPLACE Num_prc WITH mNumPP / N_Atr * 100
REPLACE Znach_Prc WITH mZnPrc
REPLACE Zn_PrcNit WITH mSumZnPrc
mMaxLen = MAX(mMaxLen, LEN(ALLTRIM(STR(ROUND(Num_prc,0)))))
DC_GetProgress(oProgress, ++nTime, nMax) // 3
DBSKIP(1)
ENDDO
NEXT
***** ВИЗУАЛИЗАЦИЯ ГРАФИКА *************************************************************
***** Размер окна для отображения графика **********************************************
* --- RMChart ActiveX Control --
@ 0,0 DCRMCHART oRmChart SIZE 1140, 640 RESIZE DCGUI_RESIZE_RESIZEONLY
***** Линейный график: исходные данные *************************************************
jj = 1
StrFile(STR(jj), '_Zpr_Inf.txt') // Запись текстового файла с параметром jj
* jj = VAL(FileStr('_Zpr_Inf.txt')) // Загрузка параметра jj из текстового файла
mNameZpr = "Zpr_Inf"+STR(jj,1)
SELECT (mNameZpr)
INDEX ON STR(999999999999.9999999 - Znach_Atr, 21, 7) TO (mNameZpr)
aData := {}
aLabel := {}
DBGOTOP()
DO WHILE .NOT. EOF()
AADD(aData , Zn_PrcNit)
* AADD(aLabel, "[" + STR(Num_prc,mMaxLen) + "]-" + ALLTRIM(Name_atr))
AADD(aLabel, STR(Num_prc,mMaxLen))
DC_GetProgress(oProgress, ++nTime, nMax) // 4
DBSKIP(1)
ENDDO
DC_GetProgress(oProgress,nMax,nMax)
oDialog:Destroy()
IF LEN(aData) < 20
DcAddLineGroup TO aLineGroupIndus ;
DATA aData ;
WHICHDATAAXIS 2 ;
STYLE RMC_LINE_CABLE ;
COLOR Green ;
LINESTYLE RMC_LSTYLE_LINE ;
SYMBOLSTYLE RMC_SYMBOL_BULLET ;
VALUELABEL 1
ELSE
DcAddLineGroup TO aLineGroupIndus ;
DATA aData ;
WHICHDATAAXIS 2 ;
STYLE RMC_LINE_CABLE ;
COLOR Green ;
LINESTYLE RMC_LSTYLE_LINE ;
SYMBOLSTYLE RMC_SYMBOL_BULLET
ENDIF
****************************************************************************************
DcAddDataAxis TO aDataAxis6 ;
AXISTEXT 'Суммарная значимость градаций описательных шкал "нарастающим итогом" в %' ;
ALIGN RMC_DATAAXISLEFT ;
MINVALUE 0 MAXVALUE 100
@ 380,480 DCGRASTRING "Градации описательных шкал в %" COLOR Black FONT '11.Tahona' // Использовать для обновления изображения блок кода
* @ .. DCPUSHBUTTON CAPTION 'Change Title' ACTION {||oRegion6:Caption():Title := "My New Title"}
mTitle = SUBSTR(ALLTRIM(M_NameAppl) + ". Модель: " + ALLTRIM(Ar_Model[jj]), 1, 130) // Использовать для обновления изображения блок кода
@ 10,10 DcChartRegion oRegion6 ; // Координаты нижнего левого угла поля построения графика в окне
PARENT oRMChart ;
SIZE 1100, 555 PIXEL ; // Размер поля построения графика в окне 1100 x 600
CAPTION TITLE mTitle BACKCOLOR White TEXTCOLOR Black FONTSIZE 10 BOLD ;
GRID ;
DATAAXIS aDataAxis6 ;
LABELAXIS LABELARRAY aLabel ALIGN RMC_LABELAXISBOTTOM ;
LINEGROUP aLineGroupIndus
****************************************************************************************
***** Кнопки визу **********************************************************************
@ 620, 0 DCPUSHBUTTON CAPTION 'Помощь' SIZE 60,25 ACTION {||Help3_7_5()}
@ DCGUI_ROW, DCGUI_COL + 5 DCPUSHBUTTON CAPTION 'Inf1' SIZE 34,25 TOOLTIP 'Переключиться на работу с базой знаний "Inf1"' ACTION {||ZnachAtr(1, oRegion6), oRMChart:draw()}
@ DCGUI_ROW, DCGUI_COL + 2 DCPUSHBUTTON CAPTION 'Inf2' SIZE 34,25 TOOLTIP 'Переключиться на работу с базой знаний "Inf2"' ACTION {||ZnachAtr(2, oRegion6), oRMChart:draw()}
@ DCGUI_ROW, DCGUI_COL + 2 DCPUSHBUTTON CAPTION 'Inf3' SIZE 34,25 TOOLTIP 'Переключиться на работу с базой знаний "Inf3"' ACTION {||ZnachAtr(3, oRegion6), oRMChart:draw()}
@ DCGUI_ROW, DCGUI_COL + 2 DCPUSHBUTTON CAPTION 'Inf4' SIZE 34,25 TOOLTIP 'Переключиться на работу с базой знаний "Inf4"' ACTION {||ZnachAtr(4, oRegion6), oRMChart:draw()}
@ DCGUI_ROW, DCGUI_COL + 2 DCPUSHBUTTON CAPTION 'Inf5' SIZE 34,25 TOOLTIP 'Переключиться на работу с базой знаний "Inf5"' ACTION {||ZnachAtr(5, oRegion6), oRMChart:draw()}
@ DCGUI_ROW, DCGUI_COL + 2 DCPUSHBUTTON CAPTION 'Inf6' SIZE 34,25 TOOLTIP 'Переключиться на работу с базой знаний "Inf6"' ACTION {||ZnachAtr(6, oRegion6), oRMChart:draw()}
@ DCGUI_ROW, DCGUI_COL + 2 DCPUSHBUTTON CAPTION 'Inf7' SIZE 34,25 TOOLTIP 'Переключиться на работу с базой знаний "Inf7"' ACTION {||ZnachAtr(7, oRegion6), oRMChart:draw()}
@ DCGUI_ROW, DCGUI_COL + 7 DCPUSHBUTTON CAPTION 'Записать графический файл' SIZE 165,25 TOOLTIP 'Записать изображение в виде графического файла' ACTION {||SaveChartToBitmap(oRMChart)}
@ DCGUI_ROW, DCGUI_COL + 2 DCPUSHBUTTON CAPTION 'Копировать в буфер обмена' SIZE 165,25 TOOLTIP 'Скопировать изображение в буфер обмена' ACTION {||SaveChartToClipboard(oRMChart)}
@ DCGUI_ROW, DCGUI_COL + 2 DCPUSHBUTTON CAPTION 'Печать' SIZE 55,25 TOOLTIP 'Распечатать изображение на текущем принтере' ACTION {||PrintChart(oRMChart)}
@ DCGUI_ROW, DCGUI_COL + 7 DCPUSHBUTTON CAPTION 'Копировать Abs' SIZE 103,25 TOOLTIP 'Создать копию БД Abs для возможности отката' ACTION {||SaveAbs()}
@ DCGUI_ROW, DCGUI_COL + 2 DCPUSHBUTTON CAPTION 'Удалить незнач.призн.из Abs' SIZE 168,25 TOOLTIP 'Удалить малозначимые признаки из БД Abs' ACTION {||DelAtrAbs()}
@ DCGUI_ROW, DCGUI_COL + 2 DCPUSHBUTTON CAPTION 'Восстановить Abs' SIZE 117,25 TOOLTIP 'Восстановить БД Abs из ранее созданной копии' ACTION {||LoadAbs()}
DCGETOPTIONS RESIZE PIXEL
DCREAD GUI ;
SETAPPWINDOW ;
FIT ;
TITLE '3.7.5. Значимость градаций описательных шкал. (C) Универсальная когнитивная аналитическая система "Эйдос-Х++"' ;
OPTIONS GetOptions ;
EVAL {||oRMChart:RMCToolTipWidth := 100, ;
oRMChart:RMCUserWatermark := '(C) Универсальная когнитивная аналитическая система "Эйдос-Х++"', ;
oRMChart:RMCUserWMAlignment := RMC_TEXTRIGHT, ;
oRMChart:RMCUserWMFontSize := 20, ;
oRMChart:RMCUserWMLucent := 40, ;
oRmChart:mouseDown := ;
{|a,b,c,d,e,o|aData := e,nWhich := a,o:=Thread():new(),o:start({||BrowseCallbackData(nWhich,aData,oRMChart)})}, ;
oRmChart:mouseMove := ;
{|nMouseButton,b,nX,nY,aData|oRMChart:showToolTip( nMouseButton, nX, nY, aData )}, ;
oRmChart:draw(), ;
ShowDebugInfo(oRMChart)}
CLOSE ALL
* aSaveMainM := DC_DataSave() // Сохранение вычислительной среды (открытые и текущие БД и индексы)
DC_DataRest( aSaveMainM ) // Восстановление вычислительной среды (открытые и текущие БД и индексы)
RETURN NIL
*************************************************************************************************
FUNCTION ZnachAtr(jj, oRegion)
LOCAL i, aData[0]
mNameZpr = "Zpr_Inf"+STR(jj,1)
SELECT (mNameZpr)
INDEX ON STR(999999999999.9999999 - Znach_Atr, 21, 7) TO (mNameZpr)
aData := {}
aLabel := {}
DBGOTOP()
DO WHILE .NOT. EOF()
AADD(aData , Zn_PrcNit)
* AADD(aData , DC_Random(100))
* AADD(aLabel, "[" + STR(Num_prc,mMaxLen) + "]-" + ALLTRIM(Name_atr))
AADD(aLabel, STR(Num_prc,mMaxLen))
DBSKIP(1)
ENDDO
StrFile(STR(jj), '_Zpr_Inf.txt') // Запись текстового файла с параметром jj
* jj = VAL(FileStr('_Zpr_Inf.txt')) // Загрузка параметра jj из текстового файла
oRegion:Title := SUBSTR(ALLTRIM(M_NameAppl) + ". Модель: " + ALLTRIM(Ar_Model[jj]), 1, 130) // Использовать для обновления изображения блок кода
oRegion:lineGroup[1,DCRMCHART_LINESERIES_DATA] := aData
oRegion:reset()
RETURN NIL