bestlong 怕失憶筆記

當健忘由隨機逐漸趨向常態時,作筆記是非常必要的

Entries for the ‘程式設計’ Category

Delphi應用程式中的日期格式管理

有很多套裝軟體或專案開發程式都沒有處理到這一塊問題,只會強制要求使用者的電腦環境一定要調整為西元年或民國年格式。

其實程式的日期格式會隨作業系統設定而自動改變畫面是一個特色,不過當程式有在用西元日期資料來處理單據編號或是轉換為民國年的部份可就沒那麼單純了。

例如程式寫成取得西元日期格式的後兩碼,但是當系統被設為民國年在兩碼時 99/12/23 就會取得 /1 而在三碼時 099/12/23 會取得 9/ 都是不合理的。

因為程式後續還會轉型為數字並減去 1911 來轉換取得民國年的數字。有些沒處理好的軟體就會在此出現錯誤訊息。

說實在的,如果需要同時用到的程式有衝突的時候,就不能同時開啟使用,難不成要多買台電腦分開用。有些程式還會在啟動時直接去調整系統的設定來適應自己,最後啟動的決定環境設定。

其實可以將程式設定成不受作業系統設定以及改變而受影響,可以利用 UpdateFormatSettings 屬性設定來決定當收到作業系統的 WM_WININICHANGE 通知訊息後,是否要重新讀取作業系統的設定格式。

另外也手動設定程式本身的所要使用的日期時間格式。程式碼如下:

1
2
3
4
5
6
7
8
9
10
//鎖定程式日期時間格式不受系統變化影響
Application.UpdateFormatSettings := false;

//設定程式本身所使用的日期時間格式
LongDateFormat  := 'yyyy/MM/dd';
ShortDateFormat := 'yyyy/MM/dd';
LongTimeFormat  := 'hh:nn:ss';
ShortTimeFormat := 'hh:nn:ss';
DateSeparator := '/';
TimeSeparator := ':';

這樣就可以固守程式的日期格式,自行在程式中管理日期的處理方式。

Comments (3)

報表設計時要選擇適當的字型

報表的設計對企業應用來說是很重要的,想要清楚的顯現資訊,在字型的選擇上也是一個學問。當報表列印出來後會因為字體選擇不當在加上列印設備的品質與重複影印或傳真等等過程造成累積失真越來越嚴重。

在數字就常會有誤認的部份例如:6 與 8 與 9 這三個數字。而字母與數字會誤認的例如數字 1 與 L 的英文小寫 l 之間的混淆,還有數字 0 與英文大寫 O 之間的混淆,以及數字 2 與英文 Z 的混淆。

目前我的作法是在中文的部份使用固定寬度的細明體,而純英文與數字的使用 Times New Roman 字型。

Leave a Comment

在 Delphi 中獲得 GUID

GUID (Globally Unique IDentifier) 是一個 128-bit Integer (16 bytes) 的數值。

在 Delphi IDE 中可以按下 Ctrl + Shift + G 快捷鍵會出現類似下列的 GUID 值:

1
['{2F45BDFE-1BE4-404D-9C5B-4B481D6A7482}']

每次按下快捷鍵都會產生不同的 GUID 值。

而程式中產生 GUID 值的方式如下列程式碼:

1
2
3
4
5
6
7
8
9
10
11
12
13
procedure TForm1.FormCreate(Sender: TObject);
var
  s_GUID: string;
  t_GUID: TGUID;
begin
  if CoCreateGUID(t_GUID) = S_OK then
  begin
    s_GUID := GUIDToString(t_GUID);
    ShowMessage(s_GUID);
  end else begin
    ShowMessage('Create GUID ERROR.');
  end;
end;

In Delphi 5 need uses ComObj, ActiveX.

也可以當作 UUID 來應用。

Comments (1)

開發Delphi資料庫程式時不建議使用函數InsertRecord與AppendRecord

InsertRecord() 與 AppendRecord() 是 Delphi 的資料插入與新增的函數。雖然這兩個功能可以簡易方便的使用,若是在程式中大量使用,最後將會面臨欄位對應的問題。

為什麼呢?

當有需要調整DataSet元件中的欄位順序(我想應該會常常發生)或資料庫欄位的順序的時候,你就需要同步修改這兩個函數的資料順序,所以用的範圍越多問題越大。連調整欄位順序都有影響就是高度耦合的問題。

接手的舊系統就是有一堆這樣的狀況,只好先作苦力將全部程式碼都轉換過,再開始動資料庫。

Leave a Comment

Delphi 碰到 DesignIntf.dcu not found

若是要將由 Delphi 5 開發元件移轉到Delphi 6 或 7 大概都會碰到這個問題。

若只是程式當然可以將全部的 uses 替換成新的就好。但是若是自行開發的元件可就需要同時支援多個版本,總不能一個版本維護一套程式碼。只要利用 Compiler 的指令來加強一下就可以解決問題了:

1
2
3
4
5
6
7
8
9
10
11
{$UNDEF DEL345}
{$IFDEF VER100} {$DEFINE DEL345} {$ENDIF}
{$IFDEF VER120} {$DEFINE DEL345} {$ENDIF}
{$IFDEF VER130} {$DEFINE DEL345} {$ENDIF}

uses
{$IFDEF DEL345}
DsgnIntf
{$ELSE}
DesignIntf, DesignEditors, VCLEditors, RTLConsts
{$ENDIF};

參考資料:
http://www.chillibear.org/blog1.php/delphi/
http://www.mustangpeak.net/ota_publishedprop_forms.htm

Leave a Comment

  • 工商服務

    廣告讀取中...
  • 近期留言

  • 標籤

  • 彙整