// 4文字までの文字をアイコンファイルにする // // char_to_icon.imw3 // // 指定した文字列をアイコンファイルにします // アイコンファイル形式はIMW3で使える形式です // DrawScreen { Print(0,8,8,0,6,12,0,"4文字まで指定") ; Print(0,8,22,0,6,12,0,"(全角文字のみ)") ; Print(0,120,8,0,6,12,0,"背景色") ; Print(0,190,8,0,6,12,0,"文字色") ; Box(0,104,52,250,160,15,15) ; x = 164 ; y = 90 ; Box(0,x,y,x+31,y+31,BackCol,BackCol) ; // 背景色、文字色で裏画面へ書込み FullPaint(1,BackCol) ; if(BackCol == 15){ SetPal(10,1,1,1) ; FullPaint(1,10) ; } // 透明の場合 len = GetEditLength("ID_edit") ; if(len == 0){ return ; } // 2文字以下の場合 if(len <= 2){ w = 16 / len ; h = 32 ; Print(0,x,y,0,w,h,CharCol,"ID_edit") ; Print(1,0,0,0,w,h,CharCol,"ID_edit") ; // 裏画面へ return ; } // 3〜4文字の場合 if(len <= 4){ w = 8 ; h = 16 ; AllClearEdit("ID_sub") ; GetEditText("ID_edit",0,2,"ID_sub") ; Print(0,x,y,0,w,h,CharCol,"ID_sub") ; Print(1,0,0,0,w,h,CharCol,"ID_sub") ; AllClearEdit("ID_sub") ; GetEditText("ID_edit",2,4,"ID_sub") ; Print(0,x,y+h,0,w,h,CharCol,"ID_sub") ; Print(1,0,h,0,w,h,CharCol,"ID_sub") ; // 裏画面へ } } PAINT { call("DrawScreen") ; } INIT { SetControlFont("ID_edit","MS ゴシック",8,16,0) ; // エディットの文字サイズ SetListText("ID_BackCol","黒") ; SetListText("ID_BackCol","青") ; SetListText("ID_BackCol","赤") ; SetListText("ID_BackCol","桃") ; SetListText("ID_BackCol","緑") ; SetListText("ID_BackCol","水色") ; SetListText("ID_BackCol","黄") ; SetListText("ID_BackCol","白") ; SetListText("ID_BackCol","透明") ; SetListPos("ID_BackCol",7) ; BackCol = 7 ; SetListText("ID_CharCol","黒") ; SetListText("ID_CharCol","青") ; SetListText("ID_CharCol","赤") ; SetListText("ID_CharCol","桃") ; SetListText("ID_CharCol","緑") ; SetListText("ID_CharCol","水色") ; SetListText("ID_CharCol","黄") ; SetListText("ID_CharCol","白") ; SetListPos("ID_CharCol",0) ; CharCol = 0 ; error = 0 ; } CREATE { SetWinSize(280,190) ; SetWinColor(16) ; SetCaption("もじからあいこん") ; Data("pal",256,3) ; // パレット色データ Data("icon",32,32) ; // アイコン画像データ Data("dat",1,2238) ; // ファイルデータ pal_start = 62 ; // パレットコード開始位置 ico_start = 1086 ; // アイコンデータ開始位置 SubScreen(1,64,64) ; x = 10 ; y = 38 ; CreateControl(101,"四字熟語","ID_edit",x,y,80,20) ; y = y + 24 ; CreateControl(101,"","ID_sub",0,0,0,0) ; CreateControl(0,"セット","ID_Set",x,y,80,20) ; y = y + 34 ; CreateControl(0,"アイコン保存","ID_Go",x,y,80,40) ; x = 120 ; y = 26 ; CreateControl(33,"","ID_BackCol",x,y,50,100) ; x = x + 70 ; CreateControl(33,"","ID_CharCol",x,y,50,100) ; x = x + 100 ; } // セット ID_Set { call("DrawScreen") ; } // 背景色 ID_BackCol { BackCol = GetListPos("ID_BackCol") ; if(BackCol == 8){ BackCol = 15 ; } call("DrawScreen") ; } // 文字色 ID_CharCol { CharCol = GetListPos("ID_CharCol") ; call("DrawScreen") ; } // アイコン保存 ID_Go { call("MakeSaveData") ; if(error > 0){ return ; } n = FileNameDlgW("名前を付けて保存","list",4) ; if(n < 1){ return ; } OpenFileWrite("FILE_NAME") ; n = 0 ; loop(2238){ WriteFile(n,dat(0,n)) ; n = n + 1 ; } CloseFile ; } // r g b 色からパレット番号を探す、無ければ追加する MakePalData { if(r == 1){ data = 255 ; return ; } // 背景色透明の場合 error = 0 ; p = 0 ; loop(255){ // 無い場合 if(p >= pal_many){ pal(p,0) = r ; pal(p,1) = g ; pal(p,2) = b ; data = p ; pal_many = pal_many + 1 ; return ; } // 同じ色の場合 if(pal(p,0) == r){ if(pal(p,1) == g){ if(pal(p,2) == b){ data = p ; return ; } } } p = p + 1 ; } error = 1 ; } // アイコンファイルのデータを作成 MakeSaveData { n = GetEditLength("ID_edit") ; if(n == 0){ error = 1 ; return ; } DataInit("dat",0) ; // 0で初期化 // ヘッダ部データセット dat(0, 2) = 1 ; dat(0, 4) = 1 ; dat(0, 6) = 32 ; dat(0, 7) = 32 ; dat(0,12) = 8 ; dat(0,14) = 168 ; dat(0,15) = 8 ; dat(0,18) = 22 ; dat(0,22) = 40 ; dat(0,26) = 32 ; dat(0,30) = 64 ; dat(0,34) = 1 ; dat(0,36) = 8 ; dat(0,43) = 4 ; dat(0,55) = 1 ; dat(0,59) = 1 ; // アイコン・パレット データ作成 DataInit("pal",255) ; // パレット白で初期化 pal(255,0) = 0 ; pal(255,1) = 0 ; pal(255,2) = 0 ; // 透明色パレット x = 0 ; y = 0 ; pal_many = 0 ; loop(32){ loop(32){ r = GetPixelR(1,x,y) ; g = GetPixelG(1,x,y) ; b = GetPixelB(1,x,y) ; call("MakePalData") ; // 色からパレット番号を探す if(error > 0){ return ; } icon(x,y) = data ; // パレット番号をセット x = x + 1 ; } x = 0 ; y = y + 1 ; } // パレットデータセット n = 0 ; pos = 62 ; loop(256){ dat(0,pos) = pal(n,2) ; dat(0,pos+1) = pal(n,1) ; dat(0,pos+2) = pal(n,0) ; pos = pos + 4 ; n = n + 1 ; } // アイコンデータセット y = 31 ; loop(32){ x = 0 ; loop(32){ dat(0,pos) = icon(x,y) ; pos = pos + 1 ; x = x + 1 ; } y = y - 1 ; } // 透明セットデータセット n = ico_start ; p = n + 1024 ; loop(128){ k = 0 ; loop(8){ if(dat(0,n) == 255){ if(k == 0){ dat(0,p) = dat(0,p) + 128 ; } if(k == 1){ dat(0,p) = dat(0,p) + 64 ; } if(k == 2){ dat(0,p) = dat(0,p) + 32 ; } if(k == 3){ dat(0,p) = dat(0,p) + 16 ; } if(k == 4){ dat(0,p) = dat(0,p) + 8 ; } if(k == 5){ dat(0,p) = dat(0,p) + 4 ; } if(k == 6){ dat(0,p) = dat(0,p) + 2 ; } if(k == 7){ dat(0,p) = dat(0,p) + 1 ; } } n = n + 1 ; k = k + 1 ; } p = p + 1 ; } }