[C++]105 FLTK : クリアボタンの配置 value関数

[M1 Mac, Big Sur 11.6.7, clang 13.0.0, NO IDE]

Window右側上下欄のクリアボタンを配置しました。Fl_Inputなどのvalue関数を使います。

開発は佳境に入っていて残すは表示色の記録および順送り、逆送りになります。

せっかくここまで作ったのですから、どこか国内向けの配布サイトに登録しようかと思っています。Microsoft StoreのJava版はスキル維持のためそのまま残すつもりです。

// C1ボタン
void clearUpper(Fl_Widget*, void*){
    name_input->value("");
    roma_input->value("");
    code_input->value("");
    location_input->value("");
}

// C2ボタン
void clearLower(Fl_Widget*, void*){
    output_line->value("");
    output_line2->value("");
}

[C++]104 FLTK : 正規表現におけるトラブル regex_search バイト列調査

[M1 Mac, Big Sur 11.6.7, clang 13.0.0, NO IDE]

appファイルではregex_searchを使ったひらがな抽出がうまくできないため、バイト列として何が抽出されているのか調べました。

その結果、常に2バイトのデータが返ってきていることが分かりました。本来は3バイト×ひらがな文字数のはずです。実行ファイルでは何の問題もないのに不思議な現象です。

これは仕様の問題にも思えますので、深入りしない方が良さそうです。ひらがな検索は保留としてローマ字検索に方向転換します。

// stringのバイト列への変換
void binary_convert(string str){
	for (int i = 0; i < str.length(); ++i) {
		bitset<8> bs(str[i]);
        string bs_str = bs.to_string();
		cout << str << " " << i+1 << "番目 " << bs << endl;

        output_line2->insert(bs_str.c_str());
        output_line2->insert("\n");
	}
	cout << "end"<< endl;
}

[C++]103 FLTK : 開発モードの設定 Fl_Sys_Menu_Bar

[M1 Mac, Big Sur 11.6.7, clang 13.0.0, NO IDE]

前回記事のFL_Window 2窓設定を開発モードとしてMacOSのシステムメニューから選択できるようにしました。配置していたトグルボタンを削除し、普段は通常モードとして使用します。

開発モードを選択する度にトグルボタンの様に表示/非表示が切り替わります。

Fl_Window *window2;
int mode = 0; // 0:通常モード, 1:開発モード

int main(int argc, char **argv) {

    static Fl_Menu_Item	items[] = {
    { "設定", 0, 0, 0, FL_SUBMENU },
    { "開発モード", 0, showSubWindow, 0, 0 },
    { 0 },
    { 0 }
    };
    Fl_Sys_Menu_Bar *menubar;
    menubar = new Fl_Sys_Menu_Bar(0, 0, 60, 20);
    menubar->box(FL_FLAT_BOX);
    menubar->menu(items);

    Fl_Window *window = new Fl_Window(50,50,660,480,"Color Sample");
    window->color(fl_rgb_color(238,238,238));

    <中略>
    
    window->end();
    window->show(argc, argv);
    
    // サブWindow
    window2 = new Fl_Window(750,50,360,480,"出力用");
    window2->color(fl_rgb_color(238,238,238));

    // output
    output_line2 = new Fl_Multiline_Output(0,0,360,480,"");
    output_line2->textsize(12);

    window2->end();

    return Fl::run();
}
extern Fl_Window *window2;
extern int mode;

void showSubWindow(Fl_Widget*, void*){
    if (mode == 1){
        mode = 0;
    } else {
        mode = 1;
    }

    if (mode == 1){
        window2->show();
    } else {
        window2->hide();
    }
}