Plurk
Regular Expression Tools
關於Regular Expression,一直以來沒怎麼用,目前常用的工具中,幾乎都支援了R.E.的搜尋驗證功能,最近為了一個case,大約認真的地看了一下,才發現長久以來做了很多白工,這是老毛病了,不認真看手冊的毛病。
有幾個Regular Expression工具,記錄一下:
- TestRExp: 這是用TRegExpr(Delphi class)作者寫的工具,使用簡單直覺。
- RegexBuddy: 功能齊全,畫面華麗的付費工具,支援多種語言的程式碼產生,正式版本可以安裝在隨身碟。
- Expresso 3.0: 效能感覺比RegexBuddy差一些,功能也齊全,目前需免費註冊,這個很夠用了。
- Regex Coach: 看了說明,沒用上,因為先用了Expresso 3.0。
- reWork: 網頁線上工具,不需安裝,方便隨時使用。
Delphi(Win32)中,TRegExpr/TPerlRegEx應該是最常被提到的R.E. class(好像也找不到其他了),TRegExpr使用時只要加進一個.pas檔案,use一下就可以直接用,說明跟範例都很清楚,特別不一樣的是檔案中有一些俄文,修改之後存檔,會造成問題(還沒認真想辦法解決)。TPerlRegEx則是用C++寫的,在連結的網站已經改寫成Delphi Component,可以直接安裝使用。
Delphi for .Net中可以直接使用System.Text.RegularExpressions,嗯,.NET不熟,改天玩玩看!
天天要用的PHP/PostgreSQL也都可以支援R.E.
Linux上的grep,之前使用的VOIP PBX中也用了。
啊! 原來已經笨很久了!
12/03/2007 11:52:00 上午 | 標籤: 程式語言, DELPHI | 0 Comments
How to send and handle a custom Windows message
Just a memo for message using in DELPHI!
Define custommessage
const
WM_MY_MESSAGE_0 = WM_USER + 0;
WM_MY_MESSAGE_1 = WM_USER + 1;
Define a handler for custom message
type
TMyForm = class(TForm)
.
.
.
private
procedure OnMessage_0(var Msg: TMessage); message WM_MY_MESSAGE_0;
procedure OnMessage_1(var Msg: TMessage); message WM_MY_MESSAGE_1;
.
.
Send the custom message via sendmessage or postmessage
PostMessage(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): BOOL;
or
SendMessage(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): BOOL;
8/30/2007 10:11:00 上午 | 標籤: 程式語言, DELPHI, Notes | 0 Comments
線上工具-IDE,Draw
Google有線上文件Google Docs,當然有會有其他創意出現線上IDE讓你無聊時寫寫程式,線上流程圖讓你隨手畫畫流程,在光纖網路速度無法普及前,我覺得這真是無聊的Programmer會去試的玩具,到哪天,網頁反應可以很完美時,Programmer應該會被禁止使用這些東西,如果不是做OpenSource,哪個老闆會讓自己的資產在網路上到處傳遞?
8/20/2007 03:24:00 下午 | 標籤: 程式語言, Google, Notes | 0 Comments
啊 原來是一樣的!
"!="寫過程式的人大多認得這是甚麼,在C語言中用來表示符號兩端是"不相等"的!
當看到我家小妹的解釋,只能讚嘆!也代表自己腦經真是退化了!!
"!=" 解釋: "啊 原來是一樣的!" (2007, Chien)
7/16/2007 02:52:00 下午 | 標籤: 程式語言, Notes | 0 Comments
Rave Reports 7.0.x轉PDF中文亂碼, 解決部分問題
這是從5.x就一直存在的問題, 原本使用BDS2006中的內建版本, 困擾一直無法解決, 後來找了包含source code 的7.0.2來玩, 參考了scyangyu 公佈的方法, 加上一點運氣, 好不容易終於讓中文正確出現在PDF上了, 第一階段到此, 試了一堆字型, 只有AR MingtiM BIG-5字型可以達到預覽/轉RTF/轉PDF的需求.
後來因為不同字型的需求, 只好硬著頭皮去google找解決方法, 原本第一階段的中文字型問題解決了一半, 當報表中存在兩種以上字型時, 一跑報表, 程式就出錯, 後來竟然發現一年以前scyangyu 已經解決了, 之前找資料竟然沒發現, 連前一階段困擾的字型重疊一直沒解決的問題scyangyu也show出已解決的圖片, 可惜, 沒把方法公佈出來, 發了信去問, 還沒接到回信, 也許對方沒空, 只好自己硬著頭皮trace程式, 竟然讓我解決了一些, 至少常用字型可以正常轉PDF了! 真是一個高興!
Rave Reports還有一些Memo上亂碼的問題, 可以參考scyangyu的blog.
列一下轉PDF問題的重點程式(繁體中文可用)
RpRenderPDF.pas
1. procedure TRPPDFFontComposite.InitData;
//這兩行改成這樣
PrintLn('/Encoding /' + CompositeFontEncoding);
//PrintLn('/Encoding /Identity-H');
2. procedure TRPPDFFontComposite.SetFontData;
procedure SetWidths; //稍稍改寫一下
var
i1: integer;
WidthScale: smallint;
begin
i1 := 0;
// ShowMessage(Format('firstchar, lastchar = %d,%d', [FirstChar, LastChar]));
while i1 < name =" '新細明體')">
3. procedure TRPPDFFontComposite.SetFontData;
//這是參考scyangyu的程式來的
if Panose.bProportion = PAN_PROP_MONOSPACED then
begin
if FontCharSet = CHINESEBIG5_CHARSET then
begin
CompositeFontEncoding := 'ETen-B5-H';
end
else if FontCharSet = GB2312_CHARSET then
begin
CompositeFontEncoding := 'GBK-EUC-H';
end else if FontCharSet = SHIFTJIS_CHARSET then
begin
CompositeFontEncoding := '90ms-RKSJ-H';
end else
begin
CompositeFontEncoding := 'KSCms-UHC-HW-H';
end;
end
else
begin
if FontCharSet = CHINESEBIG5_CHARSET then
begin
CompositeFontEncoding := 'ETen-B5-H';//'CNS-EUC-H';
end else if FontCharSet = GB2312_CHARSET then
begin
CompositeFontEncoding := 'GBpc-EUC-H';
end else if FontCharSet = SHIFTJIS_CHARSET then
begin
CompositeFontEncoding := '90msp-RKSJ-H';
end else
begin
CompositeFontEncoding := 'KSCms-UHC-H';
end;
end;
Descriptor.PDFFontName := PDFFontName;
Descriptor.FontName := FontName;
Descriptor.SetValues(OutlineTextMetric, FontWidths[32]);
Descendant.PDFFontName := PDFFontName;
Descendant.Descriptor := Descriptor;
Descendant.Registry := 'Adobe';
if FontCharSet = CHINESEBIG5_CHARSET then
begin
Descendant.Ordering := 'CNS1';
end else if FontCharSet = GB2312_CHARSET then
begin
Descendant.Ordering := 'GB1';
end else if FontCharSet = SHIFTJIS_CHARSET then
begin
Descendant.Ordering := 'Japan1';
end else
begin
Descendant.Ordering := 'Korea1';
end;
if FontCharSet = CHINESEBIG5_CHARSET then
begin
Descendant.Supplement := 1;
end
else if FontCharSet = GB2312_CHARSET then
begin
Descendant.Supplement := 0;
end
else if FontCharSet = SHIFTJIS_CHARSET then
begin
Descendant.Supplement := 2;
end else
begin
Descendant.Supplement := 1;
end;
4. procedure TRPPDFFontComposite.SetFontData;
//mark下兩行程式
//Descendant.Ordering := 'Identity';
//Descendant.Supplement := 0;
應該沒忘了甚麼!!
3/27/2007 09:23:00 上午 | 標籤: 程式語言, DELPHI | 0 Comments
Delphi For PHP
3/24/2007 10:42:00 上午 | 標籤: 程式語言, 網頁, DELPHI, PHP | 0 Comments
Delphi中的Rave Reports搞死人
原本想這應該是個短命的工具, 沒想到這麼久以來他還存在, 接了個小案子, 沒想到去找Fastreport, 直覺用它上吧!
從5.x就有的亂碼問題, 到7.x依舊有問題, 參考了google上找到了討論, 只提到5.x的修改方法, 7.x討論的真是少啊! 用它做報表的人應該非常少吧!
首先, 原本用了BDS2006內建的版本, 沒錯, PDF轉出問題了! 它只認識蝌蚪文, 轉出一堆亂碼. 好吧, 找個新版試試, 你沒猜錯, 它還是一堆亂碼! 還好, 用上它的Source Code + Google上找來的改法, 可以正常輸出中文了(沒長進的Rave, 新舊版改法都一樣), 看, 字型對齊的問題還是沒解決! 最後找到個 AR MingtiM BIG-5字型, 竟然一切正常了! 不管, 先用了吧!
再來, 聽說Rave Reports在Memo的處理上也有問題, 是的, 別人會碰上我當然有碰上了. 對於資料庫中的Field抓進報表的資料, 就是一堆亂. 沒辦法了, 試試runtime再assign值給它印, 竟然...竟然就ok了! 啊, 不然是怎樣...
3/22/2007 03:57:00 下午 | 標籤: 程式語言, DELPHI | 0 Comments
使用Delphi 壓縮 Access DB
網路上找來的, 原來還蠻簡單, 以前一直沒去想, 突然用上, 找來頂一下!function compressDB(dbName: string): Boolean;
var DaoVar: OLEVariant;
begin
if ADOConn.Connected then ADOConn.Close;
try
try
DaoVar := CreateOleObject('DAO.DBEngine.36');
if FileExists('temp.mdb') then DeleteFile('temp.mdb');
DaoVar.CompactDatabase(dbName, 'temp.mdb');
if DeleteFile(dbName) then RenameFile('temp.mdb', dbName);
ShowMessage('Success');
Result := true;
except
Result := false;
end;
finally
ADOConn.Open;
end;
end;
3/22/2007 02:10:00 下午 | 標籤: 程式語言, Database, DELPHI | 0 Comments