ProEssentialsv5圖表組件研究論文
時間:2022-03-20 02:18:00
導(dǎo)語:ProEssentialsv5圖表組件研究論文一文來源于網(wǎng)友上傳,不代表本站觀點,若需要原創(chuàng)文章可咨詢客服老師,歡迎參考。
1proessentialsv5簡介:
ProEssentialsv5是于windows服務(wù)器端和客戶端開發(fā)的一系列圖表組件,它是對繪制圖表以及圖表功能所需要的數(shù)據(jù)和的簡單封裝??梢蕴峁¦informs、Webforms、ActiveX、VCL和DLL五種界面。它的圖表類型很多,包括:一般圖表、圖表、3維圖表、極坐標(biāo)圖表、餅狀圖表,幾乎覆蓋了所有常見的圖表類型論文。我們可以很方便的調(diào)用ProEssentialsv5的函數(shù)庫,添加繪制圖表的功能,并可以對圖表進(jìn)行分析,如:回歸,求最大值,擬合曲線等。我們還可以很方便的將圖表文件的數(shù)據(jù)文件進(jìn)行保存,或者導(dǎo)出我們希望格式的圖片,如bmp、jpg、png。注:一般圖表與科學(xué)圖表之間的區(qū)別在于,一般圖表僅提供一維坐標(biāo)數(shù)據(jù)繪圖,而另一維坐標(biāo)數(shù)據(jù)是等間距的??茖W(xué)圖表提供二維坐標(biāo)數(shù)據(jù),繪制任意的散點數(shù)據(jù)。
2具體應(yīng)用方法:
(1)無論開發(fā)的是OCX的應(yīng)用程序、DLL的應(yīng)用程序還是VCL的應(yīng)用程序,首先要做的就是根據(jù)開發(fā)環(huán)境的操作系統(tǒng)類型,拷貝PEGRP32C.DLL到相應(yīng)的在本地硬盤系統(tǒng)盤中去。如果是win95或者win98操作系統(tǒng),拷貝PEGRP32C.DLL到System目錄下;如果是win2000操作系統(tǒng),拷貝PEGRP32C.DLL到System32目錄下。PEGRAPHS.HLP文件是可選的
(2)工程里面添加頭文件Pegrpapi.h。
選擇需要調(diào)用的函數(shù),完成圖表的繪制功能。在此簡介,ProEssentialsv5函數(shù)和變量的命名規(guī)則。以PEP_為前綴的變量類型如下:
PEP_bBoolean(4bytes)
PEP_nInteger(4bytes)
PEP_dwDoubleWord(4bytes)
PEP_szNullTerminatedarrayofcharacters.
PEP_fSingle(4bytes)orDouble(8bytes)floatingpoint.
PEP_naArrayofInteger(4bytes)
PEP_dwaArrayofDoubleWord(4bytes)
PEP_szaArrayofNullTerminatedstrings.
PEP_faArrayofSingle(4bytes)orDouble(8bytes)floatingpoint.
PEP_structVariousstructures
要用DLL調(diào)用來設(shè)定獲取以上變量類型的值,可以根據(jù)以上變量類型的前綴來判斷應(yīng)該:
PEP_bPEnset/PEnget
PEP_nPEnset/PEnget
PEP_dwPElset/PElget(16bit)PEnset/PEnget(32bit)
PEP_szPEszset/PEszget.
PEP_fPEvset/PEvget
PEP_naPEvset,PEvsetcell,PEvsetcellEx/PEvget,PEvgetcell,PEvgetcellEx
PEP_dwaPEvset,PEvsetcell,PEvsetcellEx/PEvget,PEvgetcell,PEvgetcellEx
PEP_szaPEvset,PEvsetcell,PEvsetcellEx/PEvget,PEvgetcell,PEvgetcellEx
PEP_faPEvset,PEvsetcell,PEvsetcellEx/PEvget,PEvgetcell,PEvgetcellEx
PEP_structPEvset,/Pevget
(3)選擇適當(dāng)?shù)淖兞?,將?shù)據(jù)賦予這些變量。
一般圖表需要給PEP_faYDATA、PEP_szaPOINTLABELS賦值。
科學(xué)圖表和極坐標(biāo)圖表需要給PEP_faXDATA、PEP_faYDATA和PEP_faZDATA賦值。
3D的科學(xué)圖表需要給PEP_faXDATA,PEP_faYDATA,PEP_faZDATA賦值,但是3D的柱狀圖僅需要PEP_faYDATA。
餅狀圖用PEP_faXDATA來控制“餅”的厚度,
有以下的幾個DLL函數(shù)可以為圖表賦值:
PEvset():一次可以全部的完成所有數(shù)據(jù)的賦值。
PEvsetEx():一次可以完成部分?jǐn)?shù)據(jù)的賦值。.
Pevsetcell():一次僅可以為一維數(shù)據(jù)賦值。
PevsetcellEx():一次僅可以為一個點賦值。
因此Pevset()是最快的賦值方法。
(4)選擇選擇圖表中線(點)顏色的方法
顏色是由PEP_dwaSUBSETCOLORS控制的,線型是由PEP_naSUBSETLINETYPES控制的,點型是由PEP_naSUBSETPOINTTYPES控制的。
以下代碼是在C/C++中實現(xiàn)線型設(shè)定方法。
intnTmpStyles[3];
nTmpStyles[0]=PELT_THINSOLID;
nTmpStyles[1]=PELT_DASH;
nTmpStyles[2]=PELT_DOT;
PEvset(hPE,PEP_naSUBSETLINETYPES,nTmpStyles,3);
注:以上代碼使用的Pevset()函數(shù),也可以使用Pevsetcell()函數(shù)來實現(xiàn)線型的設(shè)定方法。代碼如下:
intnTmpStyle;
nTmpStyle=PELT_THINSOLID;
PEvsetcell(hPE,PEP_naSUBSETLINETYPES,0,&nTmpStyle);
nTmpStyle=PELT_DASH;
PEvsetcell(hPE,PEP_naSUBSETLINETYPES,1,&nTmpStyle);
nTmpStyle=PELT_DOT;
PEvsetcell(hPE,PEP_naSUBSETLINETYPES,2,&nTmpStyle);
其他設(shè)定顏色和點類型的方法與以上方法類似,在此不再贅述。
3實現(xiàn)結(jié)果:
繪制了一個圖表,帶游標(biāo)和坐標(biāo)顯示功能,以下函數(shù)分別實現(xiàn)基本圖表功能和游標(biāo)顯示功能。
voidCPEView::CreateSimpleSGraph()
{
RECTrect;
GetClientRect(&rect)
m_hPE=PEcreate(PECONTROL_SGRAPH,WS_VISIBLE,&rect,m_hWnd,1001);
if(m_hPE)
{
floatfY;
floatfX;
//設(shè)置子集數(shù)和每個子集的點數(shù)//
PEnset(m_hPE,PEP_nSUBSETS,4);
PEnset(m_hPE,PEP_nPOINTS,12);
for(ints=0;s<=3;s++)
{for(intp=0;p<=11;p++)
{
fX=((float)(p+1))*100.0F;
PEvsetcellEx(m_hPE,PEP_faXDATA,s,p,&fX);
fY=((float)(p+1)*1.0F)+GetRandom(1,250);
PEvsetcellEx(m_hPE,PEP_faYDATA,s,p,&fY);
}
}
//設(shè)置陰影
PEnset(m_hPE,PEP_nDATASHADOWS,PEDS_SHADOWS);
PEszset(m_hPE,PEP_szMAINTITLE,"ExampleData");
PEszset(m_hPE,PEP_szSUBTITLE,"");//nosubtitle
PEszset(m_hPE,PEP_szYAXISLABEL,"UnitsSold");
PEszset(m_hPE,PEP_szXAXISLABEL,"Month");
PEnset(m_hPE,PEP_bFOCALRECT,FALSE);
PEnset(m_hPE,PEP_bPREPAREIMAGES,TRUE);
PEnset(m_hPE,PEP_bCACHEBMP,TRUE);
PEnset(m_hPE,PEP_nPLOTTINGMETHOD,PEGPM_POINTSPLUSSPLINE);
PEnset(m_hPE,PEP_nGRIDLINECONTROL,PEGLC_NONE);
PEnset(m_hPE,PEP_nALLOWZOOMING,PEAZ_HORZANDVERT);
PEnset(m_hPE,PEP_nZOOMSTYLE,PEZS_RO2_NOT);
//子集的標(biāo)識
PEvsetcell(m_hPE,PEP_szaSUBSETLABELS,0,"Texas");
PEvsetcell(m_hPE,PEP_szaSUBSETLABELS,1,"Florida");
PEvsetcell(m_hPE,PEP_szaSUBSETLABELS,2,"Washington");
PEvsetcell(m_hPE,PEP_szaSUBSETLABELS,3,"California");
//子集點的顏色s
DWORDdwArray[4]={RGB(198,0,0),RGB(0,198,198),RGB(198,198,0),RGB(0,198,0)};
PEvsetEx(m_hPE,PEP_dwaSUBSETCOLORS,0,4,dwArray,0);
//子集點的線型
intnLineTypes[]={PELT_MEDIUMSOLID,PELT_MEDIUMSOLID,PELT_MEDIUMSOLID,PELT_MEDIUMSOLID};
PEvset(m_hPE,PEP_naSUBSETLINETYPES,nLineTypes,4);
//子集點的類型
intnPointTypes[]={PEPT_DOTSOLID,PEPT_UPTRIANGLESOLID,PEPT_SQUARESOLID,PEPT_DOWNTRIANGLESOLID};
PEvset(m_hPE,PEP_naSUBSETPOINTTYPES,nPointTypes,4)
//Version4.0功能//
PEnset(m_hPE,PEP_bFIXEDFONTS,TRUE);
PEnset(m_hPE,PEP_bSIMPLEPOINTLEGEND,TRUE);
PEnset(m_hPE,PEP_bSIMPLELINELEGEND,TRUE);
PEnset(m_hPE,PEP_nLEGENDSTYLE,PELS_1_LINE);
PEnset(m_hPE,PEP_nMULTIAXISSTYLE,PEMAS_SEPARATE_AXES);
//設(shè)置其他屬性//
PEnset(m_hPE,PEP_bBITMAPGRADIENTMODE,TRUE);
PEnset(m_hPE,PEP_nQUICKSTYLE,PEQS_MEDIUM_NO_BORDER);
PEnset(m_hPE,PEP_nGRADIENTBARS,8);
PEnset(m_hPE,PEP_nTEXTSHADOWS,PETS_BOLD_TEXT);
PEnset(m_hPE,PEP_bMAINTITLEBOLD,TRUE);
PEnset(m_hPE,PEP_bSUBTITLEBOLD,TRUE);
PEnset(m_hPE,PEP_bLABELBOLD,TRUE);
PEnset(m_hPE,PEP_bLINESHADOWS,TRUE);
PEnset(m_hPE,PEP_nFONTSIZE,PEFS_LARGE);
PEnset(m_hPE,PEP_bSCROLLINGHORZZOOM,TRUE);}
}
voidCPEView::CreateDataCursor()
{
CreateSimpleSGraph();
//創(chuàng)建游標(biāo)//
PEnset(m_hPE,PEP_nCURSORMODE,PECM_DATACROSS);
//可以方便的查看數(shù)據(jù)點//
PEnset(m_hPE,PEP_bMARKDATAPOINTS,TRUE);
//可以點擊數(shù)據(jù)點來移動游標(biāo)//
PEnset(m_hPE,PEP_bMOUSECURSORCONTROL,TRUE);
PEnset(m_hPE,PEP_bALLOWDATAHOTSPOTS,TRUE);
//Cursorpromptingintopleftcorner//
PEnset(m_hPE,PEP_bCURSORPROMPTTRACKING,TRUE);
PEnset(m_hPE,PEP_nCURSORPROMPTSTYLE,PECPS_XYVALUES);
PEnset(m_hPE,PEP_nCURSORPROMPTLOCATION,PECPL_TOP_RIGHT);
//取消放大功能
PEnset(m_hPE,PEP_nALLOWZOOMING,PEAZ_NONE);
//其他可能的游標(biāo)模式如下:
//PECM_NOCURSOR=0
//PECM_POINT=1
//PECM_DATACROSS=2
//PECM_DATASQUARE=3
//PECM_FLOATINGY=4
//PECM_FLOATINGXY=5
//注意:必須重新初始化
elseif((m_nLastSelection==105)&&(HIWORD(wp)==PEWN_CURSORMOVE))
{intnSubset,nPoint;
floatxvalue,yvalue;
charbuffer[64];
nSubset=PEnget(m_hPE,PEP_nCURSORSUBSET);
nPoint=PEnget(m_hPE,PEP_nCURSORPOINT);
PEvgetcellEx(m_hPE,PEP_faXDATA,nSubset,nPoint,&xvalue);
PEvgetcellEx(m_hPE,PEP_faYDATA,nSubset,nPoint,&yvalue);
sprintf(buffer,"Cursorat%d,%d=(%.2f,%.2f)",nSubset,nPoint,xvalue,yvalue);
CWnd*pParent=GetParent()->GetParent();
if(pParent){pParent->SetWindowText(buffer);}
pParent=AfxGetMainWnd();
if(pParent){pParent->SetWindowText("PEWN_CURSORMOVE");
returnTRUE;
}
}
以上代碼在Win2000,VC6環(huán)境下調(diào)試通過。