Monday, February 25, 2008

ThinkPad UltraNavが使えないアプリへの対処方法

つい最近、オフィスで使用しているThinkPad+WinXPマシンにOffice2007を入れてみました。

従来のOffice2003では、TrackPoint+Scrollを使用して、メールをスクロールしていたのですが、Office2007を入れたら、この機能が突然使えなくなりました。ちょっと不便だなと思い、いや、だいぶ不便だなと思い、Googleでちょっと検索したら、それを改善してくれるページがありました。

対処方法は簡単で、以下の手順で対処できます。

1. %ProgramFiles%\Synaptics\SynTPを開きます。
2. tp4table.dat というファイルをメモ帳で開きます。
3. 以下の設定をファイルの中に追加します。


; Office 2007 Scroll Fix
*,*,WINWORD.exe,*,*,*,WheelStd,0,9
;*,*,MSPUB.exe,*,*,*,WheelStd,0,9
;*,*,POWERPNT.exe,*,*,*,WheelStd,0,9
*,*,OUTLOOK.exe,*,*,*,WheelStd,0,9
;*,*,ONENOTE.exe,*,*,*,WheelStd,0,9
;*,*,INFOPATH.exe,*,*,*,WheelStd,0,9
;*,*,GROOVE.exe,*,*,*,WheelStd,0,9
;*,*,EXCEL.exe,*,*,*,WheelStd,0,9
;*,*,MSACCESS.exe,*,*,*,WheelStd,0,9



セミコロン(;)は、その行がコメントの扱いになるので、インストールされているプログラムに応じて設定をON/OFFできます。

最後にファイルを保存して、念のためマシンを再起動。これで今までどおりUltraNavが使えるようになります。

ちなみにiTunesもUltraNavに前から対応していなかったのですが、これも、以下の一行(コメントを含めると二行)で解消!


; iTunes Scroll Fix
*,*,itunes.exe,*,*,*,WheelStd,0,9



他の人には随分昔の情報かもしれませんが、参考までに。

Sunday, February 10, 2008

AIR - データグリッドのデータをXMLに書き出すサンプル

前回のサンプルを応用して、データグリッドに読み込んだXMLファイルのデータを編集した後、再びXMLファイルに書き出すサンプルです。ローカルファイルの読み込みもできれば、書き出しも可能です。

今回のポイントは、以下の2点になるかと思います。

  • IListを使用して、データグリッドのデータを抽出する
  • FileMode.WRITEでファイル書き出しをする


今回のコード:


<?xml version="1.0" encoding="utf-8"?>

<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" applicationComplete="appComplete()">

<mx:Script>

<![CDATA[



import mx.collections.IList;



public var sampleXML:File;

public var stream:FileStream;

public var XMLStr:String;





[Bindable]public var rXML:XML;



public function appComplete():void

{

dg.enabled = false;

nameTxt.enabled = false;

updateBtn.enabled = false;

saveBtn.enabled = false;

}



private function loadSampleXML():void

{



sampleXML = File.documentsDirectory;

sampleXML = sampleXML.resolvePath("sample.xml");





stream = new FileStream();



if(sampleXML.exists)

{

stream.open(sampleXML, FileMode.READ);



rXML = XML(stream.readUTFBytes(stream.bytesAvailable));

stream.close();

}

dg.enabled = true;

}



private function getName():void

{

nameTxt.text = dg.selectedItem.name;

nameTxt.enabled = true;

updateBtn.enabled = true;

}



private function updateName():void

{

dg.selectedItem.name = nameTxt.text;

nameTxt.enabled = false;

updateBtn.enabled = false;

saveBtn.enabled = true;

}

private function saveData():void

{

createXMLData();

writeXMLData();

saveBtn.enabled = false;

}



//-----------------------------------------

private function createXMLData():void

{



XMLStr = "";



var dgLength:Number = dg.dataProvider.length;

var i:Number = 0;

var dgList:IList = IList(dg.dataProvider);



for(i = 0; i<dgLength; i++)

{

XMLStr += "<sample>\n"

+ "<id>"+ dgList.getItemAt(i).id +"</id>\n"

+ "<name>"+ dgList.getItemAt(i).name+"</name>\n"

+ "<age>"+ dgList.getItemAt(i).age +"</age>\n"

+ "</sample>\n";

}

}



private function writeXMLData():void

{

var outputString:String = '<?xml version="1.0" encoding="utf-8"?>\n';

outputString += "<set>\n"

+ XMLStr

+ "</set>";

outputString = outputString.replace(/\n/g, File.lineEnding);



stream = new FileStream();



stream.open(sampleXML, FileMode.WRITE);

stream.writeUTFBytes(outputString);

stream.close();



}



//-----------------------------------------





]]>

