ご訪問ありがとうございます。
元スーパー店員で不労所得生活を目論むひろしです。
前回
前回、property strictが有効となったので
パラメータの入力が日本語表示されるようになりました。
そして内部的にもここで指定された
フォントサイズを採用するように
変更しました。
しかーーーーーーーーーーーーーーし、
起動ごとにこのパラメータを設定する必要があります。
それはイケてないです。
なので、設定をファイルに保存することにしました。
例により豊嶋先生の本にありました。
比較的簡単に読み込めるようです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
int handle = FileOpen(Str_IniFileName, FILE_TEXT|FILE_READ, '='); if(handle != INVALID_HANDLE) { while(!FileIsEnding(handle)) //ファイルの終わりまで繰り返す { //ファイルからデータの読み込み string name = FileReadString(handle); int var = (int)FileReadNumber(handle); if(name == "Dialog_FontSize") Dialog_FontSize = var; if(name == "DspPips_FontSize") DspPips_FontSize = var; } FileClose(handle); //ファイルクローズ } |
こんな風にやれば、かってに
‘=’をデリミタとして読み込んでくれるとのこと。。
。。
あれ? うまくいかない。
ログに吐き出したところ、どうやら
デリミタを認識していないようです。
なので
- ファイルの拡張子を’ini’から’TXT’に変更。
- デリミタを’,’に変更。
してやってみたけど一向に変わらない。
わかったー
ファイルオープン時のパラメータは FILE_CSV に
する必要があるのです。
豊嶋先生。間違ってるやん。。
とはいえうまくいきました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
//ファイル読み込み int handle = FileOpen(Str_IniFileName, FILE_CSV, '='); if(handle != INVALID_HANDLE) { while(!FileIsEnding(handle)) //ファイルの終わりまで繰り返す { //ファイルからデータの読み込み string name = FileReadString(handle); int var = (int)FileReadNumber(handle); if(name == "Dialog_FontSize") Dialog_FontSize = var; if(name == "DspPips_FontSize") { Print("ファイルから DspPips_FontSize = ", var); DspPips_FontSize = var; } } FileClose(handle); //ファイルクローズ } else { Print("読み込み失敗Dialog_FontSize = ", Dialog_FontSize); Dialog_FontSize = input_Dialog_FontSize; //ダイアログ フォントサイズ DspPips_FontSize = input_DspPips_FontSize; //チャート画面 PIPS表示フォントサイズ } if(dDiallogFsize !=input_Dialog_FontSize ) Dialog_FontSize = input_Dialog_FontSize; if(dDspFsize !=input_DspPips_FontSize ) DspPips_FontSize = input_DspPips_FontSize; |
とはいえ、イマイチなのは
ファイルを読み込みより前にパラメータ設定があるのです。
理想としては、
①ファイルから読み込む
②パラメータ設定画面
となればいいのですが
①パラメータ設定画面
②ファイル読み込み
となるので
ファイルに設定を保存していたとしても
パラメータ設定の後にファイルの値を
読み込むため画面と値が異なってしまいます。
※この辺は本家ではどうしているのでしょうか?
とはいえ、機能的にファイル保存は、あったほうがいいので
ファイルの保存と読み込み機能を実装しました。
1 2 3 4 5 6 7 8 9 10 11 12 |
if((dDiallogFsize != Dialog_FontSize) || (dDspFsize != DspPips_FontSize)) { //ファイル書き込み int handle = FileOpen(Str_IniFileName, FILE_WRITE | FILE_TXT, '='); if(handle != INVALID_HANDLE) { //ファイルへデータの書き込み FileWrite(handle, "Dialog_FontSize", Dialog_FontSize); FileWrite(handle, "DspPips_FontSize", DspPips_FontSize); FileClose(handle); //ファイルクローズ } } |
ファイルの書き込みは、デフォルトと
値が異なったときのみ行う。
仕様
1.パラメータ設定画面でデフォルト値以外にした場合、最優先となる
2.パラメータ設定画面で変更が無い場合は、ファイルから読み込んだ値で動作する
いうふうにしました。
最後までご覧いただきありがとうございます。
つぎはこちら
—–2021-04-10 追記—-
起動時に読み込むことを諦めれば、
ファイルの操作は、何も行わなくても
勝手にやってくれるようです。
ようするに
iput ……
は、ダイアログの保存、及び読み込みで
勝手に保存や展開されます。
1 2 3 4 5 6 7 8 9 |
input string PIPS_on_Chart = "==========================="; //===チャート画面上のPIPS表示=== input bool input_DspPIPS = true; //表示する input dow_enum PipsFont = ArialBrack; //フォント input int input_DspPips_FontSize = 17; //フォントサイズ input color input_DspPips_ColorBlue = clrBlue; //プラス収支時の色 input color input_DspPips_ColorRed = clrRed; //手数料負け時の色 input color input_DspPips_ColorYellow = clrYellow; //マイナス収支の色 input bool input_DelClose = false; //削除で決済する input bool input_EraseAfterTrim = true; //PIPS消去時、表示位置を整理する |
—–2022-03-10 追記—-
ここでファイルを読み込むとMT4起動時のタイミングにおいて
高確率で失敗します。(そもそもチャートは複数あるので一つの
ファイルで制御することに問題があった)