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中也用了。

啊! 原來已經笨很久了!

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;

 

ref. How to send and handle a custom Windows message

線上工具-IDE,Draw

Google有線上文件Google Docs,當然有會有其他創意出現線上IDE讓你無聊時寫寫程式,線上流程圖讓你隨手畫畫流程,在光纖網路速度無法普及前,我覺得這真是無聊的Programmer會去試的玩具,到哪天,網頁反應可以很完美時,Programmer應該會被禁止使用這些東西,如果不是做OpenSource,哪個老闆會讓自己的資產在網路上到處傳遞?

啊 原來是一樣的!

"!="寫過程式的人大多認得這是甚麼,在C語言中用來表示符號兩端是"不相等"的!

當看到我家小妹的解釋,只能讚嘆!也代表自己腦經真是退化了!!

"!=" 解釋: "啊 原來是一樣的!" (2007, Chien)

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;


應該沒忘了甚麼!!

Delphi For PHP


前不久看到的消息, CodeGear 也就是Borland原來的IDE部門, release了Delphi For PHP, 還沒玩過, 應該是個使用Delphi(環境?語法?習慣)來開發PHP的工具 !
"Delphi® for PHP revolutionizes PHP web development with Delphi’s proven visual Rapid Application Development (RAD) approach for accelerated visual PHP web development. Delphi for PHP is the fast and easy way to build robust PHP web applications." 聽起來好似不錯! 原本沒啥動力去學新東西, 這個倒是有機會要拿來試試看!

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了! 啊, 不然是怎樣...


使用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;

Designed by Posicionamiento Web | Bloggerized by GosuBlogger | Blue Business Blogger