マウス操作のためのウインドウに追加する。に戻る

追加するランチャー。その7

セーブ

動作はこれで完成したのですが、登録しても TRR を再起動したら登録したものは全て消えてしまいます。

せっかくランチャーっぽいのが出来ているため、登録したものを保存して再起動した後も使える様にしたいと思います。

saveOneAreaGui52.trr
exp52_saveAreaNum = %B_itemArg1%
exp52_saveControl = exp52_area%exp52_saveAreaNum%
exp52_saveType := %exp52_saveControl%_type
if(exp52_saveType != "" ){
    exp52_saveScript := %exp52_saveControl%_script
    exp52_saveText := %exp52_saveControl%_text
    exp52_saveImg := %exp52_saveControl%_img
    IniWrite, %exp52_saveScript%, %exp52_iniFile%, %exp52_saveControl%, script
    IniWrite, %exp52_saveType%, %exp52_iniFile%, %exp52_saveControl%, type
    IniWrite, %exp52_saveText%, %exp52_iniFile%, %exp52_saveControl%, text
    IniWrite, %exp52_saveImg%, %exp52_iniFile%, %exp52_saveControl%, img
}
%--

以上の様なスクリプトを使って保存するようにしています。
このアイテムはあくまで、区画ひとつ分のみを保存するスクリプトです。

引数1 に、何番目の区画かを指定するようになっています。

そして、 exp52_area1_type などの変数に値があれば保存の対象にするようにしています。

あとは、 IniWrite を使って、
ini ファイルとして保存するようにしています。

区画は 12個あるので、全てを保存するスクリプトを挙げます。

saveAllAreaGui52.trr
; ファイルは一度削除する
IfExist, %exp52_iniFile%
{
    FileDelete, %exp52_iniFile%
}
saveOneAreaGui52 1
saveOneAreaGui52 2
saveOneAreaGui52 3
saveOneAreaGui52 4
saveOneAreaGui52 5
saveOneAreaGui52 6
saveOneAreaGui52 7
saveOneAreaGui52 8
saveOneAreaGui52 9
saveOneAreaGui52 10
saveOneAreaGui52 11
saveOneAreaGui52 12
%--

TRRLoop 文は使えないため、一つ一つ指定する方法をとる事になります。

とりあえず保存するスクリプトはこんなところです。
この saveAllAreaGui52 を使えば、今登録してある区画が保存ができます。

これ自体も区画の中に登録しておきます。

まず、 テキスト1 に実行スクリプトを記入しておきます。

saveAllAreaGui52

次に、「追加するランチャー」の

テキスト1で登録

のボタンを押します。

InputBox の入力欄には、
セーブ とでも入力します。

画像

これで、このボタンを押すと今の状態を保存する事ができます

ロード

今度は保存したものを読み出すスクリプトです。

loadOneAreaGui52.trr
exp52_saveAreaNum = %B_itemArg1%
exp52_saveControl = exp52_area%exp52_saveAreaNum%
IniRead, exp52_saveType, %exp52_iniFile%, %exp52_saveControl%, type , %A_Space%
exp52_saveType := Trim(exp52_saveType)
if(exp52_saveType == ""){
    return
}
IniRead, exp52_saveScript, %exp52_iniFile%, %exp52_saveControl%, script , %A_Space%
IniRead, exp52_saveText, %exp52_iniFile%, %exp52_saveControl%, text , %A_Space%
IniRead, exp52_saveImg, %exp52_iniFile%, %exp52_saveControl%, img , %A_Space%

exp52_tmpHeightCount := exp52_count // exp52_widthNumber
exp52_tmpWidthCount := Mod(exp52_count, exp52_widthNumber)
exp52_tmpPosX := exp52_tmpWidthCount * exp52_width
exp52_tmpPosY := exp52_tmpHeightCount * exp52_height

exp52_count++
if(exp52_count >= exp52_many){
    F_tmpOutput( "これ以上は追加できない" )
    return
}

exp52_tmpControlVar = exp52_area%exp52_count%

%exp52_tmpControlVar%_type = %exp52_saveType%
%exp52_tmpControlVar%_text = %exp52_saveText%

