[原创]程序员更需要保护眼睛 -- 实用工具Visual Studio StyleManager

it2022-05-23  71

[原创]程序员更需要保护眼睛 -- 实用工具Visual Studio StyleManager

作者:Walkdan(walkdan<at>gmail.com), http://www.cnblogs.com/walkdan 虽然白底具有最丰富的视觉效果,不过我并不喜欢用白底的编辑器,原因只有一个,保护视力。由于黑色没有光线,而白色包含全部光线,所以黑色对眼睛没有刺激,而白色却具有最强的刺激。对于需要长时间盯住屏幕的程序员来说,白色无疑是对眼睛的最大伤害。以前用Delphi编程一直不觉得眼睛累,因为Delphi提供了蓝底的Classic配色方案和黑底的Twilight方案,我更喜欢用Twilight,曾经有段时间看不到黑底,便没有编程的感觉,真是很怀念Delphi。

Visual Studio编辑器很不错,也可以修改配色,到了2005版,更是提供了一百多配色项,但问题是为什么就不弄几个配色方案,这一百多项得你自己慢慢改。

这天眼睛总于受不了,于是用VB.NET写了个简单的宏VS StyleManager,装进Visual Studio中,可以方便的保存和恢复配色方案。同时参考Delphi,写了相应的Classic和Twilight配色方案,现在我又可以用Twilight了,终于能够拯救眼睛了!

现在把宏分享出来,希望能对各位同行的眼睛有所帮助。

Classic方案

Twilight方案 Presentation方案。如果经常做演示,大字体是需要的。 thinkinnight同学提供的vi darkblue方案。

