Change the picture by pressing the button

This forum is for eXpress++ general support.
Post Reply
Message
Author
User avatar
Eugene Lutsenko
Posts: 1649
Joined: Sat Feb 04, 2012 2:23 am
Location: Russia, Southern federal district, city of Krasnodar
Contact:

Change the picture by pressing the button

#1 Post by Eugene Lutsenko »

How do I convert the following program so that when you press the INF1, INF2, ..., IN7 is updated images?

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
[/size]
Last edited by Eugene Lutsenko on Sun Mar 24, 2013 9:36 am, edited 1 time in total.

User avatar
rdonnay
Site Admin
Posts: 4729
Joined: Wed Jan 27, 2010 6:58 pm
Location: Boise, Idaho USA
Contact:

Re: Change the picture by pressing the button

#2 Post by rdonnay »

Use the :setCaption() or the :setCaptionArray() method of the DC_XbpPushButtonXP() class.
The eXpress train is coming - and it has more cars.

User avatar
Eugene Lutsenko
Posts: 1649
Joined: Sat Feb 04, 2012 2:23 am
Location: Russia, Southern federal district, city of Krasnodar
Contact:

Re: Change the picture by pressing the button

#3 Post by Eugene Lutsenko »

I tried to do just as you have done in the program DCCHART:

Code: Select all

@ DCGUI_ROW, DCGUI_COL + 10 DCPUSHBUTTON CAPTION 'Apply New Data' SIZE 90,20 ;
   TOOLTIP 'Apply new RANDOM data to all graph regions' ;
   ACTION {||ApplyNewData1(oRMChart:regions[1]), ;
             ApplyNewData2(oRMChart:regions[2]), ;
             ApplyNewData4(oRMChart:regions[3]), ;
             ApplyNewData4(oRMChart:regions[4]), ;
             ApplyNewData6(oRMChart:regions[6]), ;
             oRMChart:draw()}
and

Code: Select all

STATIC FUNCTION ApplyNewData1( oRegion )

LOCAL i, aBarData1[0], aBarData2[0]

FOR i := 1 TO 3
  Sleep(2)
  AAdd(aBarData1,DC_Random(100))
  Sleep(2)
  AAdd(aBarData2,DC_Random(100))
NEXT

oRegion:barGroup[1,DCRMCHART_BARSERIES_DATA] := aBarData1
oRegion:barGroup[2,DCRMCHART_BARSERIES_DATA] := aBarData2
oRegion:reset()

RETURN nil
But I have not yet working

User avatar
Eugene Lutsenko
Posts: 1649
Joined: Sat Feb 04, 2012 2:23 am
Location: Russia, Southern federal district, city of Krasnodar
Contact:

Re: Change the picture by pressing the button

#4 Post by Eugene Lutsenko »

All of it! Thank you so much!

Image

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 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 {||Razrab() }
   @ 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

RETURN NIL
*************************************************************************************************

FUNCTION ZnachAtr(jj, oRegion)

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 , Zn_PrcNit)
*      AADD(aData , DC_Random(100))
*      AADD(aLabel, "[" + STR(Num_prc,mMaxLen) + "]-" + ALLTRIM(Name_atr))
       AADD(aLabel, STR(Num_prc,mMaxLen))
       DC_GetProgress(oProgress, ++nTime, nMax)
       DBSKIP(1)
   ENDDO

oRegion:lineGroup[1,DCRMCHART_LINESERIES_DATA] := aData
oRegion:reset()

RETURN NIL
[/size]

User avatar
Eugene Lutsenko
Posts: 1649
Joined: Sat Feb 04, 2012 2:23 am
Location: Russia, Southern federal district, city of Krasnodar
Contact:

Re: Change the picture by pressing the button

#5 Post by Eugene Lutsenko »

How to change the labels in the figure in accordance with what the parameter of a function call: ZnachAtr(jj)?

Is it possible to still sign the X-axis in the same way as the Y-axis?

How do I make were vertical labels on the X-axis?

User avatar
rdonnay
Site Admin
Posts: 4729
Joined: Wed Jan 27, 2010 6:58 pm
Location: Boise, Idaho USA
Contact:

Re: Change the picture by pressing the button

#6 Post by rdonnay »

If you want this kind of control over your buttons, then I recommend that you use DCPUSHBUTTONXP class buttons
and SUBCLASS them with your own DRAW() method.

You will need to learn about the Gra*() functions.
This can be a time-consuming task if you only need it in one place in your application.

You can look at the Draw() method in source code in \exp19\source\dclipx\_dcxbutt.prg to get an idea of how to do this.

To see how to paint Vertical text, look at the DrawItem() method of DC_XbpMenu() in \exp19\source\dclipx\_dcclass.prg.

Code: Select all

   IF BAND(aInfo[2], XBP_DRAWACTION_DRAWALL) != 0 .AND.aInfo[1] == 1

      aAAttrs[GRA_AA_COLOR] := ::bgColor
      GraSetAttrArea( oPS, aAAttrs )
      GraBox( oPS, {0,0}, {oPS:SetPageSize()[1,1], oPS:SetPageSize()[1,2]}, GRA_FILL )

      aAAttrs[GRA_AA_COLOR] := ::barColorBG
      GraSetAttrArea( oPS, aAAttrs )
      GraBox( oPS, {0,0}, {::BarWidth, oPS:setPageSize()[1][2]}, GRA_FILL )

      aSAttrs[GRA_AS_COLOR] := ::barColorFG
      aSAttrs[GRA_AS_ANGLE] := {0,10}        
      aSAttrs[GRA_AS_VERTALIGN] := GRA_VALIGN_TOP

      IF Len(::BarText) > 0

         oOldFnt   := GraSetFont( oPS, ::BarFont )
         aOldAttrs := GraSetAttrString( oPS, aSAttrs )

         aPoints := GraQueryTextBox( oPS, ::BarText )
         nHeight := aPoints[5,2] - aPoints[5,1]
         IF nHeight <= oPS:setPageSize()[1][2]
           GraStringAt( oPS, {0,ITEM_SPACING}, ::BarText )
         ENDIF

         IF Valtype(aOldAttrs) == 'A'
           GraSetAttrString( oPS, aOldAttrs )
         ENDIF
         IF Valtype(oOldFnt) = 'O'
           GraSetFont( oPS, oOldFnt )
         ENDIF
      ENDIF

      aInfo[2] := BOr( aInfo[2], XBP_DRAWACTION_SELCHANGE )
   ENDIF
The eXpress train is coming - and it has more cars.

Post Reply