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
Delphi 2007 and Delphi for PHP
Delphi 2007 & Delphi for PHP剛剛發表的時候,確切時間請參考CodeGear,幾乎是同步的可以在中國地區的網站找到"特別版",當Update 1公佈時,當然也可以看到一些相關消息,不諱言的,我也靠著網路的力量拿到了特別的image檔,測試了一些功能,大概就是那些自己不想太花力氣去學的東西,例如Ajax就是其中一項!
說說我碰過的問題:
Delphi 2007:
- Help關掉後,process沒關閉的問題,Update1中似乎已解決!
- 因為使用了MS的.Net framework來做UI,開啟的速度真是令人不敢苟同,尤其在自己的爛爛Pentium-M 1.4上,要不是因為Web開發工具的整合,幾乎讓人不回頭的轉回Delphi 7。
- 支援Vista的開發,嗯,我的問題是...沒多餘機器可以用Vista!
- 試用只能由網路慢慢下載,如果沒裝過.Net 2.0 跟 SDK,請準備大量耐心跟時間,不然BT一下吧!
Delphi for PHP:
- 開發環境(IDE)很是熟悉,不熟的是PHP。
- Open Source的應用元件,不知道更新容不容易
- 整合支援MySQL,InterBase。當然其他DB也可以用,只是沒直接支援來的直覺。(這還沒認真使用,說錯別見怪!)
- 原本雙位元字元支援問題,Update1說是已解決!
- 雙位元字元真的解決了嗎?你把測試用的Code放在桌面,看看能不能debug?我是不行啦!另外,你叫"許功蓋"站在某個Button上,只能出現其中一個字。
- 其他問題...目前沒力氣試!
7/09/2007 02:33:00 下午 | 標籤: DELPHI, PHP | 0 Comments
Delphi for PHP, 試用版公佈/試用/已經被破解
剛看到Delphi已經被破解了, 動作真是快啊!
前兩天剛抓了試用版來用, 感覺就像是寫Delphi的感覺, 只是換成了PHP的Code, 不知道有多少人會去用, 這工具應該可以讓一些對PHP不熟希的Delphier去嘗試使用PHP開發網頁吧! 網路上的討論, 好像蠻多人很期待, 也許是試用期只有一天, 間接造成破解幾乎立刻被放出來了, btw, CodeGear的試用版已經改成試用14天了!
4/03/2007 07:02:00 上午 | 標籤: 網頁, DELPHI, PHP | 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