DMonkeyマニュアル 0.3.9 (非公式 Unicode 対応版 by m.matsubara)
はじめに
DMonkeyは Delphiで作られた
アプリケーションへの組込みを目的としたインタプリタ・スクリプトエンジンです。
言語仕様は
ECMAScript(JavaScript)
のサブセットになっています。
この実装ではオリジナルの実装に加えてUnicode対応を行い、そのための追加機能として Bytes, Encoding, FileReader, FileWriterクラスを実装します。
元の実装にあった、StringクラスのEncoding変換系のクラスは廃止されています。
これらの変更は m.matsubara により行われています。
ライセンス
DMonkeyの使用・配布・改変についての制限はありません。
m.matsubaraによる追加開発分の著作権については破棄は行いませんが、特に使用・配布・改変について制限を行いません。
取り扱いについてはオリジナルのDMonkeyに準拠するものとします。
インストール
コンポーネントのインストールから DMonkey.pasをインストールします。
使用法
1.メソッド
スクリプトをコンパイルします。
function Compile(SourceCode: String): Boolean;
function CompileFile(AFilename: String): Boolean;
スクリプトを実行します。
function Run(Args: array of const): Integer; overload;
function Run(Args: TJValueList): Integer; overload;
function Run: Integer; overload;
関数を呼び出します。
function CallFunction(Symbol: String; Param: array of const; var RetValue: TJValue): Boolean; overload;
function CallFunction(Symbol: String; Param: TJValueList; var RetValue: TJValue): Boolean; overload;
クリアします。
procedure Clear;
スクリプトを中止します。
procedure Abort;
実行中かどうか。
function IsRunning: Boolean;
拡張組込みオブジェクトをインポートします。
procedure ImportObject(ObjectName: String; ObjectClass: TJObjectClass);
2.プロパティ
import宣言での検索パス。
property LibraryPath: TStringList
コンパイル済バイナリを使用する。
property CompiledBinary: Boolean
3.イベント
標準出力
property OnStdout: TStringEvent
標準エラー
property OnStderr: TStringEvent
標準入力
property OnStdin: TReadStringEvent
デバッグ出力
property OnDebugout: TStringEvent
スクリプト実行時にオブジェクトが作成されたとき呼ばれます。
property OnNewObject: TNewObjectEvent
実行開始
property OnRun: TNotifyEvent
実行終了
property OnDone: TNotifyEvent
スクリプトの文(statement)を一つ実行するたびに呼ばれます。スクリプトの中断などに使用します。
property OnStep: TStepEvent
4.実行例
begin
//実行
if DMonkey1.Compile('println("hello,world");') then
DMonkey1.Run;
end;
var
retval: TJValue;
begin
//関数呼び出し
if DMonkey1.Compile('function f(a){ println(a);}') then
begin
//実行する必要があります
DMonkey1.Run;
//呼び出し
DMonkey1.CallFunction('f',['hello'],retval);
end;
end;
5.条件定義 {$DEFINE }
- NO_EXTENSION ... 拡張Objectを使用しない。
- NO_SOCKET ... Socket Objectを使用しない。
- NO_ACTIVEX ... Activex Objectを使用しない。
- NO_DYNACALL ... DynaCall Objectを使用しない。
- NO_GUI ... GUI Objectを使用しない。
- NO_WSH ... WScript Objectを使用しない。
- NO_VCL ... VCL Objectを使用しない。
- MB_NO_OWNER ... alert()などでのダイアログをタスクバーに表示する。
言語仕様について
DMonkeyの言語仕様について簡単に解説します。
式
式については JavaScriptとほぼ同じです。
変数はvar宣言を使用するとローカル、使用しない場合はグローバル変数になります。
var宣言を使用する方が効率的になります。
未定義の変数を使用した場合には例外が発生します。
文字列は ' で囲むとエスケープ文字を展開しません。
文
文は以下が使用できます。
if..else, while, do..while, for, for..in, continue,
break, return, try, throw, catch, finally, with, switch-case-default
※0.2.0からfor..in文が変更になりました
Array,Strings,HtmlParserの扱いが変更になっています。
例(1) 0.1.7まで
a = ['a','b','c','d'];//配列
for(i in a) //iにはインデックスが入る
println(a[i]);
例(2) 0.2.0から
a = ['a','b','c','d'];//配列
for(v in a) //vには要素が直接入る
println(v);
※0.2.1からfor..in文が変更になりました
例(1) 0.2.1から
a = ['a','b','c','d'];//配列
for(i in a) //iにはインデックスが入る
println(a[i]);
例(2) 条件定義
@set @VERSION7 = true //条件定義
a = ['a','b','c','d'];//配列
for(v in a) //vには要素が直接入る
println(v);
条件コンパイル文
条件コンパイルは以下のシンボルが使用できます。
@set @VERSION7 = true //デフォルトはfalse、trueにするとfor..in文で配列の要素を変数に入れる
@set @SHORT_CIRCUIT = false //デフォルトはtrue、falseにすると条件文で完全評価
宣言
宣言は以下が使用できます。
function, var, class, import, static
オブジェクト
オブジェクトは以下が使用できます。(個別については後述)
Object, Global, Array, String, RegExp, Number, Boolean, Date,
Math, Strings, File, Directory,TCPSocket, HTTP, HTTPS, Cookie, Response, Mail,
SMTP, POP3, URL, CRC, Dialog, Mutex, Win32, Base64, Ini, ActiveXObject, Keyboard, Mouse, Clipboard, Dynacall,
RegIni, HtmlTag, HtmlParser, FTP, WScript, Enumerator, CheckListBox
, Bytes, Encoding, FileReader, FileWriter
VCLオブジェクト
仕様はDelphi6のヘルプを参照してください。
VCLForm, VCLEdit, VCLButton, VCLMemo, VCLLabel, VCLTimer,
VCLMenuItem, VCLMainMenu, VCLPopupMenu, VCLCheckBox, VCLRadioButton,
VCLListBox, VCLComboBox, VCLGroupBox, VCLRadioGroup, VCLPanel, VCLSplitter,
VCLCheckListBox, VCLImage, VCLTabControl, VCLTabSheet, VCLPageControl,
VCLProgressBar, VCLTreeView, VCLListView, VCLStatusBar, VCLToolButton, VCLToolBar, VCLCoolBar,
VCLAction, VCLOpenDialog, VCLSaveDialog, VCLFontDialog, VCLFindDialog, VCLReplaceDialog,
VCLSpinEdit, VCLUpDown
クラス定義
既存のオブジェクトを継承して新しいオブジェクトを作ることができます。
例(1)
class Foo{ //指定しない場合は Objectを継承
aaa = 10;
function f1(a){
Global.println(a + ',world'); //Globalが必要になります
}
}
class Bar extends Foo{
bbb = 20;
function f2(){
Global.println(this.aaa);
}
}
class Hoge extends Bar{
ccc = new Array(5,6,7,8,9,10);
function f3(){
Global.println(this.bbb);
}
}
a = new Hoge;
println(a.getProperties());
a.f1('hello');
a.f2();
a.f3();
for(i in a.ccc)
println(i);
例(2)
class IE {
ie = new ActiveXObject('InternetExplorer.Application');
win32 = new Win32;
function IE(){ //コンストラクタを指定すると作成時に呼ばれます。
if(arguments.length > 0)
this.ie.Visible = arguments[0];
else
this.ie.Visible = true;
}
function goGoogle(){
this.ie.Navigate('http://www.google.com/intl/ja/');
}
function go(url){
this.ie.Navigate(url);
while(this.ie.Busy)
this.win32.processMessages(); //待機
}
function quit(){
this.ie.Quit();
}
}
ie = new IE(true);
//ie.goGoogle();
for(;;){
a = prompt('URLを指定してください');
if(a)
ie.go(a);
else{
ie.quit();
exit();
}
}
例外
未定義の値を参照したりエラーの場合などには、
例外が発生してスクリプトは終了します。
例外後も継続して実行する場合には try..catchを使用します。
例(1)
println(a); //未定義の値を参照したため例外が起きます。
println('hello'); //ここは実行されません
例(2) catch文は例外が起きた場合にのみ実行します。
try{
println(a); //例外が起きるとcatch文へ移動します。
}
catch(e){
println('error: ' + e);
}
例(3) finally文を使うと例外に関係なく常に実行します。
try{
println(a); //例外が起きるとcatch文へ移動します。
}
catch(e){
println('error: ' + e);
}
finally{
println('hello');
}
インポート
他のスクリプトファイルをインポートすることができます。
例(1) hello.dmsのファイル名で保存します。
println('hello,');
a = 'world';
例(2) 名前空間なしでインポートします。
import hello.*;
println(a);
例(3) 名前空間ありでインポートします。
import hello;
println(hello.a);
println(a); //現在の名前空間に a が存在しない場合
例(4) 名前空間ありでインポートします。
import hello;
a = 10;
println(hello.a);
println(a); //現在の名前空間に a が存在する場合
組込みオブジェクト
DMonkeyでは組込みオブジェクトによって機能を拡張していきます。
Object
すべての基本となるオブジェクト。ハッシュテーブルの機能を持ちます。
- hasKey(文字列) ... 文字列のkeyを持っているかチェックします。返値は Boolean値。
- hasOwnProperty(文字列) ... hasKeyと同じ。
- removeKey(文字列) ... 文字列のkeyを削除します。返値は Boolean値。
- getKeys() ... 全てのkeyを改行で区切られた文字列で返す。
- getProperties() ... 全てのpropertyを配列型(Array)で返す。
- getMethods() ... 全てのmethodを配列型(Array)で返す。
例(1)
a = new Object;
a['hello'] = 'world';
println(a['hello']);
println(a.hello);
println(a.hasKey('hello'));
例(2)
obj = {hello : 'world', foo : 10}; //object生成
println(obj.hello);
println(obj.foo);
例(3)
obj = {hello : 'world', foo : 10}; //object生成
keys = obj.getKeys();
for(i in keys)
println(keys[i]);
例(4)
function _inc(){
return this.counter += 1;
}
function _dec(){
return this.counter -= 1;
}
//擬似的なオブジェクト定義
a = {counter: 0,
inc: _inc,
dec: _dec
};
b = {counter: 0,
inc: _inc,
dec: _dec
};
for(i = 0; i < 10; i++)
a.inc();
for(i = 0; i < 10; i++)
b.dec();
println(a.counter);
println(b.counter);
Global
カレントオブジェクト。スクリプトは Globalオブジェクト内で実行されます。
グローバルオブジェクト Globalがスクリプトに最初から存在します。
- escape(文字列) ... 文字列をエンコードします。返値は文字列。
- unescape(文字列) ... 文字列をデコードします。返値は文字列。
- eval(文字列) ... 文字列をスクリプトとして実行します。返値は整数値。
- isFinite(値) ... 値が数値かどうかチェックします。
- isNaN(値) ... 値がNaNかどうかチェックします。
- parseFloat(値) ... 値を浮動小数点に変換します。返値は数値。
- parseInt(値) ... 値を整数値に変換します。返値は整数値。
- print(値) ... 値を標準出力に出力します。
- println(値) ... 値を標準出力に改行を付けて出力します。
- alert(文字列) ... 警告ダイアログを表示します。
- prompt(文字列A,文字列B) ... プロンプトを表示します。Aはメッセージ、Bは初期値。返値は文字列かnull。
- confirm(文字列) ... 確認ダイアログを表示します。返値はBoolean。
- textArea(文字列A,文字列B) ... テキストエリアを表示します。Aはメッセージ、Bは初期値。返値は文字列かnull。
- scriptEngine() ... スクリプトエンジンの名前。
- scriptEngineBuildVersion() ... スクリプトエンジンのビルド番号。
- scriptEngineMajorVersion() ... スクリプトエンジンのメジャーバージョン。
- scriptEngineMinorVersion() ... スクリプトエンジンのマイナーバージョン。
- scriptEngineVersion() ... スクリプトエンジンのバージョン。
- read(整数値) ... 標準入力から整数値分読み込んで文字列を返します。
- readln() ... 標準入力から1行読み込みます。
- isConsole() ... コンソールで実行されているのかどうか。
- encodeURI(文字列) ... 文字列を一部の文字を除きURLエンコードします。返値は文字列。
- encodeURIComponent(文字列) ... 文字列をURLエンコードします。返値は文字列。
- decodeURI(文字列) ... 文字列を一部の文字を除きURデコードします。返値は文字列。
- decodeURIComponent(文字列) ... 文字列をURLデコードします。返値は文字列。
- format(文字列,値1[,値2,[値3,...]]]) ... 形式文字列。
- sprintf(文字列,値1[,値2,[値3,...]]]) ... 形式文字列。
- formatFloat(文字列,数値) ... 数値・形式文字列。
- printf(文字列,値1[,値2,[値3,...]]]) ... 形式文字列を出力。
- printfln(文字列,値1[,値2,[値3,...]]]) ... 形式文字列を改行出力。
- eventLoop() ... VCLのイベントループに入る。
- terminate() ... VCLのイベントループを終了する。
- isNull(値) ... 値がnullかどうかチェック。
- isUndefined(値) ... 値が未定義かどうかチェック。
- nameOf(オブジェクト) ... オブジェクト名を返す。返値は文字列かnull。
- arguments ... Array。起動時の引数が入った配列。
- applicationHandle ... アプリケーションのハンドル。
- mainFormHandle ... メインフォームのハンドル。
- platform ... OSの種類を文字で返す。'nt'|'windows'|'win32s'
例(1)
a = 'あいうえお';
b = escape(a);
println(b);
println(unescape(b));
例(2)
ret = eval('10*10');
println(ret);
例(3)
a = 10;
if (isFinite(a))
println('number');
例(4)
a = '0.9';
b = 0.1;
println(a + b);
println(parseFloat(a) + b);
例(5)
a = '0xa'; //10
b = 1;
println(a + b);
println(parseInt(a) + b);
例(6)
alert('hello');
if(confirm('prompt?'))
a = prompt('prompt','');
else
a = textArea('textArea','');
if(a)
println(a);
else {
println('exit');
exit();
}
例(7)
s = ""; // 文字列を連結します。
s += scriptEngine() + " Version ";
s += scriptEngineMajorVersion() + ".";
s += scriptEngineMinorVersion() + ".";
s += scriptEngineBuildVersion();
println(s);
Array
配列オブジェクト。存在しない要素の値をgetしようとすると例外が発生します
- new Array(整数) ... 整数分の配列を作成します。
- new Array(値,値,...) ... 配列を値で初期化します。
- delete(整数) ... 整数番目の要素を削除します。
- assign(Array)... 配列をArrayからコピー。
例(1)
a = new Array;
a.add(1);
a.add(2);
a.add(3);
println(a.toString());
println(a.reverse().toString());
for(i = a.length - 1; i >= 0; i--)
a.delete(i);
for(i = 0;i < 10;i++)
a.add(i);
function f(a,b){ return b - a;}
println(a.toString());
a.sort(f);
println(a.toString());
c = new Array(a);
for(i in c[0])
println(c[0][i]);
a.clear();
println(c[0].length);
例(2)
a = [5,4,3,2,1,0]; //配列生成
for(i in a)
println(a[i]);
Number
数値オブジェクト。
グローバルオブジェクト Numberがスクリプトに最初から存在します。
- toString(整数値) ... 整数値は変換する進数を指定。10,16,8,2に対応。
- toChar() ... 数値の文字コードを文字に変換。
- POSITIVE_INFINITY ... 正の無限大。
- NEGATIVE_INFINITY ... 負の無限大。
- number ... Numberオブジェクトの内部浮動小数点値へアクセス。
- int ... Numberオブジェクトの内部整数値へアクセス。
- asChar ... Numberオブジェクトの内部整数値を文字で取得、設定。
例(1)
a = 100;
println(a.toString(16));
println(0x41.toChar());
例(2)
n = new Number(0x41);
println(n.asChar);
n.asChar = 'B';
println('0x' + n.toString(16));
Boolean
真偽オブジェクト。
- toString() ... 文字列に変換した値を返します。
- bool ... Booleanオブジェクトの内部値へアクセス。
例(1)
a = true;
b = new Boolean(true);
println(a.toString()); //true
println(b); //true
String
文字列オブジェクト。
グローバルオブジェクト Stringがスクリプトに最初から存在します。
配列として各文字を得ることが出来ます。
※0.2.2から内部コードがWideStringに変更になりました。DynaCallなどではStringBufferを使ってください。
オリジナルの実装からtoJIS(), toSJIS(), toEUC(), toUTF8(), fromJIStoSJIS(), fromJIStoEUC(), fromEUCtoSJIS(), fromEUCtoJIS(), fromSJIStoEUC(), fromSJIStoJIS(), fromUTF8toSJIS() の各メソッドが削除されています。
- crypt(文字列) ... 文字列をsaltにして暗号化します。crypt(3)。
- trim()... 前後の制御・空白文字を削除します。
- trimLeft()... 前の制御・空白文字を削除します。
- trimRight()... 後の制御・空白文字を削除します。
- localeCompare(文字列)... 文字列と比較して-1,0,1を返します。
- sizeOf() ... 文字のバイト数を返します。
- toHiragana() ... ひらがなへ変換。
- toKatakana() ... カタカナへ変換。
- multiply(数値) ... 文字列を数値回数連結して返します。
- text ... Stringオブジェクトの内部値へアクセス。
例(1)
例(1)は削除されたメソッドを利用しているため利用出来ません。
a = 'あいうえお';
b = a.toEUC();
c = a.toJIS();
println(b);
println(c);
println(b.fromEUCtoSJIS());
println(c.fromJIStoSJIS());
例(2)
s = new String('あいうえお');
println(s.toString());
例(3)
s = 'abcdfghijklmn';
for(i = 0; i < s.length; i++)
println(s[i]);
例(4)
pass = prompt('パスワードを入力してください','');
//saltは最初の二文字
salt = pass;
/*chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTQVWXYZ';
salt = chars[Math.floor(Math.random() * chars.length)] +
chars[Math.floor(Math.random() * chars.length)];
*/;
//暗号化
alert(c = pass.crypt(salt));
a = prompt('確認のパスワードを入力してください','');
if(a){
//暗号化された文字をsaltに使う
if(c == a.crypt(c))
alert('正解です');
else
alert('違います');
}
RegExp
正規表現オブジェクト。
グローバルオブジェクト RegExpがスクリプトに最初から存在します。
- new RegExp(文字列A,文字列B) ... Aは正規表現、Bはオプション(igm)
- exec(文字列) ... 文字列を正規表現とマッチングします。返値はマッチ文字列の配列。
- test(文字列) ... 文字列を正規表現とマッチングします。返値はBoolean。
- replace(文字列A,文字列B) ... Aと正規表現がマッチする文字列をBに変換します。
- split(文字列,整数値) ... 文字列を正規表現で分割します。返値は分割した文字列の配列。整数値は配列の制限数。
- ignoreCase ... Boolean。文字のケースを無視するかどうか。
- global ... Boolean。連続でマッチングをするかどうか。
- multiline ... Boolean。複数行。
例(1)
re = new RegExp(';');
a = '100;200;300;400';
b = re.split(a);
for(i in b)
println(b[i]);
例(2)
re = new RegExp('a+','g');
a = 'akgatranavayakhahjajatdaa';
b = re.exec(a);
for(i in b)
println(b[i]);
Math
数学オブジェクト。
グローバルオブジェクト Mathがスクリプトに最初から存在します。
Date
日付オブジェクト。
グローバルオブジェクト Dateがスクリプトに最初から存在します。
月は 1 ~ 12になります。
File
ファイルオブジェクト。ファイルはバイナリモードで開きます
テキストモードは後述するStringsオブジェクトを使用します。
- new File(文字列) ... 文字列はファイル名を指定します。
- open(文字列) ... ファイルを開きます。文字列はオプションで書き込み(w)読み込み(r)排他処理(d)を指定します。開けなかった場合は例外。
- isOpened() ... ファイルが開かれているかどうかの Boolean値。
- read(整数値) ... 整数値分読み込んで文字列を返します。
- write(文字列) ... 文字列を書き込みます。
- flush() ... ファイルをフラッシュします。
- eof() ... ファイルの最後ならば trueを返します。
- exists() ... ファイルが存在すれば trueを返します。
- renameTo(文字列) ... 文字列ファイル名にリネームします。
- copyTo(文字列) ... 文字列ファイル名にコピーします。
- canRead() ... 読み込み可能ならば true。
- canWrite() ... 書き込み可能ならば true。
- seek(整数値) ... ファイルの位置を移動します。負の値の場合は length + 整数値になります。
- extractName() ... ファイル名からパスの除いた部分を取り出します。
- extractDrive() ... ファイル名からドライブ名を取り出します。
- extractDir() ... ファイル名からパスの部分を取り出します。
- extractPath() ... ファイル名から最後に\のついたパス部分を取り出します。
- extractExt() ... ファイル名から拡張子を取り出します。
- changeExt(文字列) ... ファイル名を文字列の拡張子に変換したファイル名を返します。
- expandUNCFilename() ... UNCファイル名へ変換したものを返す。
- extractShortPathName() ... ファイル名を短いファイル名へ変換したものを返す。
- lastModified ...Date。更新日時。
例(1)
f = new File('temp.txt');
try{
f.open('w'); //書き込みモードで開く
f.writeln('hello,');
f.write('world');
}
catch(e){
println(e);
}
finally{
f.close();
}
例(2)
f = new File('temp.txt');
try{
f.open('r'); //読み込みモードで開く
s = f.read();//すべて読む
println(s);
f.seek(0); //最初に戻る
s = f.readln(); //1行読む
println(s);
}
catch(e){
println(e);
}
finally{
f.close();
}
例(3)
f = new File('c:\program files\irvine\irvine.exe');
println(f.extractName());
println(f.extractPath());
println(f.extractDir());
println(f.extractDrive());
println(f.extractExt());
println(f.changeExt('.jpg'));
Directory
ディレクトリオブジェクト。
- new Directory(文字列) ... 文字列にディレクトリを指定します。
- exists() ... 存在していれば true。
- changeTo(文字列) ... カレントディレクトリを文字列に変更します。
- findFirst(文字列) ... ディレクトリ内をワイルドカードで検索します。返値は文字列かnull。
- findFirstFile(文字列) ... ディレクトリ内をワイルドカードでファイルを検索します。返値は文字列かnull。
- findFirstDir(文字列) ... ディレクトリ内をワイルドカードでディレクトリを検索します。返値は文字列かnull。
- findNext() ... 続けて検索します。返値は文字列かnull。
- findNextFile() ... 続けてファイルを検索します。返値は文字列かnull。
- findNextDir() ... 続けてディレクトリを検索します。返値は文字列かnull。
- findClose() ... 検索を終了します。
- includePathDelimiter() ... 最後に\の付いたディレクトリ名を返す。
- excludePathDelimiter() ... 最後の\を削除したディレクトリ名を返す。
- expandUNCFilename() ... UNCファイル名へ変換したものを返す。
- clear([Undo]) ... 全てのファイルを削除する。Undoがtrueでごみ箱に移動する。
- findFiles(文字列) ... Strings。ファイルをワイルドカードで検索する。
- files ... Strings。ディレクトリ内のファイル。
- directories ... Strings。ディレクトリ内のディレクトリ。
例(1)
d = new Directory('.\temp');
if(! d.exists())
d.make();
例(2)
d = new Directory('.\temp');
if(d.exists())
d.remove();
例(3)
function checkpath(dirname){
if(dirname.lastIndexOf('\') == (dirname.length - 1))
return dirname;
else
return dirname + '\';
}
function checkdot(dirname){
return ((dirname != '.') && (dirname != '..'));
}
function search(dirname){
dirname = checkpath(dirname);
println(dirname);
d = new Directory(dirname);
n = d.findFirstFile(); //ファイル検索
try{
if(n){
println("\t" + n);
for(;;){
n = d.findNextFile();
if(n)
println("\t" + n);
else
break;
}
}
}
finally{
d.findClose();
}
n = d.findFirstDir(); //フォルダ検索
try{
if(n){
if (checkdot(n))
search(dirname + n); //再帰検索
for(;;){
n = d.findNextDir();
if(n){
if (checkdot(n))
search(dirname + n);//再帰検索
}
else
break;
}
}
}
finally{
d.findClose();
}
}
search('.');
例(4)
d = new Directory('c:\program files\irvine');
println(d.includePathDelimiter());
println(d.excludePathDelimiter());
Strings
文字列リストオブジェクト。TStringListのラッパーです。
- add(文字列) ... 文字列をリストの最後に加えます。
- insert(整数値,文字列) ... 文字列を整数値の要素に挿入します。
- delete(整数値) ... 整数値の要素を削除します。
- indexOf(文字列) ... 文字列と一致する要素の整数値を返します。
- saveToFile(文字列, [Encoding]) ... 文字列のファイルに保存します。
- loadFromFile(文字列, [Encoding]) ... 文字列のファイルを読み込みます。
- assign(Strings) ... 別のStringsオブジェクトからすべてコピーします。
- addStrings(Strings) ... 別のStringsオブジェクトから要素をすべて加えます。
- text ... 文字列。文字列リストを1つの文字列にして返します。
- commaText ... 文字列。文字列リストを , で区切られた1つの文字列にして返します。
- sorted ... Boolean。文字列リストをソート済みにするかどうか。
- caseSensitive ... Boolean。大文字小文字を区別するかどうか。
- duplicates ... Boolean。ソートされたリストに重複文字列を追加できるかどうか。
例(1)
sl = new Strings;
sl.add('aaa');
sl.add('bbb');
sl.insert(0,'ccc');
sl.insert(1,'ddd');
println(sl.text);
println(sl.commaText);
sl.saveToFile('temp.txt');
例(2)
sl = new Strings;
sl.loadFromFile('temp.txt');
for(i in sl)
println(sl[i]);
sl.clear();
Win32
Win32オブジェクト。Win32APIなど。
- sleep(整数値) ... 整数値ミリ秒処理を止めます。
- winExec(文字列) ... 文字列をコマンドとして実行します。成功すればtrue。
- shellExecute(文字列A,文字列B,文字列C,文字列D) ... ファイルを関連付けで実行します。Aが操作('open'など)、Bが実行ファイル、Cがパラメータ(無指定でも可)、Dがワークディレクトリ(無指定でも可)。成功すればtrue。
- getTickCount() ... OSが起動してからのミリ秒数を得ます。
Ini
Iniオブジェクト。Iniファイルを処理します。TIniFileのラッパーです。
- new Ini(文字列) ... 文字列のIniファイルを指定します。
- deleteKey(文字列A,文字列B) ... AセクションのBのキーを削除します。
- eraseSection(文字列) ... 文字列のセクションを削除します。
- readSection(文字列) ... 文字列のセクションから全てのキーを読みStringsオブジェクトを返します。
- readSections() ... 全てのセクションを読みStringsオブジェクトを返します。
- sectionExists(文字列) ... 文字列のセクションが存在すれば true。
- write(文字列A,文字列B,文字列C) ... AセクションのBキーにCを書き込みます。
- read(文字列A,文字列B,文字列C) ... AセクションのBキーから読み込み文字列を返します。失敗した場合はCを返します。
- update() ... write()した内容をファイルに書き込む。
例(1)
ini = new Ini('iria.ini');
secs = ini.readSections();
for(i in secs){
println(secs[i]);
keys = ini.readSection(secs[i]);
for(j in keys){
println(' ' + keys[j] + '=' + ini.read(secs[i],keys[j],''));
}
}
RegIni
レジストリオブジェクト。TRegIniFileのラッパーです。
- new RegIni(文字列) ... HKEY_CURRENT_USERの下の文字列のキーを開きます。
- deleteKey(文字列A,文字列B) ... AセクションのBのキーを削除します。
- eraseSection(文字列) ... 文字列のセクションを削除します。
- readSection(文字列) ... 文字列のセクションから全てのキーを読みStringsオブジェクトを返します。
- readSections() ... 全てのセクションを読みStringsオブジェクトを返します。
- sectionExists(文字列) ... 文字列のセクションが存在すれば true。
- write(文字列A,文字列B,文字列C) ... AセクションのBキーにCを書き込みます。
- read(文字列A,文字列B,文字列C) ... AセクションのBキーから読み込み文字列を返します。失敗した場合はCを返します。
例(1)
reg = new RegIni('\software\wildforce\irvine');
println(reg.readSections().text);
if(reg.sectionExists('path'))
println(reg.read('path','Application',''));
CRC
CRCオブジェクト。
- calc(文字列) ... 文字列のCRCを計算します。
- calcFile(文字列) ... 文字列のファイルのCRCを計算します。
- CRC16 ... 整数値。計算結果の CRC16
- CRC32 ... 整数値。計算結果の CRC32
例(1)
crc = new CRC;
crc.calc('あいうえお');
println(crc.CRC16.toString(16));
println(crc.CRC32.toString(16));
Base64
Base64オブジェクト。Base64エンコード、デコードを行います。
- encode(文字列) ... 文字列をBase64エンコードした値を返します。
- decode(文字列) ... 文字列をBase64デコードした値を返します。
- encodeHeader(文字列) ... 文字列をメールヘッダの形式にエンコードします。
- decodeHeader(文字列) ... 文字列をメールヘッダの形式からデコードします。
例(1)
b64 = new Base64;
a = 'あいうえお';
b = b64.encode(a);
println(b);
println(b64.decode(b));
例(2)
b64 = new Base64;
a = 'あいうえお';
c = b64.encodeHeader(a);
println(c);
d = b64.decodeHeader(c);
println(d);
Dialog
Dialogオブジェクト。
- new Dialog(文字列) ... フィルタを文字列で初期化します。
- openFile(文字列A,文字列B) ... ファイル選択ダイアログを開きます。Aはタイトル、Bはデフォルトファイル名。返値はファイル名かnull。
- openFiles(文字列A,文字列B) ... 複数ファイル選択ダイアログを開きます。Aはタイトル、Bはデフォルトファイル名。返値はファイル名の文字列リスト。
- saveFile(文字列A,文字列B) ... ファイル保存選択ダイアログを開きます。Aはタイトル、Bはデフォルトファイル名。返値はファイル名かnull。
- openFolder(文字列A,文字列B) ... フォルダ選択ダイアログを開きます。Aはタイトル、Bはデフォルトフォルダ名。返値はファイル名かnull。
- filters ... Strings。’説明|拡張子’形式のフィルタの入った文字列リスト。
例(1)
d = new Dialog('テキストファイル *.txt|*.txt','すべてのファイル|*.*');
println(d.openFile('load'));
println(d.saveFile('save'));
println(d.openFolder());
s = d.openFiles();
for(i in s)
println(s[i]);
Mutex
同期オブジェクト。スレッド、プロセスを越えて同期をとります。
- new Mutex(文字列) ... 文字列の名前を持つMutexオブジェクトを作成します。
- lock() ... ロックします。他のMutexオブジェクトがロックしていた場合はロック解除まで停止します。
- tryLock() ... ロックします。他のMutexオブジェクトがロックしていた場合はタイムアウトまで停止します。
- timeout ... ロックのタイムアウトをミリ秒で指定します。
- existed ... すでに同じ名前のMutexオブジェクトが存在すれば true。
例(1)
mutex = new Mutex('sakura');
if (mutex.existed)
println('えんいー');
URL
URL情報オブジェクト。
- new URL(文字列) ... 文字列にURLを指定します。
- expand(Path) ... 現在のURLを基準にPathを絶対Pathに変換して返す。
- directory ... 文字列。パスからファイル名を除いたディレクトリ名。
- filename ... 文字列。パスからディレクトリ名を除いたファイル名。
例(1)
u = new URL('http://127.0.0.1/dir/index.html?qqq');
println(u.url);
println(u.protocol);
println(u.host);
println(u.path);
println(u.dir);
println(u.filename);
println(u.query);
Cookie
HTTPのCookieオブジェクト。Responseオブジェクトの一部として使われます。
クッキーのデータ(name=value)を配列アクセス可能。
- parse(URL,CookieText) ... クッキーを解析する。
- length ... クッキーのデータ(name=value)の数。
Response
HTTPのResponseオブジェクト。HTTPとHTTPSの一部として使われます。
- version ... 文字列。サーバのHTTPバージョン。
HTTP
HTTPオブジェクト。
- get(文字列) ... 文字列のURLをGETして文字列を返します。
- getFile(文字列A,文字列B) ... AのURLをGETしてBのファイルに保存します。
- post(文字列A,文字列B) ... AのURLに接続して、BをPOSTします。
- head(文字列) ... 文字列のURLをHEADします。
- request(文字列A,文字列B,文字列C) ... AのメソッドでBのURLに接続します。CはPOSTする場合のデータ。
- response() ... サーバからのレスポンスを得ます。
- disconnect() ... サーバから切断します。
- capture(文字列) ... 文字列のファイルにデータを保存します。
- readln() ... データを1行読み込んで文字列を返します。
- read(整数値) ... 整数値分のデータを読み込みます。指定しない場合は全て読み込みます。
- requestHeader ... Object。リクエストのヘッダを指定します。
- responseHeader ... Response。レスポンスヘッダが入ります。
- version ... 文字列。HTTPのバージョン
- autoRedirect ... Boolean。自動でリダイレクトするかどうか。
- proxy ... 文字列。Proxyを 127.0.0.1:8080の形式で指定。
- timeout ... 整数値。タイムアウトを秒数で指定。
- debug ... Boolean。trueにするとデバッグ出力をします。
- bytesTotal ... 書き込み読み込みバイト数。
- onConnect ... 接続イベント。function(sender){}
- onDisconnect ... 切断イベント。function(sender){}
- onError ... ソケットエラーイベント。function(sender,errorcode,errormsg){}
- onRead ... 読み込みイベント。function(sender,bytes,abort){}
- onWrite ... 書き込みイベント。function(sender,bytes,abort){}
- onStatus ... 情報イベント。function(sender,msg){}
- onSuccess ... 成功イベント。function(sender){}
- onFailure ... 失敗イベント。function(sender){}
- onRequest ... リクエストイベント。function(sender){}
- onResponse ... レスポンスイベント。function(sender){}
例(1)
u = new URL('http://127.0.0.1/index.html');
http = new HTTP;
println(http.get(u.url));
http.getFile(u.url,u.filename);
例(2)
http = new HTTP;
http.requestHeader['User-Agent'] = 'dmonkey';
http.requestHeader['Referer'] = 'referer';
http.requestHeader['Cookie'] = 'name=value';
try{
http.request('GET','http://127.0.0.1/');
http.response();
if(http.responseHeader.code == 200){
while(true){
s = http.readln();
if(s)
println(s);
else
break;
}
}
}
finally{
http.disconnect();
}
HTTPS
HTTPSオブジェクト。HTTPと互換なので省略。
HtmlTag
HTMLのタグ。HtmlParserで使用されます。
HtmlParser
HTML解析。解析結果は木構造ではなく単純な線構造になります。
- parse(文字列) ... 文字列のHTMLを解析します。
- parseFile(文字列) ...文字列のファイルを解析します。
例(1)
a = new HtmlParser;
a.parse('<a href="http://host/">abc</a>');
println(a.length);
println(a.html);
println(a.text);
for(i=0; i<a.length;i++){
println(a[i]);
}
for(i in a){
for(ii in a[i]){
println(ii + ': ' + a[i][ii]);
}
}
FileProperty
ファイルプロパティオブジェクト。
- attribute ... 整数値。UNIX形式のファイル権限(777,655等の形式)
- fileType ... 文字。[d]がディレクトリ、[-]がファイル、[l]がリンク。
- lastModified ... Date。更新日。
FTP 未サポートクラス
FTPオブジェクト。
- login(文字列A,文字列B) ... AがUserId、BがPasswordを指定して接続します。
- printWorkDir() ... 現在のディレクトリを取得します。
- changeDir(文字列) ... カレントディレクトリを変更します。
- makeDir(文字列) ... ディレクトリを作成します。
- removeDir(文字列) ... ディレクトリを削除します。
- list() ... ファイルリストとしてFilePropertyの配列を取得します。
- nlist() ... ファイルリストとしてFilePropertyの配列を取得します。
- delete(文字列) ... ファイルを削除します。
- rename(文字列A,文字列B) ... ファイル名をAからBに変更します。
- findFiles(文字列A,文字列B,Bool値) ... Aのディレクトリの中からBのワイルドカードで指定したファイル名をStringsで取得します。Bool値は再帰するかどうか。
- download(文字列A,文字列B) ... AのリモートファイルをBのローカルファイルに保存します。
- downloadRestore(文字列A,文字列B) ... AのリモートファイルをBのローカルファイルにリジュームします。
- upload(文字列A,文字列B) ... AのローカルファイルをBのファイル名でアップロードします。
- uploadAppend(文字列A,文字列B) ... AのローカルファイルをBのファイルに追記アップロードします。
- uploadRestore(文字列A,文字列B,整数値) ... Aのローカルファイルの整数値の位置からBのファイルに追記します。
- uploadUnique(文字列) ... ローカルファイルを確実にアップロードします。
- type(['I','A','B']) ... 転送モード切り替え。I(イメージ)A(アスキー)B(バイト)
- command(文字列) ... コマンドを送る。
- timeout ... 整数値。タイムアウトを秒数で指定。
- debug ... Boolean。trueにするとデバッグ出力をします。
- currentDir ... 文字列。現在のカレントディレクトリ。
- passiveMode ... Boolean。パッシブモードを使用する。
- proxy ... 文字列。プロキシ名をhost:portの形式で指定する。
- bytesTotal ... 書き込み読み込みバイト数。
- onConnect ... 接続イベント。function(sender){}
- onDisconnect ... 切断イベント。function(sender){}
- onError ... ソケットエラーイベント。function(sender,errorcode,errormsg){}
- onRead ... 読み込みイベント。function(sender,bytes,abort){}
- onWrite ... 書き込みイベント。function(sender,bytes,abort){}
- onStatus ... 情報イベント。function(sender,msg){}
- onSuccess ... 成功イベント。function(sender,kind){}
- onFailure ... 失敗イベント。function(sender,notthrow,kind){}
例(1)
ftp = new FTP;
ftp.debug = true;
ftp.host = '127.0.0.1';
ftp.userid = 'test';
ftp.password = 'test';
ftp.connect();
//ftp.login('test','test');
try{
ftp.passiveMode = true;
list = ftp.list();
for(i in list)
println(list[i]);
println(ftp.printWorkDir());
println(ftp.currentDir);
ftp.makeDir('test');
ftp.changeDir('test');
println(ftp.printWorkDir());
ftp.type('I');
ftp.upload('test.txt','test.txt');
ftp.rename('test.txt','t.txt');
ftp.delete('t.txt');
ftp.changeDir('..');
ftp.removeDir('test');
ff = ftp.findFiles(ftp.currentDir,'*.txt',true);
println(ff.text);
if(ff.count > 0)
ftp.download(ff[0],ff[0]);
list = ftp.nlist();
for(i in list)
println(list[i]);
} finally{
ftp.disconnect();
//ftp.quit();
}
TCPSocket 未サポートクラス
TCP Socketオブジェクト。
- read(整数値) ... 整数値分読み込み文字列を返します。指定しなかった場合はすべて読み込みます。
- write(文字列) ... 文字列を書き込みます。
- writeln(文字列) ... 文字列を改行付きで書き込みます。
- capture(文字列) ... データを読み込み文字列のファイルに書き込みます。
- sendFile(文字列) ... 文字列のファイルをSocketに書き込みます。
- accept() ... Acceptして新しいTCPSocketオブジェクトを返します。
- isConnected() ... 接続していれば true。
- timeout ... 整数値。タイムアウトを秒数で指定。
- debug ... Boolean。trueにするとデバッグ出力をします。
- bytesTotal ... 書き込み読み込みバイト数。
- onConnect ... 接続イベント。function(sender){}
- onDisconnect ... 切断イベント。function(sender){}
- onError ... ソケットエラーイベント。function(sender,errorcode,errormsg){}
- onRead ... 読み込みイベント。function(sender,bytes,abort){}
- onWrite ... 書き込みイベント。function(sender,bytes,abort){}
- onStatus ... 情報イベント。function(sender,msg){}
例(1)
s = new TCPSocket;
s.host = '127.0.0.1';
s.port = 9801;
try{
s.connect();
s.writeln('SEND SSTP/1.1');
s.writeln('Sender: DMonkey');
s.writeln('Script: \h\s0えんいー。\e');
s.writeln('Charset: Shift_JIS');
s.writeln('');
}
finally{
s.disconnect();
}
Mail 未サポートクラス
Mailデータオブジェクト。STMPとPOP3で使用します。
- number ... 整数値。POP3でのメール番号。
- attachments ... Strings。添付ファイルの文字列リスト。
- header ... 文字列。読み込み専用のメールヘッダ。
- body ... 文字列。読み込み専用のメールのボディ。
POP3 未サポートクラス
POP3オブジェクト。メールの受信に使用します。
- getMail(整数値) ... 整数値の番号のメールを取得します。最初の番号は 1なので注意。
- getSummary(整数値) ... 整数値の番号のメールヘッダを取得します。最初の番号は 1なので注意。
- delete(整数値) ... 整数値の番号のメールを削除します。最初の番号は 1なので注意。。
- attachPath ... 文字列。添付ファイルの保存場所を指定。
- deleteOnRead ... Boolean。メールを取得した後に削除するかどうか。
- timeout ... 整数値。タイムアウトを秒数で指定。
- debug ... Boolean。trueにするとデバッグ出力をします。
- bytesTotal ... 書き込み読み込みバイト数。
- onConnect ... 接続イベント。function(sender){}
- onDisconnect ... 切断イベント。function(sender){}
- onError ... ソケットエラーイベント。function(sender,errorcode,errormsg){}
- onRead ... 読み込みイベント。function(sender,bytes,abort){}
- onWrite ... 書き込みイベント。function(sender,bytes,abort){}
- onStatus ... 情報イベント。function(sender,msg){}
- onSuccess ... 成功イベント。function(sender){}
- onFailure ... 失敗イベント。function(sender){}
例(1)
p = new POP3;
p.host = '127.0.0.1';
p.port = 110;
p.userid = 'test';
p.password = 'test';
try{
p.connect();
for(i = 1;i <= p.length; i++){ //メール番号は1から
p.getMail(i);
println(p.mail.header);
println(p.mail.body);
}
}
finally{
p.disconnect();
}
SMTP 未サポートクラス
SMTPオブジェクト。メール送信に使用します。
- sendMail() ... メールを送信します。
- timeout ... 整数値。タイムアウトを秒数で指定。
- debug ... Boolean。trueにするとデバッグ出力をします。
- bytesTotal ... 書き込み読み込みバイト数。
- onConnect ... 接続イベント。function(sender){}
- onDisconnect ... 切断イベント。function(sender){}
- onError ... ソケットエラーイベント。function(sender,errorcode,errormsg){}
- onRead ... 読み込みイベント。function(sender,bytes,abort){}
- onWrite ... 書き込みイベント。function(sender,bytes,abort){}
- onStatus ... 情報イベント。function(sender,msg){}
例(1)
s = new SMTP;
s.host = '127.0.0.1';
s.port = 25;
s.mail['To'] = 'gaogao@moemoe.gr.jp';
s.mail['From'] = 'gaogao@moemoe.gr.jp';
s.mail['Subject'] = 'DMonkey SMTP';
s.mail.message = 'テスト';
try{
s.connect();
s.sendMail();
println('OK');
}
finally{
s.disconnect();
}
ActiveXObject
ActiveXオートメーションオブジェクト。
- new ActiveXObject(文字列) ... 文字列はオートメーションサーバの名前。
- disp ... IDispatch。ディスパッチインターフェース。
例(1)
ie = new ActiveXObject('InternetExplorer.Application');
ie.Visible = true;
ie.Navigate('http://gaogao.moemoe.gr.jp');
例(2)
iria = new ActiveXObject('Iria.IriaApi');
iria.Download('http://127.0.0.1/',1);
例(3) JScriptドキュメントから
function ShowDriveInfo1(drvPath){
s = '';
fso = new ActiveXObject("Scripting.FileSystemObject");
drv = fso.GetDrive(fso.GetDriveName(drvPath));
s += "ドライブ " + drvPath.toUpperCase()+ " - ";
s += drv.VolumeName + "\n";
s += "合計サイズ: " + drv.TotalSize / 1024;
s += " KB" + "\n";
s += "空き領域: " + drv.FreeSpace / 1024;
s += " KB" + "\n";
println(s);
}
ShowDriveInfo1('c:\');
Keyboard
キーボード状態オブジェクト。
- isDown(文字) ... 文字のキーが押されているか。押されていればtrue。
- shift ... Boolean。shiftが押されているか。
- alt ... Boolean。altが押されているか。
- ctrl ... Boolean。ctrlが押されているか。
Mouse
マウス状態オブジェクト。
- lbutton ... Boolean。マウスの左ボタンが押されているか。
- mbutton ... Boolean。マウスの中ボタンが押されているか。
- rbutton ... Boolean。マウスの右ボタンが押されているか。
Clipboard
クリップボードオブジェクト。
- hasText() ... クリップボードにテキストが入っているか。入っていればtrue。
- asText ... 文字列。クリップボードの文字列。
DynaCall
DLL呼び出しオブジェクト。
- register(DLL名,関数名,フラグ1,フラグ2,フラグ3) ... DLL関数を登録する。
- sendMessage(数値A,数値B,値C,値D,文字列) ... メッセージを送ります。A はハンドル、B はメッセージ、C、D は 追加パラメータ、文字列は追加パラメータの型。返値は整数値。
- postMessage(数値A,数値B,値C,値D,文字列) ... メッセージをポストします。A はハンドル、B はメッセージ、C、D は 追加パラメータ、文字列は追加パラメータの型。返値はブール値。
例(1)
dcall = new DynaCall;
/*
DynaCall.register()
第1引数
DLLの名前
第2引数
関数の名前
第3引数~第5引数
この3つは任意の順番で並べる事ができる
i=[flag]*
引数を指定する(参照を指定した引数には数値オブジェクトを渡さないと値が反映されない)
c char(1バイト)
1 char参照(4バイト)
t short(2バイト)
2 short参照(4バイト)
l long(4バイト)
4 long参照(4バイト)
i int64(8バイト)
8 int64参照(4バイト)
p ポインタ(4バイト)
h ハンドル(4バイト)
u unsigned int(4バイト)
b boolean(4バイト)
s 文字列(4バイト)
w ワイド文字列(4バイト)
f 4バイト実数(4バイト)
d 8バイト実数(8バイト)
a IDispatch(4バイト)
k IUnknown(4バイト)
f=[flag]*
呼び出し規約を指定する
m Microsoft互換
b Borland互換
s stdcall呼び出し(標準)
c cdecl呼び出し
4 戻り値が4バイト実数
8 戻り値が8バイト実数
r=[flag]
戻り値を指定する
引数のフラグと同じ
*/
dcall.register('user32.dll','MessageBox','i=hssu','f=s','r=l');
//登録した関数はそのまま呼び出すことができます
print(dcall.MessageBox(applicationHandle,'これはDynaCallで呼び出しています。','DynaCall',1));
例(2)
dcall = new DynaCall;
s = new StringBuffer(256);
n = new Number(s.length);
dcall.register('advapi32','GetUserName','i=s4','f=s','r=b');
println(dcall.GetUserName(s,n));
//s.delete(s.indexOf(0.toChar()));
s.length = n - 1;
println(s);
println(s.length);
例(3)
dcall = new DynaCall;
dcall.register('kernel32','GetTickCount','f=s','r=l');
println(dcall.GetTickCount());
Struct
構造体オブジェクト。DynaCall に登録した関数の引数などに使われます。
- new Struct(文字列1[,文字列2,…]) ... メンバ名と型を : で区切った文字列で指定します。
- clear() ... クリアします。メンバとその値はすべて失われます。
- define(文字列1[,文字列2,…]) ... 再定義します。その際、現在のメンバとその値はすべて失われます。
- sizeOf() ... 構造体のサイズ(バイト数)を返します。
例(1)
d = new DynaCall;
//構造体を渡すパラメータには 's' を指定↓します
d.register('user32','GetCursorPos','i=s','r=b');
/*
new Struct('メンバ名:型'[,'メンバ名:型',...])
メンバ名
メンバの名前。そのままオブジェクトのメンバ(プロパティ)となる
型
メンバの型を指定する
c char(1バイト)
t short(2バイト)
l long(4バイト)
i int64(8バイト)
p ポインタ(4バイト)
h ハンドル(4バイト)
u unsigned int(4バイト)
b bool(4バイト)
s 文字列,Structオブジェクト(4バイト)
w ワイド文字列(4バイト)
f 4バイト実数(4バイト)
d 8バイト実数(8バイト)
数値 文字配列(数値バイト)
※引数の順序がそのまま構造体のメンバの並び順となります
*/
point = new Struct('x:l','y:l'); //POINT構造体
//呼び出し
d.GetCursorPos(point);
printfln('マウスカーソルの位置は X = %d, Y = %d です.',point.x,point.y);
例(2)
NIM_ADD = 0x00;
NIM_MODIFY = 0x01;
NIM_DELETE = 0x02;
NIF_MESSAGE = 0x01;
NIF_ICON = 0x02;
NIF_TIP = 0x04;
IDI_APPLICATION = 32512;
IDI_HAND = 32513;
IDI_QUESTION = 32514;
IDI_EXCLAMATION = 32515;
IDI_ASTERISK = 32516;
IDI_WINLOGO = 32517;
d = new DynaCall;
d.register('shell32','Shell_NotifyIcon','i=us','r=b');
d.register('user32','LoadIcon','i=hp','r=h');
icon = new Struct;
//NOTIFYICONDATA構造体
icon.define(
'cbSize:u',
'hWnd:h',
'uID:u',
'uFlag:u',
'uCallbackMessage:u',
'hIcon:h',
'szTip:64'); //64バイトの文字配列
icon.cbSize = icon.sizeOf(); //構造体のサイズはsizeOf()で取得できます
icon.hWnd = applicationHandle;
icon.uID = 1;
icon.uFlag = NIF_ICON | NIF_TIP;
icon.hIcon = d.LoadIcon(null,IDI_EXCLAMATION);
icon.szTip = 'チップヒント';
d.Shell_NotifyIcon(NIM_ADD,icon);
alert('タスクトレイにアイコンを作成しました');
d.Shell_NotifyIcon(NIM_DELETE,icon);
alert('タスクトレイのアイコンを削除しました');
StringBuffer
変更可能な文字列オブジェクト。
- new StringBuffer(文字列) ... 文字列で初期化します。
- new StringBuffer(数値) ... 数値のバッファサイズを確保します。
- append(値) ... 値を文字列として加える。返値は自身。
- delete(数値A,数値B) ... インデックスAからB-1まで削除する。返値は自身。
- insert(数値,値) ... 数値の位置に値を文字列にして挿入する。返値は自身。
- substring(数値A,数値B) ... インデックスAからB-1までの文字列を返す。
- replace(数値A,数値B,値) ... インデックスAからB-1まで削除し値を挿入する。返値は自身。
- indexOf(文字列[,整数]) ... 文字列を指定位置から右に探して、その位置を返します。
- lastIndexOf(文字列[,整数]) ... 文字列を指定位置から左に探して、その位置を返します。
- slice(整数1[,整数2]) ... 文字列の一部分を返します。
- substr(整数A[,整数B]) ... 文字列内の A の位置から B 文字分の文字列を返します。
- fill([値]) ... バッファを値で埋めます。
WScript
WScriptオブジェクト。
グローバルオブジェクトWScriptが最初から存在します。
(以下省略)
Enumerator
Enumeratorオブジェクト。コレクションを列挙します。
- new Enumerator(コレクション) ... コレクションはActiveXObjectまたはIDispatch
CheckListBox
GUI オブジェクト。チェックボックス付きリストボックスを表示します。
- getChecked(数値) ... Boolean。数値番目の項目がチェックされているかどうか。
- setChecked(数値,ブール値) ... 数値番目の項目のチェック状態をブール値に設定します。
- execute(文字列A,文字列B[,数値]) ... ダイアログを表示します。A はキャプション、B はラベルに表示する文字列、数値はデフォルトの選択項目。返値はOKボタンが押されれば true。
- items ... Strings。リストボックスに表示する文字列のリスト。
- index ... 選択項目のインデックス。未選択のときは -1。
Bytes 追加クラス
Byte配列オブジェクト。バイナリデータを扱うために利用します。Arrayオブジェクトの一種です。
添え字やlengthプロパティを利用してアクセスを行います。独自のメソッド・プロパティは持ちません。
Encoding 追加クラス
エンコーディングオブジェクト。様々なEncodingを扱い、相互変換を行います。
- getBytes(文字列) ... Bytes。文字列をバイト配列に変換します。
- getString(Bytes) ... 文字列。バイト配列を文字列に変換します。
- getByteCount(文字列) ... 整数値。文字列のバイト数を得ます。
- getCharCount(Bytes) ... 整数値。バイト列を文字列に変換した時の文字数を得ます。サロゲートペア文字は2文字として計算されます。
- getPreamble() ... Bytes。ファイル保存時のバイトオーダーマークがある場合に取得します。
- ASCII ... Encoding。ASCIIエンコーディングを返します。
- BigEndianUnicode ... Encoding。ビッグエンディアン形式のUNICODEエンコーディングを返します。
- Default ... Encoding。システムデフォルトのエンコーディングを返します。
- Unicode ... Encoding。リトルエンディアン形式のUNICODEエンコーディングを返します。
- UTF7 ... Encoding。UTF7形式のエンコーディングを返します。
- UTF8 ... Encoding。UTF8形式のUNICODEエンコーディングを返します。
- IsSingleByte ... Boolean。1バイトで1文字を表せるエンコーディングの場合 true を返します。
FileReader 追加クラス
ファイル読み出しオブジェクト。テキスト形式のファイルを読み出します。
- isOpened() ... ファイルを開いているか表します。ファイルが開いている場合、true を返します。
- readln() ... 文字列。1行読み取ってその文字列を返します。
- eof() ... Boolean。ファイルの終わりを検査します。ファイルの終わりに達している場合は true を返します。
- length ... 整数値。ファイルの長さを取得します。
- lastModified ... 日付時刻。ファイルの最終更新日付を取得します。
- filename ... 文字列。ファイル名をフルパスで指定します。penメソッドを呼び出す前に指定します。
- encoding ... Encoding。エンコーディングを指定します。Openメソッドを呼び出す前に指定します。指定しない場合はシステムデフォルトのエンコーディングとなります。
FileWriter 追加クラス
ファイル書き出しオブジェクト。テキスト形式のファイルを書き出します。
- isOpened() ... ファイルを開いているか表します。ファイルが開いている場合、true を返します。
- write(文字列) ... 文字列を書き込みます。
- writeln(文字列) ... 文字列を書き込み、その後に改行記号も書き込みます。
- eof() ... Boolean。ファイルの終わりを検査します。ファイルの終わりに達している場合は true を返します。
- length ... 整数値。ファイルの長さを取得します。
- lastModified ... 日付時刻。ファイルの最終更新日付を取得します。
- filename ... 文字列。ファイル名をフルパスで指定します。penメソッドを呼び出す前に指定します。
- encoding ... Encoding。エンコーディングを指定します。Openメソッドを呼び出す前に指定します。指定しない場合はシステムデフォルトのエンコーディングとなります。
拡張組込みオブジェクト
拡張組込みオブジェクトは簡単に作成することができます。
1.メソッドに足し算、プロパティにアプリケーションファイル名と日付オブジェクトを持つオブジェクトを作成します。
interface
uses
ecma_type,ecma_object;
type
//TJObjectを継承します
TTestObject = class(TJObject)
private
FCells: array[0..10] of array[0..10] of String;
FDate: TJDateObject;
function GetApplicationFilename: String;
//メソッドは TJMethod型である必要があります
function DoAdd(Param: TJValueList): TJValue;
function DoCells(Param: TJValueList): TJValue;
protected
procedure Notification(AObject: TJNotify); override;
public
constructor Create(AEngine: TJBaseEngine; Param: TJValueList; RegisteringFactory: Boolean = True); override;
destructor Destroy; override;
published
//propertyはpublishedに設定します
property applicationFilename: String read GetApplicationFilename;
property date: TJDateObject read FDate;
end;
implementation
{ TTestObject }
constructor TTestObject.Create(AEngine: TJBaseEngine;
Param: TJValueList; RegisteringFactory: Boolean);
begin
inherited;
//objectの名前を設定します
RegistName('Test');
//メソッドを登録します
RegistMethod('add',DoAdd);
RegistMethod('Cells',DoCells);
//Date Objectを作成します
//※RegisteringFactoryはFalseにしてFactoryに登録しない
FDate := TJDateObject.Create(AEngine,nil,False);
{または、登録する場合には終了通知を受ける
FDate := TJDateObject.Create(AEngine);
FDate.FreeNotification(Self);
}
//参照カウントを増やす
FDate.IncRef;
end;
procedure TTestObject.Notification(AObject: TJNotify);
//終了通知を受ける
begin
inherited;
{終了通知を受けた場合はFDateをnilにする
if AObject = FDate then
FDate := nil;
}
end;
destructor TTestObject.Destroy;
begin
//参照カウントを減らす(解放はしない)
FDate.DecRef;
{終了通知を受けた場合はFDateがnilになっている可能性がある
if Assigned(FDate) then
FDate.DecRef;
}
inherited;
end;
function TTestObject.DoAdd(Param: TJValueList): TJValue;
var
v: TJValue;
i,ret: Integer;
begin
//全ての引数を加算する
ret := 0;
if IsParam1(Param) then
for i := 0 to Param.Count - 1 do
begin
v := Param[i];
//TJValueを整数に変換して加算
Inc(ret,AsInteger(@v));
end;
//整数をTJValueに変換する
Result := BuildInteger(ret);
end;
function TTestObject.DoCells(Param: TJValueList): TJValue;
var
row,col: Integer;
v: TJValue;
begin
EmptyValue(Result);
//引数をチェック
if IsParam2(Param) then
begin
v := Param[0];
row := AsInteger(@v);
v := Param[1];
col := AsInteger(@v);
//もう一つあればセットする
if IsParam3(Param) then
begin
//setter
Result := Param[2];
FCells[row][col] := AsString(@Result);
end
else begin
//getter
//s := Format('%s(%d,%d) = %s',['Cells',row,col,FCells[row][col]]);
Result := BuildString(FCells[row][col]);
end;
end;
end;
function TTestObject.GetApplicationFilename: String;
begin
//普通に文字列を返すとTJValueに変換されます
Result := ParamStr(0);
end;
2.TDMonkey.ImportObjectメソッドで登録します。
DMonkey1.ImportObject('Test',TTestObject);
3.実行
a = new Test;
println(a.add(1,2,3,4,5));
println(a.applicationFilename);
println(a.date);
Delphi Component: DMonkey
Version: 0.3.9
Last Modified: 2005/07/29
Author: Project DMonkey
http://sourceforge.jp/projects/dmonkey/
http://hp.vector.co.jp/authors/VA024591/