(11/10/01~)

11/10/01

今月
 本職の方が本格的に忙しくなっているので、雑談の更新頻度は低下すると思います。


11/10/02

XN Resource Editor
 "Delphi の製品情報" には随分前から掲載されていますが、ちゃんと紹介していなかったので。

 XN Resource Editor は *.dcr (コンポーネントリソース) を作る事もできるリソースエディタです。

 3.0.0.1 は Delphi 2006 でコンパイルされており、ソースコードも公開されています (MPL)。3.1.1.1 はDelphi 2009 でコンパイルされていますが、ソースコードが公開されていません。3.0.0.1 をコンパイルするためには、  が必要です。コンポーネント類は~100.zip が必要です。XNResourceEditor のページ から辿れるリンクは古いコンポーネントを指しているので注意が必要です。更に、  も必要です。加えて言えば、これでもファイルが足りません。同じ作者の "D2009 Component Packages" からファイルを持ってくる必要があります (しかもそのままでは使えないという...)。詳細はフォーラムの "Anyone has compiled XN Resource Editor from Colin Wilson?" を参照して下さい。

 もう一つファイルが足りなかった気がするのですが...?ファイルが足りなかったら、ファイル名をググって探してみて下さい。同じ作者の "XANA News" のソースコード一式の中にファイルが含まれていたような記憶があるのですが...?

 XN Resource Editor のソースコードは依存関係がワケワカメです。この雑談のためにもう一度 XN Resource Editor をコンパイルできるようにしてみようと試してみましたが、古いパッケージを必要としたり、コンポーネントが新しいパッケージ (D2009 用) に含まれているものの、公開されていない古いパッケージが必要だったりで、マトモにコンパイルできないようです。

無茶な宿題
 「夜空を観察して、PM8:00 の星座を書いて、1~2時間後にもう一度観測せれ」 って子供の宿題なのですが...金曜~日曜すべて曇天でどうしろと?


11/10/03

