基于C#開發(fā)電子病歷系統(tǒng)體溫曲線圖設(shè)計
解決的方法是把Graphics實(shí)例默認(rèn)的坐標(biāo)表示為相對坐標(biāo),即坐標(biāo)是相對于窗口的左上角,而不是文檔開頭的左上角,把絕對坐標(biāo)轉(zhuǎn)換為相對坐標(biāo)。這里用圖3說明這一轉(zhuǎn)換。
本文引用地址:http://butianyuan.cn/article/164954.htm
實(shí)線矩形標(biāo)記了屏幕區(qū)域的邊框和整個文檔的邊框。虛線矩形標(biāo)記了試圖要繪制的矩形和橢圓。P標(biāo)記要繪制的某個隨意點(diǎn)。在調(diào)用繪圖方法時,提供Graphics實(shí)例和從A點(diǎn)到P點(diǎn)的矢量,整個矢量表示為一個Ponit實(shí)例。而實(shí)際上需要的是從點(diǎn)B到點(diǎn)P的矢量。問題是,這里只知道從A點(diǎn)到P點(diǎn)的矢量,這是P相對于文檔左上角的坐標(biāo),而要在文檔的P點(diǎn)繪圖。另外還知道從A點(diǎn)到B點(diǎn)的矢量,這是滾動的距離,它儲存在Form類的一個屬性AutoScrollPosition中。要知道從B點(diǎn)到P點(diǎn)的矢量只需要進(jìn)行矢量相減即可。Graphics類的TranslateTransform方法可以進(jìn)行這些矢量的計算。這里給它傳送水平和垂直坐標(biāo),表示窗口驅(qū)譴、與的左上角相對于文檔的左上角的矢量(AutoScrollPosition屬性,它是圖中從A到B的矢量),然后Graphics設(shè)備考慮窗口區(qū)域相對于文檔區(qū)域的位置,處理這些坐標(biāo)。只要在繪圖代碼中加入以下語句:g.TranslateTransform(this.AutoScrollPositiort.X,this.AutoScrollPosition.Y);即可解決坐標(biāo)轉(zhuǎn)換的問題。
2.2.3 體溫圖的繪制技術(shù)
體溫圖的繪制根據(jù)體溫單中病人的相關(guān)信息,利用才C#的GDI+可以繪制出相應(yīng)的體溫曲線圖。在程序中首先進(jìn)行絕對坐標(biāo)和相對坐標(biāo)的變換,然后用Pen類定義畫筆,用Brush類定義畫刷顏色,對于需要填充的地方用畫刷進(jìn)行填充,再調(diào)用Graphics類的DrawLine方法畫出所需的線條。在DrawLine方法中,需要提供畫筆類型,線段起點(diǎn)和終點(diǎn)坐標(biāo)等參數(shù)。
體溫圖初始化之后,根據(jù)從體溫表傳遞的病人編號作為體溫圖中的全局變量,對數(shù)據(jù)庫進(jìn)行查詢,并把查詢結(jié)果轉(zhuǎn)換為坐標(biāo),傳遞給畫圖方法DrawLine和FillEllipse,畫出圖形。圖4是一張體溫圖顯示界面。
2.2.4 體溫圖中翻頁的實(shí)現(xiàn)
由于體溫圖每次只顯示病人1周的體溫變換信息,要顯示1周之前的體溫信息,可以使用翻頁功能。實(shí)現(xiàn)翻頁功能主要利用在讀取數(shù)據(jù)時使用到的Read()方法的特性。通過Read()方法在讀取數(shù)據(jù)的同時把當(dāng)前的指針向下移動1位。最初它位于數(shù)據(jù)集的第一行之前,因此第一次調(diào)用Read()將把指針置于第一行上,使它成為當(dāng)前行。隨著每次調(diào)用Read()導(dǎo)致指針向下移動,按照從上至下的次序獲取數(shù)據(jù)集行。代碼如下:
其中變量n為全局變量,由翻頁按鈕對其進(jìn)行賦值。以當(dāng)前的變量n減1乘7為所需跳過的間隔數(shù),以日期為單位,對數(shù)據(jù)集中的日期進(jìn)行篩選,選出這一周的日期儲存到數(shù)組array中。
3 結(jié) 語
電子病歷是醫(yī)院信息化發(fā)展的必然趨勢。根據(jù)HL7的標(biāo)準(zhǔn)化要求,當(dāng)前國內(nèi)電子病歷的研究還很不完善,要制定出比較完善的適應(yīng)國內(nèi)醫(yī)院使用的電子病歷原型系統(tǒng)還需要更深入的研究。本文探討利用C#繪制電子病歷系統(tǒng)體溫圖的技術(shù),試圖對完善電子病歷系統(tǒng)做有益的嘗試。電子病歷系統(tǒng)相關(guān)的研究內(nèi)容將會不斷發(fā)展和深入,而電子病歷的技術(shù)構(gòu)架和軟件流程也將會越來越成熟。
評論