if( exp52_saveType == 3 ){
    %exp52_tmpControlVar%_img = %exp52_saveImg%
    exp52_tmpIconPath = %exp52_saveImg%
    ; 拡張子が、txt、画像ファイル、lnk なら、SHELL32.dll のファイルを。
    myClickGui52_getIconAddGui52

    exp52_tmpOption = %exp52_tmpIconOption% X%exp52_tmpPosX% Y%exp52_tmpPosY% w%exp52_width% h%exp52_height% v%exp52_tmpControlVar% gG_subroutine52
    exp52_imgExistFlag := F_GuiAddPictureFileExist(52, exp52_tmpIconPath, exp52_tmpOption)
    if( exp52_imgExistFlag == False ){
        Gui, 52:Add, Button, %exp52_tmpOption%,  %exp52_saveText%
    }
    %exp52_tmpControlVar%_script := exp52_saveScript
    ; 初期化しておく
    exp52_tmpIconOption =
    return
}
exp52_tmpOption = X%exp52_tmpPosX% Y%exp52_tmpPosY% w%exp52_width% h%exp52_height% v%exp52_tmpControlVar% gG_subroutine52
if( exp52_saveType == 2 ){
    %exp52_tmpControlVar%_img = %exp52_saveImg%
    exp52_imgExistFlag := F_GuiAddPictureFileExist(52, exp52_saveImg, exp52_tmpOption)
    if( exp52_imgExistFlag == False ){
        Gui, 52:Add, Button, %exp52_tmpOption%,  %exp52_saveText%
    }
} else if( exp52_saveType == 4 ){
    Gui, 52:Add, Text, %exp52_tmpOption% Center Border,  %exp52_saveText%
} else {
    Gui, 52:Add, Button, %exp52_tmpOption%,  %exp52_saveText%
}
%exp52_tmpControlVar%_script := exp52_saveScript
%--

少し長いですが、内容は今まで例に挙げてきたスクリプトと同じ様なものが書かれています。

保存する saveOneAreaGui52.trr の方と同じ様に、区画の一つのみを読み出して、その後登録する事をします。
同じ様に 引数1 に区画の番号を指定する仕様です。

まず、 IniRead で、タイプの番号の部分を読み出してみて、
タイプの番号があったら登録されていたものとして扱い
全て読み出してそのまま区画を追加します。

区画の追加の仕方は、いままで使ってきた区画の追加のスクリプトとほとんど同じです。

ちなみに、 exp52_saveAreaNum は読み出す区画の番号で、
exp52_count は新しく追加する区画の番号です。

この 2つの変数は同じようなものを表しているので 同じにしてもよさそうですが、
この「追加するランチャー」は、
区画の削除などの操作をしたりする場合、
保存した時の区画の位置と、読み出した時の区画の位置は変わる構造になっています。

exp52_saveAreaNum の読み出す区画と、
exp52_count の新しく追加する区画は違う番号になったりするので、この変数は分ける必要があります。

後は、タイプ別に登録する処理が少し変わるようにして、元の状態と同じになるように登録します。

タイプが 3 の場合は少しスクリプトが長いですが、 52GuiDropFiles.trr と同じ状態になるようなスクリプトが記入されています。

ちなみに、ファイルパスが見つからなかった場合はボタンで追加するようにしています。

タイプが 2 の場合は、画像で追加する場合と同じ登録の仕方を。

そのタイプの場合でもなかったなら、
ボタンで追加する場合と同じ登録の仕方をします。

今までの説明には一切なかったものですが、
タイプが 4 の場合は、文字のみの区画で追加する様にしています。

次は、 12個ある区画を全て読み出すスクリプトです。

loadAllAreaGui52.trr
if(exp52_load >= 2){
    F_tmpOutput( "すでに一度ロードしているので中止する" )
    return
}
exp52_load++
IfNotExist, %exp52_iniFile%
{
    return
}
loadOneAreaGui52 1
loadOneAreaGui52 2
loadOneAreaGui52 3
loadOneAreaGui52 4
loadOneAreaGui52 5
loadOneAreaGui52 6
loadOneAreaGui52 7
loadOneAreaGui52 8
loadOneAreaGui52 9
loadOneAreaGui52 10
loadOneAreaGui52 11
loadOneAreaGui52 12
%--

このアイテムが使われると、 保存していたものを読み出して、新しく区画を追加していきます。

このアイテムは、 2回以上使われると、 保存していたものを二重に追加してしまいます。

ですので、 exp52_load の変数を使って 2回以上実行されそうになったら、ストップがかかるようにしています。

後、今更ですが 今回作った保存の処理で対象になるのは、
addButtonGui52_type2addPictureGui52_type2アイテムを使って登録したものが対象です。

addButtonGui52addPictureGui52 を使って登録したものは、保存の対象になりません。

byText1InputAddButtonGui52
byText1_2InputAddPictureGui52 を使った場合は、内部で
addButtonGui52_type2addPictureGui52_type2 を使って登録しているものなので、保存の対象になります。

次のページに移行します。