2014年5月7日水曜日

SRX - SAS Regular Expression Utility

SRXを新しいDelphi XE6でリビルドしました。他の人にも使ってもらうために、メニューを日本語化しています。それと、32bit版、64bit版の2種類をビルドして、EG4.xとEG6.xにも対応しました。

これで、SAS9.4への移行作業でもれなくチェックして、エビデンスを残したり、書き直す前のチェックに時間的な余裕が生まれます。
似たようなツールは他にもありますが、エビデンスとなるものが出力されないのが弱点です。




2014年5月3日土曜日

Delphi XE6 + Excel2013のタイプライブラリ

Delphi XE6とExcel2013の組み合わせで開発していますが、Excelのタイプライブラリが取り込めません。以前は、この「EXCEL2010を操作してみる」の解説どおりできていたのですが、バージョンがあがったためか, いつのころからか、登録済みのタイプライブラリに含まれなくなっていました。


事情は良くわからぬものの、"C:\Program Files (x86)\Embarcadero\Studio\14.0\OCX\Servers\Excel2010.pas" をプロジェクトに追加して騙しだましでビルドしています。

SAS Option Report 1.3.0.6

SAS 9.4のバージョンアップ作業に備えて、SAS Option Reportを更新しました。
微妙に字句が変わっているので、以前のバージョンではうまく設定値を拾うことが出来ませんでした。字句定義を変えて、Delphi XE6でリビルドしています。


次もまた仕事で使うツール手直ししないといけません。
埃をかぶっているSRXはまた出番がありそうです。

2014年5月1日木曜日

Delphi XE6でバージョン情報を取得, GetFileVersionInfo

Delphi XE2に乗り換えてから、既存のコードでバージョン情報が取れなくなりました。気合を入れなおして、サンプルコードを探し出して修正しました。XE6でも動作確認取れました。

  1. unit version;  
  2.   
  3. interface  
  4.   
  5. type  
  6.   TEXEVersionData = record  
  7.     CompanyName,  
  8.     FileDescription,  
  9.     FileVersion,  
  10.     InternalName,  
  11.     LegalCopyright,  
  12.     LegalTrademarks,  
  13.     OriginalFileName,  
  14.     ProductName,  
  15.     ProductVersion,  
  16.     Comments,  
  17.     PrivateBuild,  
  18.     SpecialBuild: string;  
  19.   end;  
  20.   
  21. var  
  22.   theVersion: TEXEVersionData;  
  23.   
  24. implementation  
  25.   
  26. uses Windows, SysUtils, Forms;  
  27.   
  28. procedure LoadVersionInfo;  
  29. type  
  30.   PLandCodepage = ^TLandCodepage;  
  31.   TLandCodepage = record  
  32.     wLanguage,  
  33.     wCodePage: word;  
  34.   end;  
  35. var  
  36.   dummy,  
  37.   len: cardinal;  
  38.   buf, pntr: pointer;  
  39.   lang, key: string;  
  40. begin  
  41.   len := GetFileVersionInfoSize(PChar(Application.ExeName), dummy);  
  42.   if len = 0 then  
  43.     RaiseLastOSError;  
  44.   GetMem(buf, len);  
  45.   try  
  46.     if not GetFileVersionInfo(PChar(Application.ExeName), 0, len, buf) then  
  47.       RaiseLastOSError;  
  48.   
  49.     if not VerQueryValue(buf, '\VarFileInfo\Translation\', pntr, len) then  
  50.       RaiseLastOSError;  
  51.   
  52.     lang := Format('%.4x%.4x', [PLandCodepage(pntr)^.wLanguage, PLandCodepage(pntr)^.wCodePage]);  
  53.   
  54.     key := '\StringFileInfo\' + lang + '\CompanyName';  
  55.     if VerQueryValue(buf, PChar(Key), pntr, len) then  
  56.       theVersion.CompanyName := PChar(pntr);  
  57.     key := '\StringFileInfo\' + lang + '\FileDescription';  
  58.     if VerQueryValue(buf, PChar(key), pntr, len) then  
  59.       theVersion.FileDescription := PChar(pntr);  
  60.     key := '\StringFileInfo\' + lang + '\FileVersion';  
  61.     if VerQueryValue(buf, PChar(key), pntr, len) then  
  62.       theVersion.FileVersion := PChar(pntr);  
  63.     key := '\StringFileInfo\' + lang + '\InternalName';  
  64.     if VerQueryValue(buf, PChar(key), pntr, len) then  
  65.       theVersion.InternalName := PChar(pntr);  
  66.     key := '\StringFileInfo\' + lang + '\LegalCopyright';  
  67.     if VerQueryValue(buf, PChar(key), pntr, len) then  
  68.       theVersion.LegalCopyright := PChar(pntr);  
  69.     key := '\StringFileInfo\' + lang + '\LegalTrademarks';  
  70.     if VerQueryValue(buf, PChar(key), pntr, len) then  
  71.       theVersion.LegalTrademarks := PChar(pntr);  
  72.     key := '\StringFileInfo\' + lang + '\OriginalFileName';  
  73.     if VerQueryValue(buf, PChar(key), pntr, len) then  
  74.       theVersion.OriginalFileName := PChar(pntr);  
  75.     key := '\StringFileInfo\' + lang + '\ProductName';  
  76.     if VerQueryValue(buf, PChar(key), pntr, len) then  
  77.       theVersion.ProductName := PChar(pntr);  
  78.     key := '\StringFileInfo\' + lang + '\ProductVersion';  
  79.     if VerQueryValue(buf, PChar(key), pntr, len) then  
  80.       theVersion.ProductVersion := PChar(pntr);  
  81.     key := '\StringFileInfo\' + lang + '\Comments';  
  82.     if VerQueryValue(buf, PChar(key), pntr, len) then  
  83.       theVersion.Comments := PChar(pntr);  
  84.     key := '\StringFileInfo\' + lang + '\PrivateBuild';  
  85.     if VerQueryValue(buf, PChar(key), pntr, len) then  
  86.       theVersion.PrivateBuild := PChar(pntr);  
  87.     key := '\StringFileInfo\' + lang + '\SpecialBuild';  
  88.     if VerQueryValue(buf, PChar(key), pntr, len) then  
  89.       theVersion.SpecialBuild := PChar(pntr);  
  90.   finally  
  91.     FreeMem(buf);  
  92.   end;  
  93. end;  
  94.   
  95. initialization  
  96.   LoadVersionInfo;  
  97.   
  98. end.  

Delphi XE6 + TMS Component Pack

開発環境を更新しました。
バージョン情報の取得や、Enterprise GuideのOLE Automationなど確認するものがいくつかあります。
Delphi XE6 Professional

TMS Component Pack