Macro Source Code '' Save & Load ColorAndFont Style for Visual Studio 2003, 2005'''' Copyright 2006 Qiu Dan (walkdan(at)gmail.com)'' http://www.cnblogs.com/walkdan'''' This program is free software; you can redistribute it and/or'' modify it under the terms of the GNU General Public License'' as published by the Free Software Foundation; either version 2'' of the License, or (at your option) any later version.Option Strict OffOption Explicit OffImports SystemImports System.IOImports System.TextImports System.CollectionsImports System.XmlImports System.DrawingImports System.WindowsImports System.Windows.FormsImports EnvDTE'8 for Visual Studio 2005, 7 for Visual Studio 2003#Const VS_VERSION = 8Public Module StyleManagerModule StyleManager    ''--------------------------------------------------------------    ''StyleItem    Public Class StyleItemClass StyleItem        Public Sub New()Sub New()            'Me.New("", 1, 1, False)        End Sub        Public Sub New()Sub New(ByVal name As StringByVal foreground As UInt32, ByVal background As UInt32, ByVal bold As Boolean)            Me.Name = name            Me.Foreground = ColorTranslator.FromOle(Convert.ToInt32(foreground))            Me.Background = ColorTranslator.FromOle(Convert.ToInt32(background))            Me.Bold = bold        End Sub        Public Shared Function DeSerializeFromXml()Function DeSerializeFromXml(ByVal node As XmlNode) As StyleItem            Dim item As New StyleItem            item.Name = node.Attributes.ItemOf("name").Value            Try                item.Foreground = ColorTranslator.FromHtml(node.Attributes.ItemOf("foreground").Value)                item.Background = ColorTranslator.FromHtml(node.Attributes.ItemOf("background").Value)                item.Bold = Boolean.Parse(node.Attributes.ItemOf("bold").Value)            Catch            End Try            Return item        End Function        Public Sub SerializeToXml()Sub SerializeToXml(ByVal writer As XmlTextWriter)            writer.WriteStartElement("FontColorItem")            writer.WriteAttributeString("name"Me.Name)            writer.WriteAttributeString("foreground", ColorTranslator.ToHtml(Me.Foreground))            writer.WriteAttributeString("background", ColorTranslator.ToHtml(Me.Background))            writer.WriteAttributeString("bold"Me.Bold.ToString)            writer.WriteEndElement()        End Sub        ' Properties        Public Property Background()Property Background() As Color            Get                Return Me._background            End Get            Set(ByVal value As Color)                Me._background = value            End Set        End Property        Public Property Bold()Property Bold() As Boolean            Get                Return Me._bold            End Get            Set(ByVal value As Boolean)                Me._bold = value            End Set        End Property        Public Property Foreground()Property Foreground() As Color            Get                Return Me._foreground            End Get            Set(ByVal value As Color)                Me._foreground = value            End Set        End Property        Public Property Name()Property Name() As String            Get                Return Me._name            End Get            Set(ByVal value As String)                Me._name = value            End Set        End Property        ' Fields        Private _foreground As Color        Private _background As Color        Private _bold As Boolean        Private _name As String    End Class    ''--------------------------------------------------------------    ''StyleItemCollection    Public Class StyleItemCollectionClass StyleItemCollection        Inherits CollectionBase        ' Methods        Public Overridable Sub Add()Sub Add(ByVal obj As StyleItem)            MyBase.List.Add(obj)        End Sub        Public Overridable Sub Remove()Sub Remove(ByVal obj As StyleItem)            MyBase.List.Remove(obj)        End Sub        ' Properties        Public Property Item()Property Item(ByVal i As IntegerAs StyleItem            Get                Return CType(MyBase.List.Item(i), StyleItem)            End Get            Set(ByVal value As StyleItem)                MyBase.List.Item(i) = value            End Set        End Property    End Class    ''--------------------------------------------------------------    ''StyleSchema    Public Class StyleSchemaClass StyleSchema        ' Methods        Public Sub New()Sub New(ByVal name As String)            Me.StyleItems = New StyleItemCollection            Me.Name = name        End Sub        Public Shared Function DeSerializeFromXml()Function DeSerializeFromXml(ByVal node As XmlNode) As StyleSchema            Dim style As New StyleSchema(node.Attributes.ItemOf("name").Value)            Try                Dim fontNode As XmlNode = node.SelectSingleNode("Font")                style.Font = New Font(fontNode.Attributes.ItemOf("family").Value, Single.Parse(fontNode.Attributes.ItemOf("size").Value))                Dim nodes As XmlNodeList = node.SelectNodes("FontColorItems/FontColorItem")                For Each itemNode As XmlNode In nodes                    style.StyleItems.Add(StyleItem.DeSerializeFromXml(itemNode))                Next            Catch            End Try            Return style        End Function        Public Sub SerializeToXml()Sub SerializeToXml(ByVal writer As XmlTextWriter)            writer.WriteStartElement("Style")            writer.WriteAttributeString("name"Me.Name)            writer.WriteStartElement("Font")            writer.WriteAttributeString("family"Me.Font.FontFamily.Name)            writer.WriteAttributeString("characterSet""0")            writer.WriteAttributeString("size"Me.Font.Size.ToString)            writer.WriteEndElement()            writer.WriteStartElement("FontColorItems")            Dim item1 As StyleItem            For Each item1 In Me.StyleItems                item1.SerializeToXml(writer)            Next            writer.WriteEndElement()            writer.WriteEndElement()        End Sub        Public Shared Function DeSerializeFromFile()Function DeSerializeFromFile(ByVal filename As StringAs StyleSchema            If File.Exists(filename) Then                Dim doc As New XmlDocument                doc.Load(filename)                Dim node As XmlNode = doc.SelectSingleNode("Styles/Style")                If Not node Is Nothing Then                    Return StyleSchema.DeSerializeFromXml(node)                End If            End If            Return Nothing        End Function        Public Sub SaveToFile()Sub SaveToFile(ByVal filename As String)            If (Not filename Is ""Then                Dim writer As New XmlTextWriter(filename, Encoding.UTF8)                writer.WriteStartDocument(True)                writer.WriteStartElement("Styles")                SerializeToXml(writer)                writer.WriteEndElement()                writer.WriteEndDocument()                writer.Close()            End If        End Sub        Public Sub ApplyToApplication()Sub ApplyToApplication()            Dim dteProperty As [Property ]()Property= DTE.Properties("FontsAndColors""TextEditor").Item("FontFamily")            dteProperty.Value = Font.FontFamily.Name            dteProperty = DTE.Properties("FontsAndColors""TextEditor").Item("FontSize")            dteProperty.Value = Font.Size            Dim fontColorProperty As [Property ]()Property= DTE.Properties("FontsAndColors""TextEditor").Item("FontsAndColorsItems")            For Each item As StyleItem In _styleItems                Dim ci As ColorableItems = fontColorProperty.Object(item.Name)                If Not ci Is Nothing Then                                        ci.Foreground = Convert.ToUInt32(ColorTranslator.ToOle(item.Foreground))                    ci.Background = Convert.ToUInt32(ColorTranslator.ToOle(item.Background))                    ci.Bold = item.Bold                End If            Next        End Sub        Public Shared Function DeSerializeFromApplication()Function DeSerializeFromApplication() As StyleSchema            Dim style As New StyleSchema("default")            Dim fontFamity As String = DTE.Properties("FontsAndColors""TextEditor").Item("FontFamily").Value.ToString            Dim fontSize As Single = Single.Parse(DTE.Properties("FontsAndColors""TextEditor").Item("FontSize").Value.ToString)            style.Font = New Font(fontFamity, fontSize)            Dim fontColorProperty As [Property ]()Property= DTE.Properties("FontsAndColors""TextEditor").Item("FontsAndColorsItems")            Dim ci As ColorableItems            For Each ci In CType(fontColorProperty.Object, FontsAndColorsItems)                style.StyleItems.Add(New StyleItem(ci.Name, ci.Foreground, ci.Background, ci.Bold))            Next            Return style        End Function        ' Properties        Public Property Font()Property Font() As Font            Get                Return Me._font            End Get            Set(ByVal value As Font)                Me._font = value            End Set        End Property        Public Property StyleItems()Property StyleItems() As StyleItemCollection            Get                Return Me._styleItems            End Get            Set(ByVal value As StyleItemCollection)                Me._styleItems = value            End Set        End Property        Public Property Name()Property Name() As String            Get                Return Me._name            End Get            Set(ByVal value As String)                Me._name = value            End Set        End Property        ' Fields        Private _font As Font        Private _styleItems As StyleItemCollection        Private _name As String    End Class    ''--------------------------------------------------------------    Public Class WinWrapperClass WinWrapper        Implements System.Windows.Forms.IWin32Window        Overridable ReadOnly Property Handle()Property Handle() As System.IntPtr Implements System.Windows.Forms.IWin32Window.Handle            Get                Dim iptr As New System.IntPtr(DTE.MainWindow.HWnd)                Return iptr            End Get        End Property    End Class    ''--------------------------------------------------------------    Private Sub InitFileDialog()Sub InitFileDialog(ByRef fileDialog As FileDialog)#If VS_VERSION = 7 Then        fileDialog.Filter = "Visual Studio 2003 style(*.vss7)|*.vss7|All files (*.*)|*.*"#Else        fileDialog.Filter = "Visual Studio 2005 style(*.vss8)|*.vss8|All files (*.*)|*.*"#End If    End Sub    Public Sub SaveSettings()Sub SaveSettings()        Try            Dim winptr As New WinWrapper            Dim SaveFileDialog As New Forms.SaveFileDialog            InitFileDialog(SaveFileDialog)            SaveFileDialog.Title = "Save Style Settings"            If SaveFileDialog.ShowDialog(winptr) = Forms.DialogResult.OK Then                Dim style As StyleSchema                style = StyleSchema.DeSerializeFromApplication()                Dim filename As String = SaveFileDialog.FileName                style.SaveToFile(filename)                MsgBox("Save Finish")            End If        Catch err As System.Exception            MsgBox(err.Message)        End Try    End Sub    ''--------------------------------------------------------------    Public Sub LoadSettings()Sub LoadSettings()        Try            Dim winptr As New WinWrapper            Dim openFileDialog As New Forms.OpenFileDialog            InitFileDialog(openFileDialog)            openFileDialog.Title = "Open Style Settings"            If openFileDialog.ShowDialog(winptr) = Forms.DialogResult.OK Then                Dim filename As String = openFileDialog.FileName                Dim style As StyleSchema = StyleSchema.DeSerializeFromFile(filename)                style.ApplyToApplication()                MsgBox("Load Finish")            End If        Catch err As System.Exception            MsgBox(err.Message)        End Try    End SubEnd Module

