Change the picture by pressing the button
Posted: Sun Mar 24, 2013 6:34 am
How do I convert the following program so that when you press the INF1, INF2, ..., IN7 is updated images?
[/size]
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 } } // Значимость признака в процентах от суммы значимостей всех признаков нарастающим итогом
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 )
// Посчитать БД ZGOSInf#
CLOSE ALL
USE Attributes EXCLUSIVE NEW
N_Atr = RECCOUNT()
nMax = 7 * 4 * N_Atr
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()
mRecno = RECNO()
mKodAtr = Kod_atr
mNameAtr = Name_atr
mKodOpSc = Kod_OpSc
SELECT (mNameInf)
DBGOTO(mRecno)
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)
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)
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)
DBSKIP(1)
ENDDO
NEXT
DC_GetProgress(oProgress,nMax,nMax)
oDialog:Destroy()
***** ВИЗУАЛИЗАЦИЯ ГРАФИКА *************************************************************
***** Размер окна для отображения графика **********************************************
* --- RMChart ActiveX Control --
@ 0,0 DCRMCHART oRmChart SIZE 1140, 640 RESIZE DCGUI_RESIZE_RESIZEONLY
***** Линейный график: исходные данные *************************************************
jj = 1
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)
DBSKIP(1)
ENDDO
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'
@ 10,10 DcChartRegion oRegion6 ; // Координаты нижнего левого угла поля построения графика в окне
PARENT oRMChart ;
SIZE 1100, 565 PIXEL ; // Размер поля построения графика в окне 1100 x 600
CAPTION TITLE UPPER(ALLTRIM(M_NameAppl)) 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 ACTION {||ZnachAtr(2, oRegion6), oRMChart:draw()}
@ DCGUI_ROW, DCGUI_COL + 2 DCPUSHBUTTON CAPTION 'Inf3' SIZE 34,25 ACTION {||ZnachAtr(3, oRegion6), oRMChart:draw()}
@ DCGUI_ROW, DCGUI_COL + 2 DCPUSHBUTTON CAPTION 'Inf4' SIZE 34,25 ACTION {||ZnachAtr(4, oRegion6), oRMChart:draw()}
@ DCGUI_ROW, DCGUI_COL + 2 DCPUSHBUTTON CAPTION 'Inf5' SIZE 34,25 ACTION {||ZnachAtr(5, oRegion6), oRMChart:draw()}
@ DCGUI_ROW, DCGUI_COL + 2 DCPUSHBUTTON CAPTION 'Inf6' SIZE 34,25 ACTION {||ZnachAtr(6, oRegion6), oRMChart:draw()}
@ DCGUI_ROW, DCGUI_COL + 2 DCPUSHBUTTON CAPTION 'Inf7' SIZE 34,25 ACTION {||ZnachAtr(7, oRegion6), oRMChart:draw()}
@ DCGUI_ROW, DCGUI_COL + 7 DCPUSHBUTTON CAPTION 'Записать графический файл' SIZE 165,25 ;
ACTION {||SaveChartToBitmap(oRMChart)}
@ DCGUI_ROW, DCGUI_COL + 2 DCPUSHBUTTON CAPTION 'Копировать в буфер обмена' SIZE 165,25 ;
ACTION {||SaveChartToClipboard(oRMChart)}
@ DCGUI_ROW, DCGUI_COL + 2 DCPUSHBUTTON CAPTION 'Печать' SIZE 55,25 ;
ACTION {||PrintChart(oRMChart)}
@ DCGUI_ROW, DCGUI_COL + 7 DCPUSHBUTTON CAPTION 'Копировать Abs' SIZE 103,25 ;
ACTION {||SaveAbs()}
@ DCGUI_ROW, DCGUI_COL + 2 DCPUSHBUTTON CAPTION 'Удалить незнач.призн.из Abs' SIZE 168,25 ; // Еще надо сделать
ACTION {||SaveAbs()}
@ DCGUI_ROW, DCGUI_COL + 2 DCPUSHBUTTON CAPTION 'Восстановить Abs' SIZE 117,25 ;
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
RETURN NIL
*************************************************************************************************
FUNCTION ZnachAtr(jj, oRegion6)
LOCAL i, aData[0]
@ 380,680 DCGRASTRING Ar_Model[jj] COLOR Black FONT '09.Tahona Bold'
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 , DC_Random(100))
* AADD(aData , Zn_PrcNit)
* AADD(aLabel, "[" + STR(Num_prc,mMaxLen) + "]-" + ALLTRIM(Name_atr))
AADD(aLabel, STR(Num_prc,mMaxLen))
DC_GetProgress(oProgress, ++nTime, nMax)
DBSKIP(1)
ENDDO
oRegion6:aLineGroupIndus[1,DCRMCHART_BARSERIES_DATA] := aData
oRegion6:reset()
RETURN NIL