原作者:http://bbs.2ccc.com/topic.asp?topicid=580946
一套檔案排版功能的代碼,剛把代碼提交到開源平臺,基于Html5的Canvas,有需要的可以看看
https://gitee.com/HCView/HCView-H5
或
https://github.com/59079096/HCView-H5
或直接訪問示例網站 http://hcview.cn/ 本著開源的名義所以代碼沒有壓縮和本身服務器太low所以第一次打開會慢,另外請使用谷歌內核瀏覽器可得到最佳效果。
一點感慨:
這套檔案排版軟體做了也有幾年了,一直是開源的方式,目前有3個版本,Delphi,C#,Html5,對你沒看錯,是用三套不同的語言實作了完全相同的功能,基于QT的C++版本打算在下半年開始,如果你對其他版本的排版代碼有興趣,可以訪問上面的鏈接(去掉HCView-H5就能看到其他的語言的代碼)。目前以醫療行業電子病歷系統中使用這套代碼的人居多,有國內排名前十的醫院用,也有我從沒聽過的鄉鎮衛生院用。也有用在檔案管理系統中的。
我想多說說H5的版本,也算是自己從桌面向web轉換的一點產出吧。
我不熟悉html和css,也沒精力和時間學習,為實作幾個語言的功能和代碼維護方便,必需要有統一的方法和函式以及實作,所以在C#的版本中我自己實作了一個和Delphi里一樣的Canvas來處理GDI層面的事情,在Html5版本中我也重點使用Html5的Canvas做UI處理,總共用了約1萬行js代碼封裝實作了類似VCL的框架,所以你會看到Application.js、Control.js、Form.js、StdCtrls.js、Graphics.js等等和VCL體系類似的單元,我使用了ES6的面向物件的語法,由于js是弱型別的語言,我基于原生的js型別封裝了一些delphi和C#下的常見型別,如TObject、TPoint、TRect、TList,TStream,TInt8,TInt16,TInt32等等(可到System.js里看到全部),也封裝了TControl、TWinControl、TPanel、TButton、TLable、TEdit、TCombobox、TCheckBox、TPopupMenu、TScrollBar、TForm、TDialog等等有界面的控制元件(見Control.js、ExtCtrls.js、StdCtrls.js),以及TPersistent、TComponent、TTimer、TAnimate等等無界面的控制元件,為實作和滑鼠鍵盤互動,把瀏覽器的頁面事件監聽后封裝,實作了KeyDown、KeyPress、MouseDown、MouseMove、MouseUp等等事件,讓這些和我喜歡的Delphi里使用時的方法一樣,通過input元素實作了和輸入法的互動產生了ime.js,因為有自成的體系,所以寫了clipboard.js實作了自己的剪切板并能和瀏覽器互動,當然還有最重要的Application.js以及整個框架運行的環境Kernel.js,web程式有css來描述樣式,我用一個theme.js來完成,現在它還不能和css互動,我有計劃讓它和css互動。我也想把這個框架用IDE或者拖拉控制元件的有設計期概念的機制來處理,所以在TComponent里預留了可視化設計時屬性事件的機制,我不知道以后還有沒有機會來把預留的這些功能來實作,因為目前我需要的東西都算是完成了。
在完成上面這些功能的程序中,我閱讀了無數次delphi自己的VCL體系代碼,每每感嘆Delphi是如此的優秀,自己是如此的“無知”,尤其是當我看明白delphi的Canva是如何把多次的pen、brush、font的屬性修改僅在繪制時通過集合的加減運算得出需要處理的更新時,我一度覺得自己對基礎知識的運用都不及格,更加失落的是這可能是最后一次這么仔細的咂摸Delphi原始碼的機會了。
我沒有研究過別的js框架,我也不清楚我寫的這個對大家有沒有什么意義,雖然接下來幾個月還要不斷的完善和重構,但至少它讓我提升了設計能力,并完成了我H5版本的目標,如果能對大家有用對行業有貢獻那就是更好了。
uj5u.com熱心網友回復:
很好滴吖,支持一下~~~轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/14347.html
標籤:VCL組件開發及應用
上一篇:VCL的TBitmap補丁
