Microsoft Small Basic

Program Listing: DJT869-0
' Periodic Table
' Copyright © 2013-2015 Nonki Takahashi. The MIT License.
' Version 0.2
' Last update 2015-02-28
' Program ID DJT869-0
'
GraphicsWindow.Title = "Periodic Table 0.2"
CRLF = Text.GetCharacter(13) + Text.GetCharacter(10)
PT_Init() ' periodic table initialization
PT_Draw()
GraphicsWindow.MouseDown = OnMouseDown
Sub OnMouseDown
x = GraphicsWindow.MouseX
group = Math.Floor((x - x0) / width) + 1
y = GraphicsWindow.MouseY
period = Math.Floor((y - y0) / height) + 1
For no = 1 To 118
If group = pt[no]["group"] And period = pt[no]["period"] Then
ShowPopup()
no = 119 ' break
EndIf
EndFor
EndSub
Sub ShowPopup
def = Dictionary.GetDefinition(pt[no]["name"])
title = pt[no]["symbol"] + " - " + pt[no]["name"] + " (Atomic number " + no + ")"
GraphicsWindow.ShowMessage(def, title)
EndSub
Sub PT_Draw
' Periodic Table | Draw
max = Array.GetItemCount(pt)
index = Array.GetAllIndices(pt)
GraphicsWindow.BrushColor = "Black"
y = y0 - height * 0.8
For group = 1 To 18
x = x0 + (group - 0.7) * width
GraphicsWindow.DrawText(x, y, group)
EndFor
x = x0 - width * 0.8
For period = 1 To 10
y = y0 + (period - 0.7) * height
If period <= 7 Then
GraphicsWindow.DrawText(x, y, period)
ElseIf period = 9 Then
GraphicsWindow.DrawText(x, y, "* Lanthanides")
ElseIf period = 10 Then
GraphicsWindow.DrawText(x, y, "** Actinides")
EndIf
EndFor
For i = 1 To max
no = index[i]
x = x0 + (pt[no]["group"] - 1) * width
y = y0 + (pt[no]["period"] - 1) * height
If color[pt[no]["type"]] <> "" Then
GraphicsWindow.BrushColor = color[pt[no]["type"]]
GraphicsWindow.FillRectangle(x, y, width, height)
EndIf
GraphicsWindow.PenColor = "White"
GraphicsWindow.DrawRectangle(x, y, width, height)
If Text.StartsWith(no, "*") Then
GraphicsWindow.BrushColor = "Black"
Else
GraphicsWindow.BrushColor = "Black"
EndIf
GraphicsWindow.DrawText(x + width * 0.1, y, no)
GraphicsWindow.DrawText(x + width * 0.1, y + height * 0.4, pt[no]["symbol"])
EndFor
' draw about colors
max = Array.GetItemCount(color)
index = Array.GetAllIndices(color)
y = y0 + 11 * height
For i = 1 To max
x = x0 + Math.Remainder(i - 1, 4) * 134
y = y0 + Math.Floor((i - 1) / 4) * height / 2 + 11 * height
type = index[i]
GraphicsWindow.BrushColor = color[type]
GraphicsWindow.FillRectangle(x, y, 10, 10)
GraphicsWindow.BrushColor = "Black"
GraphicsWindow.DrawText(x + 14, y, type)
EndFor
EndSub
Sub PT_Init
' Periodic Table | Initialization
gw = 598
gh = 428
GraphicsWindow.Width = gw
GraphicsWindow.Height = gh
GraphicsWindow.FontName = "Arial"
GraphicsWindow.FontSize = 11
x0 = 40
y0 = 36
width = 30
height = 30
color["Alkali Metals"] = "Gold"
color["Alkaline Earth Metals"] = "SandyBrown"
color["Transition Metals"] = "Tan"
color["Post-Transition Metals"] = "LightGray"
color["Metalloids"] = "Khaki"
color["Other Nonmetals"] = "SkyBlue"
color["Halogens"] = "Magenta"
color["Noble Gases"] = "Orchid"
color["Lanthanides"] = "Turquoise"
color["Actinides"] = "YellowGreen"
pt[1] = "symbol=H;name=Hydrogen;period=1;group=1;type=Other Nonmetals;"
pt[2] = "symbol=He;name=Helium;period=1;group=18;type=Noble Gases;"
pt[3] = "symbol=Li;name=Lithium;period=2;group=1;type=Alkali Metals;"
pt[4] = "symbol=Be;name=Beryllium;period=2;group=2;type=Alkaline Earth Metals;"
pt[5] = "symbol=B;name=Boron;period=2;group=13;type=Metalloids;"
pt[6] = "symbol=C;name=Carbon;period=2;group=14;type=Other Nonmetals;"
pt[7] = "symbol=N;name=Nitrogen;period=2;group=15;type=Other Nonmetals;"
pt[8] = "symbol=O;name=Oxygen;period=2;group=16;type=Other Nonmetals;"
pt[9] = "symbol=F;name=Fluorine;period=2;group=17;type=Halogens;"
pt[10] = "symbol=Ne;name=Neon;period=2;group=18;type=Noble Gases;"
pt[11] = "symbol=Na;name=Sodium;period=3;group=1;type=Alkali Metals;"
pt[12] = "symbol=Mg;name=Magnesium;period=3;group=2;type=Alkaline Earth Metals;"
pt[13] = "symbol=Al;name=Aluminum;period=3;group=13;type=Post-Transition Metals;"
pt[14] = "symbol=Si;name=Silicon;period=3;group=14;type=Metalloids;"
pt[15] = "symbol=P;name=Phosphorus;period=3;group=15;type=Other Nonmetals;"
pt[16] = "symbol=S;name=Sulfur;period=3;group=16;type=Other Nonmetals;"
pt[17] = "symbol=Cl;name=Chlorine;period=3;group=17;type=Halogens;"
pt[18] = "symbol=Ar;name=Argon;period=3;group=18;type=Noble Gases;"
pt[19] = "symbol=K;name=Potassium;period=4;group=1;type=Alkali Metals;"
pt[20] = "symbol=Ca;name=Calcium;period=4;group=2;type=Alkaline Earth Metals;"
pt[21] = "symbol=Sc;name=Scandium;period=4;group=3;type=Transition Metals;"
pt[22] = "symbol=Ti;name=Titanium;period=4;group=4;type=Transition Metals;"
pt[23] = "symbol=V;name=Vanadium;period=4;group=5;type=Transition Metals;"
pt[24] = "symbol=Cr;name=Chromium;period=4;group=6;type=Transition Metals;"
pt[25] = "symbol=Mn;name=Manganese;period=4;group=7;type=Transition Metals;"
pt[26] = "symbol=Fe;name=Iron;period=4;group=8;type=Transition Metals;"
pt[27] = "symbol=Co;name=Cobalt;period=4;group=9;type=Transition Metals;"
pt[28] = "symbol=Ni;name=Nickel;period=4;group=10;type=Transition Metals;"
pt[29] = "symbol=Cu;name=Copper;period=4;group=11;type=Transition Metals;"
pt[30] = "symbol=Zn;name=Zinc;period=4;group=12;type=Transition Metals;"
pt[31] = "symbol=Ga;name=Gallium;period=4;group=13;type=Post-Transition Metals;"
pt[32] = "symbol=Ge;name=Germanium;period=4;group=14;type=Metalloids;"
pt[33] = "symbol=As;name=Arsenic;period=4;group=15;type=Metalloids;"
pt[34] = "symbol=Se;name=Selenium;period=4;group=16;type=Other Nonmetals;"
pt[35] = "symbol=Br;name=Bromine;period=4;group=17;type=Halogens;"
pt[36] = "symbol=Kr;name=Krypton;period=4;group=18;type=Noble Gases;"
pt[37] = "symbol=Rb;name=Rubidium;period=5;group=1;type=Alkali Metals;"
pt[38] = "symbol=Sr;name=Strontium;period=5;group=2;type=Alkaline Earth Metals;"
pt[39] = "symbol=Y;name=Yttrium;period=5;group=3;type=Transition Metals;"
pt[40] = "symbol=Zr;name=Zirconium;period=5;group=4;type=Transition Metals;"
pt[41] = "symbol=Nb;name=Niobium;period=5;group=5;type=Transition Metals;"
pt[42] = "symbol=Mo;name=Molybdenum;period=5;group=6;type=Transition Metals;"
pt[43] = "symbol=Tc;name=Technetium;period=5;group=7;type=Transition Metals;"
pt[44] = "symbol=Ru;name=Ruthenium;period=5;group=8;type=Transition Metals;"
pt[45] = "symbol=Rh;name=Rhodium;period=5;group=9;type=Transition Metals;"
pt[46] = "symbol=Pd;name=Palladium;period=5;group=10;type=Transition Metals;"
pt[47] = "symbol=Ag;name=Silver;period=5;group=11;type=Transition Metals;"
pt[48] = "symbol=Cd;name=Cadmium;period=5;group=12;type=Transition Metals;"
pt[49] = "symbol=In;name=Indium;period=5;group=13;type=Post-Transition Metals;"
pt[50] = "symbol=Sn;name=Tin;period=5;group=14;type=Post-Transition Metals;"
pt[51] = "symbol=Sb;name=Antimony;period=5;group=15;type=Metalloids;"
pt[52] = "symbol=Te;name=Tellurium;period=5;group=16;type=Metalloids;"
pt[53] = "symbol=I;name=Iodine;period=5;group=17;type=Halogens;"
pt[54] = "symbol=Xe;name=Xenon;period=5;group=18;type=Noble Gases;"
pt[55] = "symbol=Cs;name=Caesium;period=6;group=1;type=Alkali Metals;"
pt[56] = "symbol=Ba;name=Barium;period=6;group=2;type=Alkaline Earth Metals;"
pt["*"] = "period=6;group=3;type=Lanthanides;"
pt[57] = "symbol=La;name=Lanthanum;period=9;group=3;type=Lanthanides;"
pt[58] = "symbol=Ce;name=Cerium;period=9;group=4;type=Lanthanides;"
pt[59] = "symbol=Pr;name=Praseodymium;period=9;group=5;type=Lanthanides;"
pt[60] = "symbol=Nd;name=Neodymium;period=9;group=6;type=Lanthanides;"
pt[61] = "symbol=Pm;name=Promethium;period=9;group=7;type=Lanthanides;"
pt[62] = "symbol=Sm;name=Samarium;period=9;group=8;type=Lanthanides;"
pt[63] = "symbol=Eu;name=Europium;period=9;group=9;type=Lanthanides;"
pt[64] = "symbol=Gd;name=Gadolinium;period=9;group=10;type=Lanthanides;"
pt[65] = "symbol=Tb;name=Terbium;period=9;group=11;type=Lanthanides;"
pt[66] = "symbol=Dy;name=Dysprosium;period=9;group=12;type=Lanthanides;"
pt[67] = "symbol=Ho;name=Holmium;period=9;group=13;type=Lanthanides;"
pt[68] = "symbol=Er;name=Erbium;period=9;group=14;type=Lanthanides;"
pt[69] = "symbol=Tm;name=Thulium;period=9;group=15;type=Lanthanides;"
pt[70] = "symbol=Yb;name=Ytterbium;period=9;group=16;type=Lanthanides;"
pt[71] = "symbol=Lu;name=Lutetium;period=9;group=17;type=Lanthanides;"
pt[72] = "symbol=Hf;name=Hafnium;period=6;group=4;type=Transition Metals;"
pt[73] = "symbol=Ta;name=Tantalum;period=6;group=5;type=Transition Metals;"
pt[74] = "symbol=W;name=Tungsten;period=6;group=6;type=Transition Metals;"
pt[75] = "symbol=Re;name=Rhenium;period=6;group=7;type=Transition Metals;"
pt[76] = "symbol=Os;name=Osmium;period=6;group=8;type=Transition Metals;"
pt[77] = "symbol=Ir;name=Iridium;period=6;group=9;type=Transition Metals;"
pt[78] = "symbol=Pt;name=Platinum;period=6;group=10;type=Transition Metals;"
pt[79] = "symbol=Au;name=Gold;period=6;group=11;type=Transition Metals;"
pt[80] = "symbol=Hg;name=Mercury;period=6;group=12;type=Transition Metals;"
pt[81] = "symbol=Tl;name=Thallium;period=6;group=13;type=Post-Transition Metals;"
pt[82] = "symbol=Pb;name=Lead;period=6;group=14;type=Post-Transition Metals;"
pt[83] = "symbol=Bi;name=Bismuth;period=6;group=15;type=Post-Transition Metals;"
pt[84] = "symbol=Po;name=Polonium;period=6;group=16;type=Metalloids;"
pt[85] = "symbol=At;name=Astatine;period=6;group=17;type=Halogens;"
pt[86] = "symbol=Rn;name=Radon;period=6;group=18;type=Noble Gases;"
pt[87] = "symbol=Fr;name=Francium;period=7;group=1;type=Alkali Metals;"
pt[88] = "symbol=Ra;name=Radium;period=7;group=2;type=Alkaline Earth Metals;"
pt["**"] = "period=7;group=3;type=Actinides;"
pt[89] = "symbol=Ac;name=Actinium;period=10;group=3;type=Actinides;"
pt[90] = "symbol=Th;name=Thorium;period=10;group=4;type=Actinides;"
pt[91] = "symbol=Pa;name=Protactinium;period=10;group=5;type=Actinides;"
pt[92] = "symbol=U;name=Uranium;period=10;group=6;type=Actinides;"
pt[93] = "symbol=Np;name=Neptunium;period=10;group=7;type=Actinides;"
pt[94] = "symbol=Pu;name=Plutonium;period=10;group=8;type=Actinides;"
pt[95] = "symbol=Am;name=Americium;period=10;group=9;type=Actinides;"
pt[96] = "symbol=Cm;name=Curium;period=10;group=10;type=Actinides;"
pt[97] = "symbol=Bk;name=Berkelium;period=10;group=11;type=Actinides;"
pt[98] = "symbol=Cf;name=Californium;period=10;group=12;type=Actinides;"
pt[99] = "symbol=Es;name=Einsteinium;period=10;group=13;type=Actinides;"
pt[100] = "symbol=Fm;name=Fermium;period=10;group=14;type=Actinides;"
pt[101] = "symbol=Md;name=Mendelevium;period=10;group=15;type=Actinides;"
pt[102] = "symbol=No;name=Nobelium;period=10;group=16;type=Actinides;"
pt[103] = "symbol=Lr;name=Lawrencium;period=10;group=17;type=Actinides;"
pt[104] = "symbol=Rf;name=Rutherfordium;period=7;group=4;type=Transition Metals;"
pt[105] = "symbol=Db;name=Dubnium;period=7;group=5;type=Transition Metals;"
pt[106] = "symbol=Sg;name=Seaborgium;period=7;group=6;type=Transition Metals;"
pt[107] = "symbol=Bh;name=Bohrium;period=7;group=7;type=Transition Metals;"
pt[108] = "symbol=Hs;name=Hassium;period=7;group=8;type=Transition Metals;"
pt[109] = "symbol=Mt;name=Meitnerium;period=7;group=9;type=Transition Metals;"
pt[110] = "symbol=Ds;name=Darmstadtium;period=7;group=10;type=Transition Metals;"
pt[111] = "symbol=Rg;name=Unununium;name2=Roentgenium;period=7;group=11;type=Transition Metals;"
pt[112] = "symbol=Cn;name=Ununbium;name2=Copernicium;period=7;group=12;type=Transition Metals;"
pt[113] = "symbol=Uut;name=Ununtrium;period=7;group=13;type=Post-Transition Metals;"
pt[114] = "symbol=Fl;name=Ununquadium;name2=Flerovium;period=7;group=14;type=Post-Transition Metals;"
pt[115] = "symbol=Uup;name=Ununpentium;period=7;group=15;type=Post-Transition Metals;"
pt[116] = "symbol=Lv;name=Ununhexium;name2=Livermorium;period=7;group=16;type=Post-Transition Metals;"
pt[117] = "symbol=Uus;name=Ununseptium;period=7;group=17;type=Halogens;"
pt[118] = "symbol=Uuo;name=Ununoctium;period=7;group=18;type=Noble Gases;"
EndSub