</mx:Script>



<mx:VBox x="0" y="0" width="100%" height="100%">

<mx:Button label="Load" click="loadSampleXML();"/>

<mx:DataGrid dataProvider="{rXML.sample}" change="getName();" id="dg">

<mx:columns>

<mx:DataGridColumn headerText="ID" dataField="id"/>

<mx:DataGridColumn headerText="Name" dataField="name"/>

<mx:DataGridColumn headerText="Age" dataField="age"/>

</mx:columns>

</mx:DataGrid>

<mx:TextInput id="nameTxt"/>

<mx:Button label="Update" id="updateBtn" click="updateName();"/>

<mx:Button label="Save" click="saveData();" id="saveBtn"/>

</mx:VBox>



</mx:WindowedApplication>



今回のサンプルはこちらダウンロードできます。

XMLファイルの読み込みは、「File.documentsDirectory;」となっているので、サンプルを実行する前にsample.xmlは、マイドキュメントに保存して置いてください。

ファイルの読み込み、書き出しの基本的な説明は、AIR LiveDocsに記載されています。

Saturday, February 9, 2008

AIR - XMLデータをデータグリッドに読み込むサンプル



前回のサンプルに続き、今回は読み込んだXMLデータをデータグリッドに読み込みたいと思います。データグリッドへのXMLデータの読み込み方法はとてもシンプルです。

データグリッドコンポーネントを用意したら、そのデータグリッドのdataProviderを設定し、各カラムのdateFieldをXMLデータと関連付けすれば完了です。


<?xml version="1.0" encoding="utf-8"?>

<set>

<sample>

<id>001</id>

<name>Taro</name>

<age>20</age>

</sample>

<sample>

<id>002</id>

<name>Hanako</name>

<age>22</age>

</sample>

<sample>

<id>003</id>

<name>Jiro</name>

<age>25</age>

</sample>

<sample>

<id>004</id>

<name>Yoshio</name>

<age>21</age>

</sample>

</set>



例えば、上のようなXMLデータのsample部分のデータをデータグリッドに読み込みたい場合、データグリッドのdataProviderは次のようになります。


<mx:DataGrid dataProvider="{rXML.sample}">



あとは、各カラムのdataFieldをXMLデータに応じて設定していきます。今回の例では、id、name、ageのデータを読み込みたいので、以下のように設定します。


<mx:DataGridColumn headerText="ID" dataField="id"/>

<mx:DataGridColumn headerText="Name" dataField="name"/>

<mx:DataGridColumn headerText="Age" dataField="age"/>



これで、完了です。

今回のコード:


<?xml version="1.0" encoding="utf-8"?>

<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">

<mx:Script>

<![CDATA[



public var sampleXML:File;

public var stream:FileStream;

public var loadFile:File;



[Bindable]public var rXML:XML;



private function loadSampleXML():void

{



sampleXML = File.applicationDirectory;

sampleXML = sampleXML.resolvePath("sample.xml");

//loadFile = new File("file:///C:/sample.xml");



stream = new FileStream();



stream.open(sampleXML, FileMode.READ);

//stream.open(loadFile, FileMode.READ);

rXML = XML(stream.readUTFBytes(stream.bytesAvailable));

stream.close();

trace("XML data: "+rXML.sample);

}



]]>

</mx:Script>



<mx:VBox x="0" y="0" width="100%" height="100%">

<mx:Button label="Click Me" click="loadSampleXML();"/>

<mx:DataGrid dataProvider="{rXML.sample}">

<mx:columns>

<mx:DataGridColumn headerText="ID" dataField="id"/>

<mx:DataGridColumn headerText="Name" dataField="name"/>

<mx:DataGridColumn headerText="Age" dataField="age"/>

</mx:columns>

</mx:DataGrid>

</mx:VBox>



</mx:WindowedApplication>



今回のサンプルファイルはこちらからダウンロードできます。

なお、任意のパスからXMLファイルを読み込みたい場合は、以下のような設定になります。


public var loadFile:File;

.

.

.

.

loadFile = new File("file:///C:/sample.xml");

.

.

.

.

stream.open(loadFile, FileMode.READ);



ポイントとしては、


sampleXML = File.applicationDirectory;

sampleXML = sampleXML.resolvePath("sample.xml");


の代わりに任意のパスを指定する


loadFile = new File("file:///C:/sample.xml");


を設定することです。

また、stream.openではsampleXMLの代わりにloadFileを使用すればOKです。