Windowx XPから乗り換える前に読んでおきたい『XPユーザーのためのWindows 7乗り換えガイド』

XPユーザーのためのWindows 7乗り換えガイド』はWindowx XPユーザーがWindows 7に乗り換えるためのガイドブック。

Windows 7にスムーズに乗り換えるための、データの移行方法・アプリケーションの導入方法・Windows 7のカスタマイズテクニックなどが紹介されている。
画面の画像も豊富で操作が分かりやすい。
本書を読めば、トラブルに巻き込まれることなく、Windows 7にスムーズに移行することができるだろう。

なお、本書は中級者以上向けの内容だ。初心者には難しいと思う。

■Introduction XPユーザーが事前に解消しておきたい13の疑問

この章では、XPユーザーのよくある疑問や不安に対して解決策を紹介している。
乗り換え前にこの章を読んでおけば、安心して乗り換えることができるだろう。

■Chapter1 Windows 7への環境移行の準備と基本操作

この章はWindows 7を予習するための章だ。
Windows 7をWindows XPと比較しながら、変わったところや新しい機能を紹介する。
特に、新機能「ライブラリ」についての危険性と対処方法は、トラブルに遭遇する前に読んでおきたい。

■Chapter2 Windows XPからのデータ&設定移行

Windows XPのデータや環境をWindows 7に移行するための方法を紹介する。

特に重要なのがメールデータの移行だ。
Windows XP標準のメールソフトOutlook Expressは、Windows 7には入っていない。
メールやアドレス帳の移行は、多くの人が苦労するところではないだろうか。

本書の手順に従って操作し、大切なデータをちゃんと移行したい。

■Chapter3 アプリケーションと周辺機器の導入

「復元ポイントをあらかじめ作成しておいて問題が発生したときには元の状態に戻せるように準備しておく」といった安全対策をしっかりと説明している。
何か問題が発生しても元の状態に戻すことができるので、安心して導入作業を行うことができる。

  • 「プログラム互換アシスタント」が表示される場合
  • アプリケーションをインストールできない問題
  • 互換性のトラブルシューティング
  • アプリケーションを起動できない、起動途中に落ちる
  • Windows 7がロックしてしまった場合の対処方法

など、さまざまなトラブルに対しての回避策が解説されていて心強い。

■Chapter4 ネットワーク構築/ファイル共有とリモートコントロール

Windows 7のパソコンからWindows XPのパソコンにあるデータやアプリケーションを使いたいと思うことはあるだろう。
この章では、ネットワーク経由でデータを共有したり、Windows 7からWindowsXPを操作する方法を紹介している。

■Chapter5 仮想マシンのテクニック(Windows XP Mode)

Windows 7 Ultimate/Professionalで使用できる「Windows XP Mode」機能について紹介している。
「Windows XP Mode」を使えば、Windows 7では動作しなかったWindows XP用アプリケーションやUSBデバイスを使用することができる。
また「Windows XP Mode」機能がないWindows 7 エディションのために、バーチャルマシンソフトの説明もある。

「Windows XP Mode」の導入からUSBデバイスやCD/DVDドライブへのアクセス、そして仮想マシンのカスタマイズまでしっかりと解説している。

■Chapter6 Windows 7をもっと活用するためのテクニック

Windows 7に慣れてきたら、使いやすくするためにカスタマイズしよう。
中でも「Windows XPに近いWindows 7デスクトップ環境の構築」のテクニックは、導入したくなるものがあるだろう。

■Chapter7 Windows 7のインストール/Windows XPとのマルチブート

興味がなかったので読み飛ばしたが、マルチブートしたい人には参考になるのではないだろうか。

■Appendix Windows 7のショートカットキー

Windows 7で新たに導入されたショートカットキーが紹介されている。
Windows 7を使いこなす上で、ショートカットキーをマスターすることは欠かせない。
使いそうなものは印刷してディスプレイの横に貼っておこう。

Delphi XEとEurekaLogとアバスト! アンチウイルス 6.0の相性問題?

Delphi XEでアプリケーションを実行すると、

正常に実行できる。(あたりまえ)

ところがEurekaLogを有効にして

実行すると、アバスト! アンチウイルスが警告を表示する。

皆様の環境では、いかがでしょうか?

DelphiのRTTI(実行時型情報)を復習する

DelphiのRTTI(実行時型情報)を復習する。

