TODO list
- 數(shù)據(jù)庫調(diào)試:一個病人對應(yīng)多條記錄艇肴;
- UI調(diào)試华糖;
- Dicom打佑汛妗;
廣西那家醫(yī)院現(xiàn)在主要問題是住院報告的問題:
醫(yī)院要求住院的報告補(bǔ)打印
只有報告審核完畢镊掖,發(fā)給我們以后乃戈,才可以打印膠片和報告
做虛擬打印機(jī),pdf的
然后在連一下醫(yī)院的數(shù)據(jù)庫
住院的那里就是住院號 //住院報告不打印
門診就寫急診號//門診與急診報告打印
只要有與膠片對應(yīng)的報告
都可以打印的情況下亩进,就是相當(dāng)于報告審核好了
比如病人手里有一個條碼 123
我們服務(wù)器里症虑,有一張膠片號碼123 一張報告也是123
修正設(shè)計
數(shù)據(jù)庫連接單獨采用一個form,用于連接與查詢只用镐侯;
提供的接口也對外使用
TADOQuery {
close
SQL.clear
SQL.add('select * from table where study_id');
Open
// SQL.savetofile
// execesql
}
if query.RecordCount > 0
if query.RowsAffected > 0
while not query.eof do
query.fieldbyname('status').AsString <> '已審核' //判斷狀態(tài)
query.next;
//
getpdfreport 讀取數(shù)據(jù)庫中pdf文件并保存到本地
>> 流程
讀取到二維碼侦讨,進(jìn)行查詢打印苟翻;
對設(shè)置項中的數(shù)據(jù)
>> 數(shù)據(jù)庫
數(shù)據(jù)庫操作流程
- ViewE_ScreenGroupJobs查詢數(shù)據(jù), 根據(jù)時間從兩個表中讀取時間限制的數(shù)據(jù)韵卤;
- 拿到patient_id去PrintJobList查詢膠片,膠片區(qū)分是根據(jù)SessionUID
- 去ReportBoxes查詢報告崇猫,一個id可能都會對應(yīng)多個膠片和多個報告沈条,報告區(qū)分是根據(jù)idx
- 報告你打印完了修改下ReportBoxes中report_status為1,
- 膠片打印前期先這樣做诅炉,你修改PrintJobList中Status=2就行
表結(jié)構(gòu)
Data Source=192.168.206.90
PrintJobList -->
ReportBoxes -->
報告打印
參考:
http://blog.csdn.net/masofeng/article/details/7655031
http://blog.csdn.net/muais/article/details/9812881
https://www.thoughtco.com/print-documents-from-delphi-1057936
http://stackoverflow.com/questions/2055307/delphi-how-to-print-a-pdf-without-showing-it
http://www.2ccc.com/news/Html/?859.html
// wordPro 打印膠片药磺?
if ShellExecute(0, 'open', PChar('WordPro.exe'), nil, nil, SW_SHOW)<=32 then
begin
CXMessage('打印報告失敗对扶!',0);
end
else
begin
// 更新打印狀態(tài)挨措,刷新界面
end;
// word print
Word_Handle, Doc_Handle: OLEVariant;
Word_Handle := CreateOleObject('Word.Application');
//Word_Handle.quit;
Word_Handle.Visible := false; //隱藏Exce窗口
Word_Handle.Documents.open(ExtractFilePath(Application.ExeName)+'模板.doc');
Word_Handle.PrintOut;
//PDF 打印報告?
if ShellExecute(Handle,'print',PChar('.\temp.pdf'),nil,nil,0)<= 32 then
// 使用Printer全局變量進(jìn)行打印操作
gsprint
There are some different possibilities to print PDFs... it depends whether you can require Adobe Reader to be installed (I don't know if you want to distribute your tool or just use it yourself).
- It is possible to load the ActiveX control of Adobe Reader and use it for printing
pdfFile.src := 'filename.pdf'; pdfFile.LoadFile('filename.pdf'); pdfFile.print; - You can print PDFs with Adobe Reader itself (could be done with FoxIt too)
ShellExecute(0, 'open', 'acrord32', PChar('/p /h ' + FileName), nil, SW_HIDE); - You could also use Ghostview and Ghostprint
ShellExecute(Handle, 'open', 'gsprint.exe', PChar('"' + filename + '"'), '', SW_HIDE);
我的印象這個問題從90年代以來一直有人在問议纯,究其原因在于不同的繪制表面(GDI所謂的設(shè)備上下文父款,DC)所支持的點陣圖形(windows中稱之為光柵圖,raster)繪制能力不一樣瞻凤,顯示DC或者內(nèi)存DC的支持能力最強(qiáng)憨攒,而打印機(jī)DC經(jīng)常不支持BitBlt、StretchBlt(但是通常會支持DIB復(fù)制StretchDIBits)阀参,你需要用GetDeviceCaps確定一下你的打印機(jī)驅(qū)動所支持的DC繪制能力來決定使用哪個位圖繪制函數(shù)肝集。
消息界面,
彈框出來蛛壳,自動消失
DIComm 發(fā)送圖片數(shù)據(jù)
方案:使用DICOM VCL轉(zhuǎn)換杏瞻;將jpg轉(zhuǎn)換為DICOM數(shù)據(jù)所刀,發(fā)送給膠片機(jī);
DICOM VCL
http://www.dicomvcl.com/cn/product/product-85-696.html
http://download.csdn.net/detail/xing_1988/9560492?web=web
http://download.csdn.net/download/useryanyin/6702353
TDicomImage
DICOM 網(wǎng)絡(luò)通信
破解組件
lead tools
DICOM3 蠻靠譜
http://www.dicom3.cn/download.htm
DICOMcm_TLB, ExtCtrls, ComCtrls
TDICOMc; //發(fā)送dcm文件
TDICOMaX // 轉(zhuǎn)換jpg文件
echo:
called -> RINGPACS
calling -> DCM_DE
TComm
參考:
http://blog.csdn.net/Tercel99/article/details/46690921
下載一個SPComm控件
SPComm,
cm1: TComm;
cm1.CommName:=port;
cm1.BaudRate:=StrToInt(btl);
cm1.Parity:=None;
if _printReport='1' then
try
cm1.StartComm;
except
ShowMessage('打開掃描串口失敺ズ丁勉痴!');
end;
cm1.StopComm;
數(shù)據(jù)加鎖
Section:TCriticalSection;
Section:=TCriticalSection.Create;
Section.Free;
Section.Enter;
Section.Leave;
> 用戶界面
1. Form1
主界面,信息展示树肃,用戶交互
2. Form2
啟動界面
3. Form3
設(shè)置界面
> 功能模塊
1. 數(shù)據(jù)庫操作
文件:DB.pas
配置文件:
- 連接數(shù)據(jù)庫
函數(shù): connectDB 函數(shù)
讀取配置DB.ini中字段蒸矛,連接數(shù)據(jù)庫;連接成功后胸嘴,啟動主界面雏掠;連接失敗,提示并退出界面劣像; - 讀取數(shù)據(jù)庫數(shù)據(jù)并滾動顯示
函數(shù): updateInfo 函數(shù)
從數(shù)據(jù)庫不斷讀取信息乡话,并將最新信息顯示在首條;
打印之后重新查找數(shù)據(jù)庫狀態(tài)耳奕,并更新滾動顯示信息绑青; - 根據(jù)條碼拉取數(shù)據(jù)
函數(shù): getPrintInfoByID(checkID: string)
根據(jù)檢查號,從數(shù)據(jù)庫中查詢信息屋群;
查詢不到信息闸婴,彈出提示框;
查詢到信息芍躏,自動打印相關(guān)報告與膠片
2. 掃描
Scan.pas
文件:Scan.ini
- 掃描獲取ID
函數(shù):scanAndGetID
掃描二維碼邪乍,掃描成功,將讀取的數(shù)字顯示在輸入框中对竣;
掃描失敗庇楞,提示出錯信息;
3. 打印報告或膠片
Print.pas
根據(jù)配置
- 打印報告
函數(shù):printReport
根據(jù)系統(tǒng)設(shè)置以及查詢到的信息否纬,查看是否能打印報告吕晌,能打印調(diào)用打印機(jī)進(jìn)行打印,出錯則彈出打印失敗及相關(guān)錯誤碼临燃;
報告狀態(tài)不能打印聂使,提供相應(yīng)拒絕打印提示信息; - 打印膠片
函數(shù):printFilm
根據(jù)系統(tǒng)設(shè)置谬俄,對膠片的狀態(tài)進(jìn)行查詢,允許打印則進(jìn)行打悠怼溃论;否則彈出相應(yīng)提示信息;
4. 設(shè)置
SettingConfig.pas
文件:Setting.ini
- 讀取所有配置
函數(shù):readAllSetting
讀取Setting.ini中的所有字段痘昌,存儲到內(nèi)存钥勋,用于打印時設(shè)置炬转; - 保存基本設(shè)置
函數(shù):saveAllSetting
將從設(shè)置界面獲取的信息更新到Setting.ini文件中,并及時更新到存儲變量中算灸,用于打印設(shè)置扼劈;
> 設(shè)置項含義:
- 設(shè)置:
DBIP --> 數(shù)據(jù)庫服務(wù)IP地址,不可寫菲驴;
傳統(tǒng)膠片 --> DCom打印荐吵,IP/Port/AE 屏蔽;
審核報告 --> 膠片與報告匹配時才打由匏病先煎;
機(jī)器片量 --> 膠片盒1,膠片盒2的膠片數(shù)量巧涧,打印一張數(shù)目自動減一薯蝎;
RIS多模板 --> 暫不做;
膠片機(jī)名稱 --> 與這個名稱匹配的才打影占锯;
膠片時 --> 打印膠片倒計時;
紙 --> 打印報告倒計時缩筛; - 其他
觸屏?xí)r間 --> 不可改消略,置灰,暫不做歪脏;
審核報告 --> 對應(yīng)個別需求疑俭,暫不做;
膠片多規(guī)格 --> 暫不做婿失;
攝影 --> 暫不做;
左側(cè)界面比例 --> 界面比例調(diào)整钞艇;
膠片為主 --> 暫不做; - 報告限制
暫不做 - 授權(quán)打印
加密可打片數(shù)
暫不做