【文章內容簡介】
花繚亂。系統(tǒng)完全擯棄那種界面花哨, 色彩絢麗等華而不實做法,但和傳統(tǒng)的風格有有所區(qū)別,傳統(tǒng)的風格顯得過于呆板。本系統(tǒng)的界面色調一致,簡單樸素,但不失美觀大方。窗體界面一致,操作也大同小異,絲毫沒有雜亂無章的感覺。 我首先定義了幾個重要的窗體基類,其他的窗體基本上這幾個基類的派生類。在使用時在對窗體進行重載。所有的窗體都是在運行時動態(tài)加載的。需要運行那個窗體時,程序才加載該窗體,用完后立即釋放,這樣使用戶計算機系統(tǒng)資源得以最少得占用。請看一個窗體得創(chuàng)建例子: enter_dan: Self 。 入庫單錄入窗 體得創(chuàng)建 form_show enter_dan,555 ,360,10,2 。 form_show 為自定義函數 對所有子窗體顯示我自定義了一個函數 form_show,減少了工作量和代碼量。 procedure form_show form:TForm。fwidth ,fheight,fleft,ftop :integer 。 begin with form do begin height: fheight。 width: fwidth。 Left: fleft。 top: ftop。 Show。 end。 end。 窗體的釋放實現,例如釋放入庫單錄入界面窗體: procedure Sender: TObject。 var Action: TCloseAction 。 begin action: cafree。 在內存中釋放掉窗體 end。 2. 各個功能模塊實現的要點和技術 這里我只把我在 編碼過程中比較重要或者比較有代表性的技術和部分源碼闡述一下。詳情查看系統(tǒng)的源代碼。 類繼承與重載 在編碼過程中,我充分利用了面向對象編程的特定――代碼的重用,具體實現起來依靠的是重載和繼承。把具有相同或相似屬性的類抽象出來作為一個基類。我定義了幾個重要的窗體基類,基類窗體包含了需要的公有控件和共有事件方法。其他的窗體基本上這幾個基類的派生類。在使用時在對窗體的控件的屬性和方法進行繼承或者重載。 關于在 DELPHI 方法的重載,例如: procedure Action7Execute Sender: TObject 。 OVERRIDE。 procedure Sender: TObject 。 begin try if 39。39。 and 39。39。 and 39。39。 and 39。39。 then begin 。 : true。 : true。 : false。 end else showmessage 39。你的輸入不完整! 39。 。 except showmessage 39。代碼重復! 39。 。 end。 end。 windows 消息機制 當查詢窗體要返回結果時,我們用到了 windows 消息機制。 首先定義一個全局的自定義消息常量。 Const My_WM_USER WM_USER+100。 //自定義消息 向指定的窗體發(fā)送自定義消息,傳遞查詢結果。例如: procedure Sender: TObject 。 begin try price_ade。 。 price_ad: 。 sendmessage ,My_WM_USER,0,0 。 except beep。 end。 close。 end。 接收消息,并且處理它,例如: 定義消息響應的方法 procedure my_wm_user100 var msg:Tmessage 。 message My_WM_USER。 處理消息: procedure var msg:Tmessage 。 begin with query1 do close。 。 sql 語句 。 open。 end。 關于權限設置 權限設置是一個管理系統(tǒng)非常重要的一部分,直 接關系到公司業(yè)務和財務安全性。因此,本系統(tǒng)在這方面的功能是較完善的。操作人員的權限可以定義到每級子菜單。對沒有賦權限的菜單項不予顯示。也就是說,系統(tǒng)能根據登陸人員的權限自動顯示具有權限的功能菜單。我們把人員的權限信息存放在 MENU_FLAG表中,在系統(tǒng)啟動時加載相關的權限設置信息。權限設置這一功能只有高級管理人員和系統(tǒng)管理員才能使用。 根據權限顯示菜單算法 with do //query1 關聯(lián) MENU_FLAG 表 begin close。 。 39。select * from menu_flag where id :id 39。 。 ParamByName 39。id39。 .AsInteger: person_id。 open。 end。 for i: 1 to 42 do begin flag: ds[i].AsInteger。//flag 為每項菜單的權限標志 for j: 0 to main_formponentCount1 do begin if main_formponents[j] is TMenuItem and main_formponents[j] as TMenuItem .Tag i1 then if flag 0 then main_formponents[j] as TMenuItem .Visible: false else main_formponents[j] as TMenuItem .Visible: true。 end。 end。 應用 Delphi 顯式事務控制 事務控制是一種能夠把數據庫的一組修改作為整體提交給數據庫以保證數據的一致 性和完整性的機制。如果其中有一個操作失敗,則所有操作失敗。 存儲過程的使用 在程序設計中,系統(tǒng)主要的復雜的操作我都都是通過存儲過程來實現的。 例如:使用庫存調整操作時,我們用 P_ADJUST_STORE 來完成。 procedure Sender: TObject 。 begin if not ansaction then tTransaction。 開始一個事務 with P_ADJUST_STORE do //P_ADJUST_STORE 為存儲過程