Attribute VB_Name = "Skins" Option Explicit Const skin_type_text = 0 Const skin_type_vline = 1 Const skin_type_hline = 2 Const skin_type_box = 3 Const skin_type_boxfill = 4 Const skin_type_today = 5 Const skin_type_command = 6 Const skin_info_name = 0 Const skin_info_bmp = 1 Const skin_info_sIndex = 2 Const skin_info_eIndex = 3 Const skin_info_dimension = 3 Const skin_type = 0 Const skin_x = 1 Const skin_y = 2 Const skin_w = 3 Const skin_h = 4 Const skin_fgcolor = 5 Const skin_bgcolor = 6 Const skin_size = 7 Const skin_bold = 8 Const skin_caption = 9 Const skin_command = 10 Const skin_align = 11 Const skin_name = 12 Const skin_dimension = 12 Private m_skininfo() Private m_skindata() Public Function SkinCommandGet(whichSkin As Long, x As Long, y As Long) As Long Dim sIndex As Long, eIndex As Long, i As Long sIndex = m_skininfo(whichSkin, skin_info_sIndex) eIndex = m_skininfo(whichSkin, skin_info_eIndex) SkinCommandGet = 0 For i = sIndex To eIndex If (m_skindata(i, skin_type) = skin_type_command) Then If (x >= m_skindata(i, skin_x) And x <= m_skindata(i, skin_x) + m_skindata(i, skin_w)) Then If (y >= m_skindata(i, skin_y) And y <= m_skindata(i, skin_y) + m_skindata(i, skin_h)) Then SkinCommandGet = m_skindata(i, skin_command) Exit For End If End If End If Next i If (i > eIndex) Then i = -1 Exit Function End Function Public Sub SkinCommandPaint(whichSkin As Long, cmd As Long, bHilite As Boolean, pic As PictureBox) Dim sIndex As Long, eIndex As Long, i As Long Dim x As Long, y As Long, w As Long, h As Long, tw As Long, th As Long, astr As String Dim clr As Long, fsize As Long sIndex = m_skininfo(whichSkin, skin_info_sIndex) eIndex = m_skininfo(whichSkin, skin_info_eIndex) For i = sIndex To eIndex If (m_skindata(i, skin_command) = cmd) Then Exit For Next i If (i <= eIndex) Then astr = "" x = m_skindata(i, skin_x) y = m_skindata(i, skin_y) w = m_skindata(i, skin_w) h = m_skindata(i, skin_h) If (m_skindata(i, skin_type) = skin_type_command) Then astr = m_skindata(i, skin_caption) pic.ForeColor = m_skindata(i, skin_fgcolor) If (bHilite) Then If (m_skindata(i, skin_fgcolor) <> -1) Then pic.FillColor = m_skindata(i, skin_fgcolor) Else pic.FillColor = g_colorWhite End If clr = pic.FillColor pic.DrawLine x, y, x + w, y, clr pic.DrawLine x + w - 1, y, x + w - 1, y + h, clr pic.DrawLine x + w - 1, y + h - 1, x, y + h - 1, clr pic.DrawLine x, y + h - 1, x, y, clr Else pic.DrawPicture g_docPath & m_skininfo(whichSkin, skin_info_bmp), x, y, w, h, x, y, w, h End If pic.FontSize = m_skindata(i, skin_size) pic.FontBold = m_skindata(i, skin_bold) tw = pic.TextWidth(astr) th = pic.TextHeight(astr) y = y + (h - th) / 2 Select Case m_skindata(i, skin_align) Case 1 x = x Case 2 x = x + (w - tw) / 2 - 2 Case 3 x = x + w - tw - 4 End Select If (astr <> "") Then pic.DrawText astr, x, y End If End If End If Exit Sub End Sub Public Sub SkinInit() Dim root As Object Dim node As Object, attr As Object, anode As Object Dim i As Long, j As Long, k As Long, ct As Long Set root = g_xml.documentElement Set root = root.selectNodes("Skins/Skin") If (Not root Is Nothing) Then ct = root.length ReDim m_skininfo(ct - 1, skin_info_dimension) j = 0 For i = 0 To ct - 1 Set node = root(i) Set attr = node.Attributes.getNamedItem("Name") If (Not attr Is Nothing) Then m_skininfo(i, skin_info_name) = attr.Text Set attr = node.Attributes.getNamedItem("Bitmap") If (Not attr Is Nothing) Then m_skininfo(i, skin_info_bmp) = attr.Text m_skininfo(i, skin_info_sIndex) = j j = j + node.childNodes.length m_skininfo(i, skin_info_eIndex) = j - 1 Next i ReDim m_skindata(j, skin_dimension) For i = 0 To j - 1 m_skindata(i, skin_bold) = False m_skindata(i, skin_type) = skin_type_text m_skindata(i, skin_bgcolor) = -1 m_skindata(i, skin_fgcolor) = 0 Next i k = 0 For i = 0 To ct - 1 Set node = root(i) For j = 0 To node.childNodes.length - 1 Set anode = node.childNodes(j) For Each attr In anode.Attributes Select Case UCase(attr.Name) Case "X" m_skindata(k, skin_x) = String2Number(attr.Text, 0) Case "Y" m_skindata(k, skin_y) = String2Number(attr.Text, 0) Case "W" m_skindata(k, skin_w) = String2Number(attr.Text, 0) Case "H" m_skindata(k, skin_h) = String2Number(attr.Text, 0) Case "FGCOLOR" m_skindata(k, skin_fgcolor) = String2Number(attr.Text, 0) Case "BGCOLOR" m_skindata(k, skin_bgcolor) = String2Number(attr.Text, 0) Case "SIZE" m_skindata(k, skin_size) = String2Number(attr.Text, 0) Case "BOLD" m_skindata(k, skin_bold) = String2Number(attr.Text, 0) Case "CAPTION" m_skindata(k, skin_caption) = attr.Text Case "CMD" m_skindata(k, skin_command) = String2Number(attr.Text, 0) Case "ALIGN" m_skindata(k, skin_align) = String2Number(attr.Text, 0) Case "NAME" m_skindata(k, skin_name) = attr.Text Case "TYPE" m_skindata(k, skin_type) = String2Number(attr.Text, 0) End Select Next k = k + 1 Next j Next i End If Exit Sub End Sub Public Sub SkinPaint(whichSkin As Long, dwBX As Long, dwBY As Long, dwBW As Long, dwBH As Long, pic As PictureBox) Dim x As Long, y As Long, w As Long, h As Long, tw As Long, th As Long, astr As String Dim clr As Long, fsize As Long Dim sIndex As Long, eIndex As Long, i As Long sIndex = m_skininfo(whichSkin, skin_info_sIndex) eIndex = m_skininfo(whichSkin, skin_info_eIndex) pic.DrawPicture g_docPath & m_skininfo(whichSkin, skin_info_bmp), 0, 0, 240, 268 For i = sIndex To eIndex astr = "" x = dwBX + m_skindata(i, skin_x) y = dwBY + m_skindata(i, skin_y) w = m_skindata(i, skin_w) h = m_skindata(i, skin_h) Select Case m_skindata(i, skin_type) Case skin_type_text, skin_type_command, skin_type_today Select Case m_skindata(i, skin_type) Case skin_type_today astr = FormatDateTime(Date, vbLongDate) Case Else astr = m_skindata(i, skin_caption) End Select If (m_skindata(i, skin_fgcolor) <> -1) Then pic.ForeColor = m_skindata(i, skin_fgcolor) Else pic.ForeColor = g_colorWhite End If If (m_skindata(i, skin_bgcolor) <> -1) Then pic.FillColor = m_skindata(i, skin_bgcolor) pic.DrawLine x, y, x + w, y + h, m_skindata(i, skin_bgcolor), True End If pic.FontSize = m_skindata(i, skin_size) pic.FontBold = m_skindata(i, skin_bold) tw = pic.TextWidth(astr) th = pic.TextHeight(astr) y = y + (h - th) / 2 Select Case m_skindata(i, skin_align) Case 1 x = x Case 2 x = x + (w - tw) / 2 - 2 Case 3 x = x + w - tw - 4 End Select If (astr <> "") Then pic.DrawText astr, x, y End If Case skin_type_vline pic.DrawWidth = m_skindata(i, skin_size) pic.DrawLine x, y, x, y + h, m_skindata(i, skin_fgcolor) Case skin_type_hline pic.DrawWidth = m_skindata(i, skin_size) pic.DrawLine x, y, x + w, y, m_skindata(i, skin_fgcolor) Case skin_type_box pic.DrawWidth = m_skindata(i, skin_size) pic.DrawLine x, y, x + w, y, m_skindata(i, skin_fgcolor) pic.DrawLine x + w, y, x + w, y + h, m_skindata(i, skin_fgcolor) pic.DrawLine x + w, y + h, x, y + h, m_skindata(i, skin_fgcolor) pic.DrawLine x, y, x, y + h, m_skindata(i, skin_fgcolor) Case skin_type_boxfill pic.DrawWidth = m_skindata(i, skin_size) pic.FillColor = m_skindata(i, skin_bgcolor) pic.DrawLine x, y, x + w, y + h, m_skindata(i, skin_bgcolor), True End Select Next i Exit Sub End Sub