coding UTF-8; // 文字化け対策 // 必要なライブラリの読み込み import GUI; import Math; import Text; import Color; import system.Int; // GUIのレイアウト調整用の値 const int WINDOW_WIDTH = 460; const int WINDOW_HEIGHT = 300; const int MARGIN = 10; const int FIELD_WIDTH = 140; const int FIELD_HEIGHT = 30; const int BUTTON_WIDTH = 100; const int BUTTON_HEIGHT = 45; const int DISPLAY_WIDTH = WINDOW_WIDTH - 40; const int DISPLAY_HEIGHT = WINDOW_HEIGHT - FIELD_HEIGHT*3 - 80; // GUIコンポーネントのIDを保持する変数 int window; int displayPanel; int redField; int greenField; int blueField; int codeField; int rgbToCodeButton; int codeToRgbButton; // プログラム開始時に自動的に実行される関数 // (※ ユーザーがボタンを押した際の処理フローは、 // ここではなくコード末尾のイベントハンドラ関数から始まります) void main(){ // GUIの構築 createComponent(); // コンソールを非表示にする hide(); // 初期値のセット string code = "000000"; setColorByCode(code); } // カラーコードを格納する文字列から色をセットする関数 void setColorByCode(string inCode){ // CODE項目に値を設定 setCodeField(inCode); // 先頭に「#」が付いていれば削除 if(checkText(inCode, "#", START)){ inCode = cropText(inCode, 1, countText(inCode)); } // 16進数のプレフィックスを付加 inCode = "0x" + inCode; // 16進数として正しい表記かを検査 if(isHex(inCode)){ // 入力値をintに変換 int code = inCode; // カラーコードとして正しい範囲内か検査 if(0<=code && code<=0xffffff){ // 色配列を生成 int color[] = color(code); // 色見本ディスプレイに色を設定 setDisplayColor(color); // RED/GREEN/BLUE項目に値を設定 setRgbField( (string)color[0], (string)color[1], (string)color[2] ); }else{ alert("CODE の入力値が、#000000~#ffffffの範囲を超えています。"); } }else{ alert("CODE の入力値が、16進数ではありません。"); } } // RGB値を格納する文字列から色をセットする関数 void setColorByRgb(string inR, string inG, string inB){ // RED/GREEN/BLUE項目に値を設定 setRgbField(inR, inG, inB); // 整数として正しい表記かを検査 if( isInt(inR) && isInt(inG) && isInt(inB) ){ // 入力値をintに変換 int r = inR; int g = inG; int b = inB; // RGB値として正しい範囲内か検査 if(0<=r&&r<=255 && 0<=g&&g<=255 && 0<=b&&b<=255){ // 色配列を生成 int color[] = {r, g, b, 255}; // 色見本ディスプレイに色を設定 setDisplayColor(color); // カラーコードの取得 string code = hex( getColorCode(color) ); code = formatColorCode(code); // CODE項目に値を設定 setCodeField(code); }else{ alert("RED / GREEN / BLUE の入力値が、0~255の範囲を超えています。"); } }else{ alert("RED / GREEN / BLUE の入力値が、整数ではありません。"); } } // 16進数表記 0x~ を、6桁のカラーコード表記に整形する関数 // (setColorByRgb 関数内で呼んでいる) string formatColorCode(string code){ // 文字列の初期長さを取得 int length = countText(code); // 先頭の 0x を削除 code = cropText(code, 2, length); length -= 2; // 先頭をゼロ詰めする数 int zeros = 6 - length; // カラーコードは必ず6桁表記なので先頭をゼロ詰め for(int i=0; i>"); mountComponent(rgbToCodeButton, panel); codeToRgbButton = newButton(0, 0, 0, 0, "<<"); mountComponent(codeToRgbButton, panel); return panel; } // ====================================================================== // これ以降は画面のGUIの更新処理です。 // ====================================================================== // 画面を構成するGUIコンポーネントを再描画する関数 void repaint(){ paintComponent(displayPanel); // 色表示ディスプレイの第描画 paintComponent(window); // ウィンドウの再描画 } // 色見本ディスプレイの色を設定する関数 void setDisplayColor(int color[]){ int fgColor[] = {0, 0, 0, 0}; // 前景色(パネルには作用しないので適当) setComponentColor(displayPanel, fgColor, color); // 色表示パネルに色を設定 repaint(); // 画面を再描画 } // RED / GREEN / BLUE項目の値を設定する関数 void setRgbField(string r, string g, string b){ setComponentText(redField, r); // RED項目に値を設定 setComponentText(greenField, g); // GREEN項目に値を設定 setComponentText(blueField, b); // BLUE項目に値を設定 repaint(); // 画面を再描画 } // CODE項目の値を設定する関数 private void setCodeField(string code){ setComponentText(codeField, code); // CODE項目の値を設定 repaint(); // 画面を再描画 } // ====================================================================== // これ以降はイベントハンドラの関数群です。 // ====================================================================== // ボタンが押された際にコールされる関数 void onButtonClick(int componentID){ //「>>」ボタンの場合( RGB >> CODE ) if(componentID == rgbToCodeButton){ // RED/GREEN/BLUE項目の内容から色を設定 string r = getComponentText(redField); string g = getComponentText(greenField); string b = getComponentText(blueField); setColorByRgb(r, g, b); //「<<」ボタンの場合( RGB << CODE ) }else if(componentID == codeToRgbButton){ // CODE項目の内容から色を設定 string colorCode = getComponentText(codeField); setColorByCode(colorCode); } } // ウィンドウが閉じられた際にコールされる関数 void onWindowClose(int componentID){ // メインウィンドウが閉じられたらプログラムを終了する if(componentID == window){ exit(); } }