#!ruby -Ks # http://www.ne.jp/asahi/nagoya/ahomaro/builder/cpb-048.html require "phi" form = Phi::Form.new :form, "成績表" grid = Phi::StringGrid.new form, :grid grid.align = Phi::AL_CLIENT grid.col_count = 6 names = ["Robert","Bruce","Kim","Leslie","Phil","K. J.","Terri", "Stewart","Katherine","Chris","Pete","Ann","Roger", "Janet","Roger","Willie","Leslie","Ashok","Walter", "Carol","Luke","Sue Anne","Jennifer M.","Claudia", "Dana","Mary S.","Randy","Oliver H.","Kevin","Kelly", "Yuki","Mary","Bill","Takashi","Roberto","Michael", "Jacques","Scott","T.J.","Pierre","John","Mark"] grid.row_count = names.size+1 grid.cells[0,0] = "名前" grid.cells[1,0] = "5/1" grid.cells[2,0] = "6/1" grid.cells[3,0] = "7/1" grid.cells[4,0] = "合計" grid.cells[5,0] = "評価" for i in 0...names.size scores = [] total = 0 3.times do scores.push rand(101) total += scores.last end row = i+1 grid.cells[0,row] = names[i] grid.cells[1,row] = scores[0].to_s grid.cells[2,row] = scores[1].to_s grid.cells[3,row] = scores[2].to_s grid.cells[4,row] = total.to_s rank = %w[E D C B][total/60] || "A" grid.cells[5,row] = rank end CL_WARN = 240+(220<<8)+(220<<16) grid.on_draw_cell = proc do |sender, col, row, rect, state| return if col == 0 || row == 0 # 項目名および名前列は標準のまま bkcolor = Phi::CL_WINDOW # セルの背景色 case col when 1..3 # 得点が30未満の場合には背景を薄い赤にする if grid.cells[col,row].to_i < 30 bkcolor = CL_WARN end when 4..5 # 総得点が120未満の場合には背景を薄い赤にする if grid.cells[4,row].to_i < 120 bkcolor = CL_WARN end end # セルを塗り潰す grid.canvas.brush.color = bkcolor grid.canvas.fill_rect(rect) # 標準の埋め潰しカーソルではなくて太枠カーソルに変更 if state.include? Phi::GD_SELECTED grid.canvas.brush.style = Phi::BS_CLEAR grid.canvas.pen.width = 2 grid.canvas.pen.color = Phi::CL_BLACK grid.canvas.draw_rect rect.left+1,rect.top+1,rect.right,rect.bottom end # 少しだけ描画範囲を狭める # Phi.inflate_rect(rect,-2,-1) rect.left-=2 rect.top-=1 rect.right-=2 rect.bottom-=1 opt = 0 # セルに描画するときのスタイル case col when 1..4 # 数値は右寄せ opt = Phi::DT_VCENTER | Phi::DT_RIGHT | Phi::DT_SINGLELINE when 5 # 評価は中央寄せ opt = Phi::DT_VCENTER | Phi::DT_CENTER | Phi::DT_SINGLELINE end # 実際に描画する Phi.draw_text(grid.canvas.handle,grid.cells[col,row],-1,rect,opt) end form.show Phi.mainloop