■コンポーネントプロパティの型情報を取得する

  • TypInfo.TPropInfo

    Delphiでは実行時にコンポーネントの型情報を取得することができる。
    コンポーネントプロパティの型情報のレコードが「TypInfo.TPropInfo」である。

  • TypInfo.PPropInfo

    TPropInfo レコードへのポインタ。
    type PPropInfo = ^TPropInfo;

  • TypInfo.GetPropInfo

    コンポーネントからプロパティの情報を取得する。
    指定したプロパティが存在しない場合には、nil ポインタが返されます。

    例:Edit1のColorプロパティを取得する

    var
      PropInfo: PPropInfo;
    begin
      PropInfo := GetPropInfo(Edit1, 'Color');
    

■コンポーネントプロパティに値を設定する

  • TypInfo.SetOrdProp

    コンポーネントプロパティの値を設定する。

    例:Edit1のColorプロパティの値をclRedに設定する。

    var
      PropInfo: PPropInfo;
    begin
      PropInfo := GetPropInfo(Edit1, 'Color');
      SetOrdProp(Edit1, PropInfo, clRed);
    

サンプルプログラム:フォーム上のコンポーネントのColorプロパティの値をclRedに設定する

var
  I: Integer;
  PropInfo: PPropInfo;
begin
  for I := 0 to ComponentCount - 1 do
  begin
    PropInfo := GetPropInfo(Components[I].ClassInfo, 'Color');
    if PropInfo<> nil then
    begin
      SetOrdProp(Components[I], PropInfo, clRed);
    end;
  end;
end;



Colorプロパティを持つコンポーネントのColorプロパティの値がclRedになった。

■コンポーネントがもつプロパティの情報を取得する

サンプルプログラム:Edit1のプロパティ名をすべてListBoxに出力する

var
  I: Integer;
  Cnt: Integer;
  PropList : PPropList;
begin
  Cnt := GetPropList(Edit1, PropList);
  for I := 0 to Cnt - 1 do
  begin
    ListBox1.Items.Add(string(PropList[I].Name));
  end;
end;

サンプルプログラム:フォーム上のコンポーネントのCaptionの値を大文字にする

var
  I: Integer;
  PropInfo: PPropInfo;
  Caption: String;
begin
  for I := 0 to ComponentCount - 1 do
  begin
    PropInfo := GetPropInfo(Components[I].ClassInfo, 'Caption');
    if PropInfo<> nil then
    begin
      //コンポーネントのCaptionの値を取得する
      Caption := GetStrProp(Components[I], 'Caption');
      //Captionの値を大文字にして設定する
      SetStrProp(Components[I], PropInfo, UpperCase(Caption));
    end;
  end;
end;

フォーム上のコンポーネントのCaptionの値を大文字にする

■オブジェクト型のコンポーネントプロパティ

  • TypInfo.GetObjectProp

    オブジェクト型であるコンポーネントプロパティの値を返す

  • TypInfo.SetObjectProp

    オブジェクト型であるコンポーネントプロパティの値を設定する

■サンプルプログラム

TypInfo.SetObjectPropを使った興味深いプログラムが「実行時型情報を使ったプロパティへのアクセス – Delphi の話 (フェンリル | デベロッパーズブログ)」で紹介されています。
実行時に型情報を使ってリソースのデータをプロパティに設定しています。

クラスヘルパーで既存のクラスを継承することなく拡張する

クラスヘルパーを使うと、既存のクラスを継承しなくても拡張することができます。

■サンプル

次の例はTListBoxにItemIndexValueという関数を追加しています。

デザインモードではいつも通りにコンポーネントを配置します。

クラスヘルパーでTListBoxにItemIndexValue関数を追加します。

type
  TListboxHelper = class helper for TListBox
    function ItemIndexValue: String;
  end;

implementation

function TListboxHelper.ItemIndexValue: String;
begin
  Result := '';
  if ItemIndex >= 0 then
    Result := Items[ItemIndex];
end;

ListBox1をクリックした時、選択されている項目をEdit1に表示します。

procedure TForm1.ListBox1Click(Sender: TObject);
begin
  Edit1.Text := ListBox1.ItemIndexValue; //追加した関数を呼び出す
end;

ListBox1の項目を選択すると、項目の値がEdit1に表示されます。

■おまけ

TListBoxを継承した同名のクラスを作成する方法もあります。

type
  //標準のTListBoxを継承した新しいTListBoxを作成
  //コンパイラはこっちのTListBoxを優先して使用する
  TListbox = class (StdCtrls.TListBox)
    function ItemIndexValue: String;
  end;

implementation

function TListbox.ItemIndexValue: String;
begin
  Result := '';
  if ItemIndex >= 0 then
    Result := Items[ItemIndex];
end;

procedure TForm1.ListBox1Click(Sender: TObject);
begin
  Edit1.Text := ListBox1.ItemIndexValue; //追加した関数を呼び出す
end;

2011年8月22日追記:名前空間の検索順序に関する間違った記述を削除した。