------------ 附件提供可以直接使用的StyleManager宏和几个的配色方案。注意这个宏需要处理一百多配色项,运行较慢。

1.安装StyleManager宏:

  a) 打开Visual Studio菜单工具|宏|加载宏项目,打开文件StyleMacros.vsmacros即可。注意不同版本的VS选择不同的宏。

2.使用StyleManager宏:     a) Alt+F8打开宏资源管理器   b) 调入配色方案: 运行StyleManager.LoadSettings宏 --> 调入附件中vss8\目录下的配色方案(VS2003的方案文件是.vss7, VS2005是.vss8)   c) 修改配色: 打开菜单工具|选项 --> 环境|字体和颜色   d) 保存配色方案:运行StyleManager.SaveSettings宏   3. 如果大家能够做出其他不错的配色方案,请发邮件到(walkdan<at>gmail.com),我加入到附件中,让大家分享更多的方案。

转载请注明出处Download: VS StyleManager 1.0.6 for Visual Studio 2003, 2005 Reversion: 2007-03-26 1.0.6 新增加了vi darkblue(VS2005)方案,感谢thinkinnight提供 2006-11-03 1.0.5 新增加了torte(VS2003)方案,感谢大橘子提供 2006-08-06 1.0.4 修改了Code Definition Window配色, 感谢 Seuler.Shi 2006-04-13 1.0.3 修改了Twilight的XML配色方案,value型规范为Yellow 2006-04-12 1.0.2 对于VS2005, 可以直接导入.vssettings文件 2006-04-11 1.0.1 新增加VS2003的蓝色底Classic方案

 

posted on 2006-04-10 03:03 Walkdan 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/walkdan/archive/2006/04/10/370931.html

相关资源:数据结构—成绩单生成器

最新回复(0)