XN Resource Editor 3.0.0.1 [ja] with Source
 XN Resource Editor 3.0.0.1 の日本語版です。「最後に1回だけ」 と言いつつアレコレいじっていたらコンパイルが通るようになりまして...もはや何をいじったのか判らないのですがね。

  

 今更、3.0.0.1 の需要があるとも思えませんが、一応アップしておきます。もちろんソースコード一式もアップしてあります。日本語版とはいえ、主に GUI しかいじっていないので、メッセージとかは英語で表示されるかもしれません。なお、コンパイルに利用した Delphi のバージョンは 2007 です。

 「何をどうやったらコンパイルできるの?」 とか聞かないで下さい。正直、もう何をやったか覚えていませんし、説明もできません (w

XN Resource Editor の作者はイギリスの方?
 ソースいじっていてそう思ったのですが、よく見りゃ、作者のサイトが .co.uk でしたね。何でイギリスの方だと思ったのかと言えば、Colors の綴りが違っていたからです。イギリス英語では "Colours" と書きますよね..."Center" を "Centre" と書いたり。


11/10/04

XN Resource Editor 3.0.0.1 [ja] 補足
 日本語化の際に変更した所があります。

 大きな変更はありません。

XN Resource Editor 3.0.0.1 [ja] rev.2
 [表示 | オプション] の "RC ファイルオプション" に列挙されるコンパイラが増えています (CodeGear / Embarcadero 製品。XE2 まで対応)。Visual Studio も追加しようとしたのですが、Visual Studio 2005 以降で Include パスを特定する方法が変わったようです。VS のインストールディレクトリは簡単に取得できるのですが...。


11/10/05

SX-WINDOW
 先日の雑談で書いた SX-WINDOW のスクリーンショットです。

 SX-WINDOW の UI を模した SX-SHELL というのも昔作った事がありまして。

 やはり胸熱だな、と。

シュタゲごっこをするには?
 X68K エミュレータを使うと、SX-WINDOW を体験する事ができます。手っ取り早く画面を拝みたいのなら、

  1. EX68 を DL してくる。
  2. X68000 LIBRARY から IPL-ROM を DL してくる。
  3. IPL-ROMEX68 と同じフォルダに置く。
  4. EX68 で、CGROM.TMP を生成する。
  5. (実機から吸い出した IPLROM.DAT / CGROM.DAT を持っている場合には上記作業は不要)
  6. XM6 TypeG を DL してくる
  7. IPL-ROM と CGROM.TMP をリネームした CGROM.DAT を XM6 TypeG と同じフォルダに置く
  8. X68000 LIBRARY から SX-WINDOW ver3.1システムディスク 【ディスクイメージ版】 を DL してくる。
  9. XM6 TypeG で、SX-WINDOW ver3.1システムディスク 【ディスクイメージ版】 を読みこませる。
 細かい所は端折りましたが、こんな感じで SX-WINDOW を起動できます (実機から吸い出した ROM を持っていればもっと簡単なのですが)。ちなみに、SX-WINDOW の実画面解像度は 768×512 ですが、SXWIN.X を -G18 オプションを付けて起動する事で、1024×1024 の解像度で起動します。実機ではインターレース表示でしたが。

 後は電子レンジとバナナ、IBM5100 を手に入れてくれば完璧です。後は厨二病の言い回しを勉強しましょう (w

 シュタゲに出てくる PC の「キーボードがデカい」 と仰る方がたまにいらっしゃいますが、本当に X680x0 のキーボードはデケェんだよ...ニワカ乙。

XN Resource Editor 3.0.0.1 [ja] rev.3 & 4 & 5
 ちょっと修正。

 これで目に付く箇所のほとんどは日本語化されたと思います。

*.dcr (コンポーネントリソースファイル) の記事 by マスター
 XN Resource Editor 3.0.0.1 [ja] の発端は、*.dcr の話からだったのですが、Mr.XRAY さんトコに "164_コンポーネントのアイコン作成支援プログラム" という記事が増えています。brcc32.exe をラッピングしてコンポーネントアイコン作成支援を行うアプリと、*.dcr についての解説がなされています。


11/10/06

XN Resource Editor 3.0.0.1 [ja] rev.6 to 9
 ちょっと修正。

 ドックにはちょっと問題がありまして。Vista 以降の Windows でドッカブルなオブジェクトを移動しようとするとメチャメチャ遅くなる現象が出る (QC#48672) のはご存知かと思います。Vista / 7 に Delphi 7 をインストールすると、オブジェクトインスペクタ等の移動が緩慢になってしまうアレです。これを回避するには、https://radstudiodemos.svn.sourceforge.net/svnroot/radstudiodemos/branches/RadStudio_XE/Delphi/VCL/Docking/ から DockingUtils.pas を DL してきて、 ドッカブルオブジェクトの OnStartDock に以下のようなイベントハンドラを記述します。

uses
  ..., DockingUtils;

procedure TBaseDockForm.FormStartDock(Sender: TObject; var DragObject: TDragDockObject);                                                   
begin                                                                 
  DragObject:= TTransparentDragDockObject.Create(Self);               
end;                                                                  

 デモを見ると大掛かりな修正が必要に見えますが、実際にはイベントハンドラを一つ追加して一行記述するだけです。DockingUtils.pas の方が、QC#48672 のコメ欄にある Chee Yang Chau 氏の Workaround よりも動きがいいようです。解決策としてはほぼ同じですけどね。

 ところが、この解決方法を XN Resource Editor 3.0.0.1 のダイアログリソースの [コントロール] タブに適用してしまうと、アンドック時にコントロールがマトモに貼れなくなってしまいます。さらに、アンドックされた [コントロール] が残ったまま [×] でメインフォームを閉じようとすると、保存確認ダイアログが裏回りします。よって、ダイアログリソースのドック処理は以前のままになっています。

 不用意にアンドックしてしまう件は 3.1.1.1 でも直っていないようです。各ツールパレットの何もない所をクリックするだけで勝手にアンドックしてしまいます (ツールパレットのタブをダブルクリックでアンドックするのは仕様ですが)。これはドッカブルオブジェクトがむき出しになっているからで、ここに alClient な TLabel を貼る事によって回避しています。

 ともあれ、ツールパレットはアンドックして使わない方がいいでしょう。特に、ダイアログリソースの [コントロール] タブはアンドックして閉じてしまうと、他のリソースツリーに移動しない限り、ツールパレットを再表示する手段がありませんし...。

Turbo C++ 2nd Edition
 某質問を後になって疑問に感じ、思わず確認してしまったのがコレ。

 「年季が入ってきたなぁ」 と感じるのもそのハズ、20 年モノですもんね。

Firebird Wiki (新)
 旧 Firebird Wiki を引き継いだ、Firebird の新しい Wiki サイトができたようです。


11/10/07

XN Resource Editor 3.0.0.1 [ja] によるコンポーネントアイコンの作り方
 以下の手順は、ガリレオ IDE 専用のコンポーネントアイコンリソース (*.dcr) を作る方法です。

  1. XN Resource Editor を起動します。
  2. [リソース | コンポーネントアイコンウィザード] を選択します。

    ※このメニューがない場合には、XN Resource Editor 3.0.0.1 [ja] 最新版 を DL して下さい。
  3. コンポーネントアイコンウィザードが起動しますので、種類はそのままにして、コンポーネントクラス名を入力します。

    コンポーネントクラス名は自動的に大文字になります。
  4. 24×24 / 16×16 / 32×32 の 256 色 Bitmap が 3 つ登録されました。
  5. ペイントブラシに、アイコンより大きめのサイズの画像 (32×32 またはそれ以上) を用意します。

    サイズは問いませんが、256 色の画像を用意する事をオススメします。
  6. ペイントブラシで 全選択 (Ctrl+A) して、コピー (Ctrl+C) します。
  7. XN Resource Editor に貼り付け (Ctrl+V) ます。

    画像は自動的にリサイズ / 減色されます。
    ※ XN Resource Editor からは選択範囲をコピーできます。画像のすべてをクリップボードにコピーしたい場合には 全選択 (Ctrl+A) して、コピー (Ctrl+C) します。
  8. 24×24 アイコンができたので、同様に 16×16 / 32×32 にも貼り付け (Ctrl+V) ます。
  9.   
  10. 名前を付けて保存 (*.dcr) すれば出来上がりです。

    名前はデフォルトで "最初にウィザードで登録したコンポーネントクラス名.dcr" になりますが、"コンポーネントクラスを宣言するユニットと同じ基本名.dcr" にして保存してください。
 コンポーネントアイコンウィザードは、コンポーネントクラス名を元に、アイコンリソースのテンプレートを生成します。新 IDE (Delphi 2005 以降) 用の場合、  旧 IDE (Delphi 7 以前) 用の場合、  そして、新旧両用の場合には、  のテンプレートが生成されます。新旧両用のアイコンは、~16 と ~32 のリソースが含まれるため、新 IDE でも大きなアイコン/小さなアイコンがキレイに見えます。但し、色数が 16 に制限されます。このコンポーネントアイコンリソースを旧 IDE に登録した場合、~16 と ~32 のアイコンは無視されます。

 旧アイコン / 新旧アイコンを作る際には、用意する元となる画像をあらかじめ 16 色に減色しておく事をオススメします。


11/10/08

コンポーネントアイコン
 正式名称は "パレットビットマップ" です。以下、Delphi 7 のヘルプからの抜粋です。

すべてのコンポーネントには,そのコンポーネントをコンポーネントパレットで表示するためのビットマップが必要です。 独自のビットマップを指定しなければ,IDE ではデフォルトのビットマップが使用されます。

パレットビットマップが必要なのは設計時だけなので,パレットビットマップをコンポーネントのコンパイルユニットの中に含めてコンパイルする必要はありません。

パレットビットマップは Windows リソースファイルで提供します。ファイルの名前は,ユニットと同じ名前に.dcr(Dynamic Component Resource)拡張子を付けたものにします。 リソースファイルは Delphi のイメージエディタで作成できます。

新しいコンポーネントを作成すると,カスタムコンポーネント用の独自のビットマップを定義できます。 新しいビットマップを作成する手順は,次のとおりです。
  1. [ツール|イメージエディタ]を選択します。
  2. イメージエディタで,[ファイル|新規作成|コンポーネントリソースファイル(.dcr)]を選択します。
  3. [untitled1.dcr]ダイアログボックスで,[Contents]を右クリックします。[新規作成|ビットマップ]を選択します。
  4. [ビットマッププロパティ]ダイアログボックスで,[幅]と[高さ]の両方を 24 ピクセルに変更します。[VGA(16 色)]がチェックされていることを確認します。[OK]をクリックします。
  5. [Contents]の下に,[Bitmap]と[Bitmap1]が表示されます。[Bitmap1]を選択し,右クリックして[名称変更]を選択します。ビットマップに,T を含めてすべて大文字で新しいコンポーネントのクラス名と同じ名前を付けます。たとえば,新しいクラス名が TMyNewButton の場合は,ビットマップの名前を TMYNEWBUTTON とします。

    メモ: [コンポーネントの新規作成]ダイアログボックスの指定にかかわらず,すべて大文字の名前を付ける必要があります
  6. TMYNEWBUTTON をダブルクリックすると,空のビットマップのダイアログボックスが表示されます。
  7. イメージエディタの一番下のカラーパレットを使用してアイコンを設計します。
  8. [ファイル|名前を付けて保存]を選択し,リソースファイル(.dcr または.res)に,コンポーネントクラスを宣言するユニットと同じ基本名を付けます。たとえば,リソースファイルに MyNewButton.dcr という名前を付けます。
  9. [コンポーネント|コンポーネントの新規作成]を選択します。コンポーネントウィザードによるコンポーネントの作成の手順に従って,コンポーネントウィザードで新しいコンポーネントを作成します。コンポーネントのソースファイル MyNewButton.pas が MyNewButton.dcr と同じディレクトリにあることを確認します。
    コンポーネントウィザードでは,クラス名が TMyNewButton の場合,コンポーネントのソースファイルまたはユニットには MyNewButton.pas という名前が付き,デフォルトでLIB ディレクトリに配置されます。[参照]ボタンをクリックし,生成されたコンポーネントユニットの新しい場所を検出します。

    メモ: .dcr ファイルでなく .res ファイルを使用してビットマップを作成する場合は,コンポーネントのソースファイルに参照を追加してリソースをバインドします。たとえば,.res ファイルの名前がMyNewButton.res の場合は,.pas ファイルと.res ファイルが同じディレクトリにあることを確認してから,type 部の下の MyNewButton.pas に以下を追加します。

    {$R *.res}
  10. [コンポーネント|コンポーネントのインストール]を選択し,新しいパッケージまたは既存のパッケージにコンポーネントをインストールします。[OK]をクリックします。
新しいパッケージが作成され,インストールされます。新しいコンポーネントを表すビットマップが,コンポーネントウィザードで指定したコンポーネントパレットのページに表示されます。

 イメージエディタありきの話なので今読んでみると、まさに 「日本語でおk?」 ですね。これを日本語にすると、

 となります。

 ガリレオ IDE (Delphi 2005 以降) 用のパレットビットマップのドキュメントは恐らく存在しないと思われます。D2005 のヘルプは D7 と同じものですし、2006 またはそれ以降ではヘルプトピック自体が存在しません。BDS 2006 またはそれ以降、イメージエディタ (imagedit.exe) が付属しなくなったためだと思われますが、それならそれで brcc32.exe を使った作り方でも載せればいいのに...とは思います。


11/10/09

Delphi / C++Builder で、IDE 実行時のみ TOpenDialog.Execute でコケる場合には?
 この件は再現条件が不明なため、いくつもの QC が挙がっています。「IME 変えたら治った」 とか 「Adobe Reader をアンインストールしたら治った」とか様々な報告があります。 共通して言えるのは、"UseLatestCommonDialogs = false" の場合にはコケないようだ、という事です。

  // IDE 実行中は強制的に UseLatestCommonDialogs を False
  if DebugHook <> 0 then
    UseLatestCommonDialogs := False;

 ...よって、このようなコードをオマジナイで記述しておけば、IDE 実行時に TOpenDialog.Execute でコケる現象は出ない事になります。"104.外部デバッガでアプリケーションをデバッグされたくない (アンチデバッガの初歩)" にある、IsDebuggerPresent() でも同等の事ができます。

XN Resource Editor 3.0.0.1 [ja] rev.10 to 15
 ちょっと修正しました。

 XN Resource Editor の描画ツールにある "ペイントブラシ" と "エアブラシ" は何故か動作しません。ソースを眺めてみたら実装されていない事が判明しました ("自由選択" も実装されていません...正確には "四角形選択" と同じ実装になっています)。

 3.1.1.1 のヘルプを見ると、仕様的には...

 ...なようです。ヘルプにはそう書かれているのですが、実はこの 2 つは 3.1.1.1 にも実装されていません。

エアブラシ
 ペイントブラシはペン色かブラシ色かの違いはあるものの "線幅を変えた鉛筆" と同等なので簡単に実装できましたが、エアブラシはどういう実装にするのかちょっと悩みました。

 最終的には 「本格的にお絵かきするツールじゃないのだから、適当でいいんじゃね?」 という事で、ごくごく原始的なエアブラシを実装してみました。以下がソースコードです。

procedure TBitmapEditor.DrawAirBrush(aCanvas: Tcanvas; aX, aY: Integer; aColor: TColor);
const
  RADIUS = 6;
var
  r, x, y: Integer;
  s, t: Single;
begin
  Randomize;
  s := 0;
  repeat
    r := (Random(RADIUS) + 1);
    t := 2 * PI * s / (RADIUS * 2);
    x := Trunc(r * Cos(t)) + aX;
    y := Trunc(r * Sin(t)) + aY;
    aCanvas.Pixels [x, y] := aColor;
    s := s + 0.2;
  until (s >= (RADIUS * 2));
end;

 かなり適当です。マウス位置を中心とした、半径 RADIUS の円の中にランダムにドットを置いています。このアルゴリズムはコードは短いものの、とても効率が悪いです。

procedure TBitmapEditor.DrawAirBrush(aCanvas: Tcanvas; aX, aY: Integer; aColor: TColor);
const
  RADIUS = 6;
var
  r, x, y: Integer;
  s, t: Single;
  hit: array [-RADIUS..RADIUS, -RADIUS..RADIUS] of Byte;
begin
  Randomize;
  ZeroMemory(@hit, SizeOf(hit));
  s := 0;
  repeat
    r := (Random(RADIUS) + 1);
    t := 2 * PI * s / (RADIUS * 2);
    x := Trunc(r * Cos(t));
    y := Trunc(r * Sin(t));
    hit[x][y] := 1;
    s := s + 0.2;
  until (s >= (RADIUS * 2));

  for x:=Low(hit) to High(hit) do
    for y:=Low(hit[x]) to High(hit[x]) do
      if hit[x][y] = 1 then
        aCanvas.Pixels[x + ax, y + ay] := aColor;
end;

 Delphi の TCanvas.Pixels が遅いのは有名な話なので、重複した Pixels[x, y] にアクセスしないようにしてみたのがこちらのアルゴリズムです。PC の性能やランダム値に左右されますが、10000 回ループで測定した結果、こちらのアルゴリズムの方が 1.5 倍程高速なようです。


11/10/10

TCustomForm.UpdateActions
   他のヒトのソースコードというのは勉強になります。XN Resource Editor のコードを読んでいて、「あー、こんな書き方もあるんだ」と思うこともしばしばです。

 ...そういえば、ちょっと不思議なコードがありました。それは TCustomForm.UpdateActions に関するものなのですが...とりあえず先に、TCustomForm.UpdateActions のヘルプをあたってみましょう。

フォームに関連付けられているアクションをすべて更新します。 UpdateActions メソッドは,アプリケーションがアイドルのときに自動的に呼び出され,フォーム内のすべてのコンポーネントに,そのコンポーネントをターゲットとしたアクションを更新する機会を提供します。これにより,アクションにチェックマークが付けられたり,淡色表示されたりすることなどが可能になり,それらのターゲットの現在の状態を反映できるようになります。 UpdateActions は,フォーム,メニュー,およびフォーム内のコンポーネントに関連付けられているアクションをすべて更新します。 

 ふむ。Action 関係のメソッドのようですが、ピンときませんね。では、何が不思議なのか解りやすいように、単純な例を具体的に挙げてみる事にします。

 例えば以下のようなよくある UI のフォームがあったとします。

 RadioButton1 にチェックが入っていたら、Edit1 を有効、Edit2 を無効にし、RadioButton2 にチェックが入っていたらその逆を行います。その制御を含めたソースコードがコレです。

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    RadioButton1: TRadioButton;
    RadioButton2: TRadioButton;
    Edit1: TEdit;
    Edit2: TEdit;
  private
    { Private 宣言 }
  public
    { Public 宣言 }
  protected
    { Protected 宣言 }
    procedure UpdateActions; override;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.UpdateActions;
begin
  Edit1.Enabled := RadioButton1.Checked;
  Edit2.Enabled := RadioButton2.Checked;
end;

end.

 最初に見た時は、「RadioButton の OnClick にイベントハンドラ UpdateActions が割り当てられているのだろう」 と思いましたが、UpdateActions は RadioButton の OnClick イベントハンドラではありません。イベントハンドラを記述していないのに、RadioButton のチェック状態によって Edit の Enabled が切り替わります。ちょっと不思議な記述だとは思いませんか?

 「OnIdle イベントハンドラ書くのと何が違うん?」 とか野暮なツッコミはナシの方向でお願いします (w

XN Resource Editor 3.0.0.1 [ja] rev.16 to 18
 ちょっと修正。

 "クリップボードが開けません" エラーの再現手順は、
  1. XN Resoure Editor で [リソース | リソースを追加] で Bitmap を追加
  2. [描画ツール] で "四角形選択" を選択し、適当な範囲を指定。
  3. 〔Ctrl〕+〔X〕で切り取り。
  4. Windows のペイントブラシを開く
  5. 全選択 (〔Ctrl〕+〔A〕) して、コピー (〔Ctrl〕+〔C〕)
 こんな感じです。クリップボード監視を UpdateActions で行うようになっていたのを、クリップボードチェーンを処理するようにしたりと、イロイロやってたら解決しました。他のアプリがクリップボードをいじっていようがお構いなしに UpdateActions でチェックするというのはあまり行儀のいいやり方ではないですからね (Kylix では似たような件で痛い目に遭ったし)。

 "自由選択" も実装しました。

 Windows のペイントブラシのより、Paint.NET の自由選択の動きに似ています...ただ、XN Resource Editor には "矢印 (選択)" がないので、イマイチ "四角形選択 / 自由選択" の使い勝手が悪いのですよねぇ。


11/10/12

XN Resource Editor 3.0.0.1 [ja] rev.19 to 25
 ちょっと修正。

 ソースコードは XN Resource Editor とコンポーネントを分離し、整理してあります。ビルド手順のテキストファイルの通りにやれば 「コンポーネントやファイルがない!」 なんて事にはならないと思います。

 先述のように、3.0.0.1 のソースコードをコンパイルするのに不足しているファイルがあります。

 Colin Wilson 氏の Delphi 2005 用コンポーネント に含まれているものもありますし、氏の別のプロダクト "XanaNews" のアーカイブに含まれているものもあります。

 厄介なことに、現在入手可能な cmpPropertyListBox.pas は 3.1.1.1 対応ではありません...とは言え、cmpPropertyListBox.pas の修正は軽微で済みます。

 3.1.1.1 では TNT を利用した Unicode 化が行われていますが、cmpPropertyListBox.pas 中でプロパティの値の判断に "(VarType() = varString)" を使ってあります。ここを "((VarType() = varString) or (VarType() = varOleStr))" に変更する必要があります。なお、バリアントが文字列であるかどうかを Unicode 版 Delphi で判断するには

 これらを利用します。


11/10/14

FMV-BIBLO LOOX U/G90
 ...さて、ここに FMV-BIBLO LOOX U/G90 がある訳だが。

 ONKYO TW-317A5 のプロセッサ N450 (1.66 GHz) よりもさらに非力な Z520 (1.33 GHz)...シングルコアで HT があるだけの 32bit CPU だ!マルチタッチが可能 (2 接触点) な 1280×800 の 5.6 インチディスプレイ...カーナビの画面よりも小さいぞ!外部記憶は SSD の 32GB で、ちょっと少なめ...Windows エクスペリエンスインデックスも 1.9 と少なめだ!

 ...けなしてばっかりのようだが、この手の "縛りのあるコンピュータはむしろ大好物" だ。


11/10/17

XN Resource Editor 3.0.0.1 [ja] rev.26 to 27
 金曜日からの "ちょっとした事情" により雑談を更新できなかったので書いていませんでしたが、実は修正されています。

 ほぼ見た目だけの修正ですね。それにしても...メールや twitter の未読がスゴイ事に (w

DEVMGR_SHOW_NONPRESENT_DEVICES
 Delphi (freeml) が元ネタです

 レジストリで DEVMGR_SHOW_NONPRESENT_DEVICES をいじる事がある場合、値の型を DWORD (REG_DWORD) ではなく 文字列 (REG_SZ) でやらないと、環境変数に変な値が展開されてしまい Delphi の environment.proj が壊れた状態になってしまう事があります。

 壊れた状態でコンパイルすると、

 ...というエラーメッセージが出るようです。

 環境変数の格納されているレジストリ ([HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment]) のエントリは、REG_SZ または REG_EXPAND_SZ 型でなくてはなりません。

 対処方法は、

  1. レジストリエディタ (regedit.exe) を起動し、[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment] に DWORD の値がないかチェックする。
  2. DWORD の値 (REG_DWORD) があれば、その値を10進文字列化したものを文字列 (REG_SZ) で登録しなおす 。不要なら削除する。
  3. 不正な DWORD の値は "システムの環境変数" から見えない事があるので注意。

    "システムの環境変数" は [ファイル名を指定して実行] から、"control sysdm.cpl" を実行し、[詳細設定] タブにある [環境変数] ボタンで確認できる。
  4. 念のためにログオフして再ログインする。
  5. 環境変数が修正されても、*.proj に転記された不正な文字は消えないので、Delphi を起動し [ツール | オプション] で "環境オプション - 環境変数" を辿り、該当する環境変数があればダブルクリックして、不正な文字を正しい文字列に修正するか半角 SPで置換する。

    値を削除する事はできないようです。
 この手順で直るようです。環境変数を格納しているレジストリに DWORD 値が含まれていると、Delphi だけではなく他のアプリケーションにも悪影響を与える事があるようなので、この現象が発生したらレジストリをキチンと整備しなければならないようです。


11/10/30

FMV-BIBLO LOOX U/G90SHARP PC-E500
 サイズを比較してみる事にした。

  

 大きさ的にはほぼ同等 (sizeasy による比較)。PC-E200 (G800 系) と同じ位かもしれない。厚みはケースを付けない、キー部を除いた PC-E500 2 台分ってトコか。

 LOOX U/G90 の手前側にある黒いものは拡張コネクタのフタ (自作)。E500 の側面中央にあるのはクロック切り替えスイッチ。

 そういや昔、外注で某所に出向していた事があり、ちょっと計算するのにカード型のソーラー電卓でペチペチやっていたのだけれど、出向先の方から 「ケッ、プログラミングするなら、マトモな電卓位持っとけよ!」 と自慢気に HP の関数電卓見せられた事がありました。いあ、GUI の座標計算なんで四則演算できれば充分なのですが...そもそも、目の前にあるのは "もっと高級な計算機" なのではないでしょうか?

ExTOUCH
 TW317A7 に付属する ExTOUCHExTOUCH の facebook ページで 「いいね」 をクリックした人を対象に、個人向け ExTOUCH が無償提供されています。

 ExTOUCHTW317A5 / TW317A7PH に付属していないんですよね...コレがあるとスレート PC の操作が幾分楽になります。

 LOOX U/G90 でも使ってみたのですが、こちらは流石に無理がありました。画面が小さすぎてタッチキーボードは使い物になりません...まぁ、物理的なキーボードがあるのであまり問題にはならないとは思いますが。LOOX U/G90 ではもっぱらランチャ機能をメインに使う事になると思います。

 LOOX U/G90ExTOUCH を使うと、Lavie Touch の記事の写真のように、ランチャの上部に隙間ができてしまいます。ExTOUCH は縦解像度 768 かつタスクバー表示状態の時にランチャの上下に隙間がない状態になるため、元々は TW317 専用 (或いは TW317 を開発機) として作られたのではないかと思います。


11/10/31

XN Resource Editor 3.0.0.1 [ja] rev.28
 リリースしましたが、見た目だけの違いしかありません。

ざつだん
 月初の予定通りというか、月半ばの "想定外の出来事" のせいもあって雑談の更新頻度が低下中ですが、しばらくはこの調子だと思われます。

 "中のヒト" が何人もいたらこういう事態にはならないのでしょうけどね...(苦笑)

Prism VS Visual COBOL
 Delphi 使いの憂鬱な事案の一つに、Borland と Inprise と CodeGear と EmbarcaderoMicro Focus の関係を何度も説明しなくてはいけないというのがあると思う。

 Delphi からみた場合、Borland → Inprise (社名変更) → Borland (社名変更) → CodeGear (独立部門) → Embarcadero (買収)。Borland からみた場合、Borland → Inprise (社名変更) → Borland (社名変更) → Micro Focus (買収) となり、Borland は現在、存在しない...この説明を何回、いや何十回しただろうか。

 さて、Borland を買収した Micro Focus だが、.NET 開発環境としての COBOL である、Visual COBOL という製品を持っている。かたや、Embarcadero は (限りなく Delphi に近い) Oxygen 言語な .NET 開発環境である Prism という製品を持っている...「だからどうした?」 と言われれば 「そうだね...僕が悪かったよ」 としか答えようのないネタである (w

 ちなみに、Visual COBOL には 30 日トライアル版がある。言語マニアな方は試してみて下さいね。

ドドドーシド♪ × 4
 今更ながら、これはいいオッサンホイホイ。くれぐれも、オッサンの車の中で OutRun の曲を流さないようにね...293 km/h 出す勢いでペダル踏んじゃうから (w

 凝ってるなぁ...オッサンじゃないと歌詞の "英語の部分の意味" ("英語の意味" じゃなく) が解らないかも。しかも、最後は "16t" かい (w


 BACK   古いのを読む   新しいのを読む