下面是本人在Delphi實際的開發中發現的問題,希望能同大家一起交流。
1、TDateTimePicker的錯誤
TDateTimePicker控件在讀寫日期時有很多錯誤,主要是日期不能及時刷新。
隨便舉一個例子:
新建一個Form,然後添加一個TDateTimePicker控件,隨便放一個浮動型按鈕例如TSpeedButton或者TToolButton等,相信這種方式用的會很多!
在浮動按鈕的Click事件中加入很簡單的代碼:
ShowMessage(FormatDateTime(yyyy-mm-dd,DateTimePicker1.Date));
此時你通過直接修改TDateTimePicker的時間值來修改日期,然後激活浮動按鈕的Click事件,你會發現在TDateTimePicker中反映出來的日期並不是TDateTimePicker真實的日期!多試幾次你會發現問題更嚴重!
相信Borland公司的人應該測出了此錯誤,但是沒有修復!
現在似乎明白為什麼沒有日期型的DB控件!
2、TDBGrid的錯誤
如果你是通過TDBGrid直接讀寫數據,你會發現問題很致命!
隨便舉一個例子:
新建一個Form,然後添加一個TDBGrid,添加相應的數據關聯然後激活數據源,隨便放一個浮動型按鈕,相信這種方式用的也比較多!
在浮動按鈕的Click事件中加入很簡單的代碼:
ShowMessage(ADOQuery1.Fields.Fields[0].AsString);
然後運行!
運行時首先選中TDBGrid中的一條數據(已經默認選中一條),然後滾動鼠標的滾輪翻滾數據,就象大家平時上網是滾動浏覽網頁或者在Excel數據區滾動浏覽一樣,然後在TDBGrid中單擊鼠標,你會發現此時在TDBGrid中實際控制了兩條數據,繼續則可能出現多條!
繼續下去!
如果你不停的下翻直至TDBGrid中的光標在鼠標的游標之下然後點擊,然後激活浮動按鈕的Click事件,你會發現在TDBGrid中激活的數據與數據源中實際的當前數據根本就不一致!
在實際應用中相信會碰到這種情況:我明明選擇是這條數據,但進行後繼操作的為什麼不是這條數據?
3、TQuickRep的錯誤
TQuickRep歷來以使用簡單,功能靈活(當然是通過添加代碼來實現)而著名,當然她的缺陷之多也同樣有名,這當然也不是完全Delphi的問題。
隨便舉一個例子:
系統主窗口是的FormStyle為fsMDIForm類型,系統中的各個窗體采用模式窗體(ShowModal),這是一個很普通的應用。
在實際中系統主窗口往往是最大化(WindowState = wsMaximized)的,如果在模式窗體中預覽報表:
QuickRep1.Preview;
如果你把報表預覽窗口最小化,你會發現你根本就不能關閉任何窗口!除非通過Alt+Ctrl+Delete強行關閉!
所幸QuSoft公司已經發現了這個問題,在專業版(目前是3.6.2版)解決方案居然是在預覽窗口默認是普通窗口而不是標准版中的將窗體最大化!
4、IDE開發工具的問題
相信大家至少99%以上是直接通過Delphi提供的IDE工具進行開發,在實際應用中為了減少EXE文件的大小(主要是因為調用比較大的第三方控件引起的)往往會通過取消部分VCL連接庫(例如非Delphi自身的*.BPL)來完成,現在發現在Delphi中幾乎不可能要麼全部添加,要麼都不添加!
不管你在[Build with runtime packages]中如何設置都不管用,似乎IDE工具只辨認那個Check或者CFG文件中的那個[-LU]參數而不管其它!
說明:對此目前依然沒有確認是IDE工具的問題或者其它問題,只是一般認為是IDE工具的問題。
Hank
2002.12.12