笔记6:字体



字体对象。有属性:字型、字体大小、字体样式等。

重要:创建的字体对象后,其属性为只读。因此创建时须考虑好。


FontFamily 字体家庭成员

这是什么意思?

把字体相似的一些字体归纳到一个大家庭中,即集合中FontFamilies。

那么其中的每一个字体就是其中的成员。

为什么产生这个?

当程序传到另一处时,别处无对应字体时,就应用另一个家庭成员的字体来代替,故又称后备字体。

例如:网页设计好后,传到用户处,但用户处无对应字体,一般这时会用宋体之类的来代替。


注意:FontFamily的构造函数,只取字体来设置,不能对其设置样式、大小,比如不能设置其大小。






字体的样式

有时为了简化,可以设置其中一个基准的fontfamily,然后真正使用的字体来具体创建大小和样式:

(因为字体对象一创建后不能更改属性,所以不能偷懒通过属性来更改大小 之类的)


Imports System.Drawing
Public Class Form1

    Private Sub Button1_Click(sender As Object,e As EventArgs) Handles Button1.Click
        Dim fnf As New FontFamily("方正启体简体")
        Dim gr As Graphics = Me.CreateGraphics
        Dim br As New SolidBrush(Color.Crimson)

        Dim fn(3) As Font
        fn(0) = New Font(fnf,14,FontStyle.Bold)
        fn(1) = New Font(fnf,FontStyle.Italic)
        fn(2) = New Font(fnf,FontStyle.Strikeout)
        fn(3) = New Font(fnf,FontStyle.Underline)

        For i As Int32 = 0 To 3
            gr.DrawString("云地闪",fn(i),Brushes.Brown,10,10 + i * 23)
        Next
    End Sub
End Class






字体的属性

看一下属性:


Imports System.Drawing
Public Class Form1

    Private Sub Button1_Click(sender As Object,e As EventArgs) Handles Button1.Click
        Dim fn As New Font("宋体",0.2,FontStyle.Bold,GraphicsUnit.Inch)
        Dim gr As Graphics = Me.CreateGraphics
        Dim br As New SolidBrush(Color.Crimson)

        'Height是像素单位(上面设置是0.2inch,输出是22像素)
        Dim s As String = "字体名:" & fn.Name & vbCrLf _
                         & "字体大小:" & fn.Size & vbCrLf _
                         & "字体间距:" & fn.Height & vbCrLf _
                         & "字体样式:" & fn.Style.ToString & vbCrLf

        gr.DrawString(s,fn,10)
    End Sub
End Class






字体对象的方法:


Imports System.Drawing
Public Class Form1

    Private Sub Button1_Click(sender As Object,11,FontStyle.Italic)
        Dim cfn As Font = fn.Clone     '克隆,创建副本
        Dim gr As Graphics = Me.CreateGraphics

        gr.DrawString(cfn.Equals(fn),cfn,Brushes.BurlyWood,10)
        gr.DrawString(fn.GetHashCode,Brushes.Black,25) '哈希值验证两字体数值一致
        gr.DrawString(cfn.GetHashCode,Brushes.CadetBlue,40)
        gr.DrawString(cfn.GetHeight,55) '属性中Height是该值取整
        gr.DrawString(cfn.ToHfont,Brushes.Chocolate,70) '字体句柄
        gr.DrawString(cfn.ToString,Brushes.Red,85)
    End Sub
End Class








字体透明

即,使用颜色时,用透明颜色fromArgb

formArgb(int32,color) 第一个int32就是0-255表明透明度,255不透明,0完全透明。

Imports System.Drawing
Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles Button1.Click
        Dim br1 As New SolidBrush(Color.Red)
        Dim col As Color = Color.FromArgb(100,Color.Red)
        Dim br2 As New SolidBrush(col)
        Dim gr As Graphics = PictureBox1.CreateGraphics
        Dim fn As New Font("宋体",60,FontStyle.Bold)

        gr.DrawString("云地闪",br1,0)
        gr.DrawString("云地闪",br2,0 + fn.Height) '透明字体
        gr.DrawString("指定矩形内输出文本",New Rectangle(0,2 * fn.Height,200,300)) '在指定矩形区域输出文字
    End Sub
End Class

注意:一般都是从左到右输出。可以用rectangle来指定输出的文字的区域,这样,文字就自动换行输出。












文字渐变与透明

下面弄一个渐变的文字效果及叠加透明


为了看清是因为笔刷brush的原因造成,下面定义时放在一个语句中,所以brush的定义有点长:

Imports System.Drawing
Imports System.Drawing.Drawing2D
Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles Button1.Click
        Dim br1 As New LinearGradientBrush(New Point(0,0),New Point(150,150),Color.Red,Color.Blue)
        Dim br2 As New LinearGradientBrush(New Point(0,300),Color.FromArgb(150,Color.Red),Color.Blue))
        Dim gr As Graphics = PictureBox1.CreateGraphics
        Dim fn As New Font("宋体",FontStyle.Bold)


        gr.DrawString("找对象",0) '渐变色文字
        gr.DrawString("找对象",150) '渐变色透明文字
    End Sub
End Class
注意: 再次点击button1时,会在原位置叠加,多次点击,透明效果就失效了:)









文字的对齐

文字对齐有水平的左、中、右;以及垂直的上、中、下对齐。

都是通过StringFromat的属性FormatFlag这个标志来设置。


Imports System.Drawing
Imports System.Drawing.Drawing2D
Public Class Form1

    Private Sub Button1_Click(sender As Object,e As EventArgs) Handles Button1.Click
        Dim br As New LinearGradientBrush(New Point(0,New Point(200,230),Color.White,Color.Green)
        Dim fn As New Font("楷体",12,FontStyle.Bold)
        Dim gr As Graphics = PictureBox1.CreateGraphics
        Dim sf As New Drawing.StringFormat
        Dim sText As String = "文件夹是可以在其中存储文件的容器。如果在桌面上放置数以千计的纸质文件," _
                              & "要在需要时查找某个特定文件几乎是不可能的。这就是人们时常把纸质文件存" _
                              & "储在文件柜内文件夹中的原因。"

        sf.Alignment = StringAlignment.Far '水平对齐:以左上角为基准,near居左,far居中,center居中
        sf.LineAlignment = StringAlignment.Center '垂直对齐:near居上,far居下,center居中
        gr.DrawString(sText,br,New Rectangle(10,sf) '最后参数指明显示模式
        gr.DrawRectangle(Pens.White,230)) '矩形
    End Sub
End Class








文字的垂直输出


'垂直对齐

Public Class Form1
    Private Sub Button1_Click(sender As Object,e As EventArgs) Handles Button1.Click
        Dim gr As Graphics = Me.CreateGraphics
        Dim sf As New StringFormat

        sf.FormatFlags = StringFormatFlags.DirectionVertical '垂直对齐
        gr.DrawString("垂直效果文字",New Font("宋体",14),New Point(10,10),sf)
    End Sub
End Class






文字的制表位(按表格方式输出)

主要有两个:1、ControlChars集合中控制符的输出

2、StringFormat有方法SetTabStop,来设置一个数组(含有每列的间距)


Imports System.Drawing
Imports System.Drawing.Drawing2D
Public Class Form1

    Private Sub Button1_Click(sender As Object,e As EventArgs) Handles Button1.Click
        Dim s As String = "Name" & ControlChars.Tab & "Test1" & ControlChars.Tab & "Test2" _
                         & ControlChars.Tab & "Test3" & Chr(10)
        s &= "Joe" & ControlChars.Tab & "99" & ControlChars.Tab & "88" & ControlChars.Tab & "91" & ControlChars.Tab & Chr(10)
        s &= "Mary" & ControlChars.Tab & "78" & ControlChars.Tab & "66" & ControlChars.Tab & "33" & ControlChars.Tab & Chr(10)
        s &= "Sam" & ControlChars.Tab & "65" & ControlChars.Tab & "44" & ControlChars.Tab & "66" & ControlChars.Tab & Chr(10)
        s &= "Tom" & ControlChars.Tab & "87" & ControlChars.Tab & "45" & ControlChars.Tab & "22" & ControlChars.Tab & Chr(10)


        Dim gr As Graphics = PictureBox1.CreateGraphics
        Dim fn As New Font("楷体",FontStyle.Regular)
        Dim br As New SolidBrush(Color.Red)
        Dim sf As New StringFormat
        Dim tabs() As Single = {150,50,100,100}


        sf.SetTabStops(0,tabs) '设置制表位(间隔,如图所示)
        gr.DrawString(s,455,100),sf)
    End Sub
End Class






文字的修正(抗锯齿)

文字变大后,其中的锯齿就显得非常明显。可以通过System.Drawing.Text.TextRenderingHint中,专门对文字效果的修正。

可以看到放大后:弯曲及斜线部分的锯齿情况:


'抗锯齿等效果
Imports System.Drawing
Imports System.Drawing.Drawing2D
Imports System.Drawing.Text.TextRenderingHint '文本质量控制
Public Class Form1
    Private Sub Button1_Click(sender As Object,e As EventArgs) Handles Button1.Click
        Dim gr As Graphics = Me.CreateGraphics

        gr.DrawString("地",FontStyle.Bold),10))

        gr.TextRenderingHint = AntiAlias
        'gr.TextRenderingHint = AntiAliasGridFit
        'gr.TextRenderingHint = ClearTypeGridFit
        'gr.TextRenderingHint = SingleBitPerPixelGridFit
        gr.DrawString("地",10))

        gr.TextRenderingHint = SingleBitPerPixel
        gr.DrawString("地",New Point(300,10))
    End Sub
End Class

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Format[$] ( expr [ , fmt ] ) format 返回变体型 format$ 强制返回为文本 -------------------------------- 数字类型的格式化 --------------------------------     固定格式参数:     General Number 普通数字,如可以用来去掉千位分隔号     format$("100,1
VB6或者ASP 格式化时间为 MM/dd/yyyy 格式,竟然没有好的办法, Format 或者FormatDateTime 竟然结果和系统设置的区域语言的日期和时间格式相关。意思是尽管你用诸如 Format(Now, "MM/dd/yyyy"),如果系统的设置格式区域语言的日期和时间格式分隔符是"-",那他还会显示为 MM-dd-yyyy     只有拼凑: <%response.write
在项目中添加如下代码:新建窗口来显示异常信息。 Namespace My ‘全局错误处理,新的解决方案直接添加本ApplicationEvents.vb 到工程即可 ‘添加后还需要一个From用来显示错误。如果到这步还不会则需要先打好基础啦 ‘======================================================== ‘以下事件
转了这一篇文章,原来一直想用C#做k3的插件开发,vb没有C#用的爽呀,这篇文章写与2011年,看来我以前没有认真去找这个方法呀。 https://blog.csdn.net/chzjxgd/article/details/6176325 金蝶K3 BOS的插件官方是用VB6编写的,如果  能用.Net下的语言工具开发BOS插件是一件很愉快的事情,其中缘由不言而喻,而本文则是个人首创,实现在了用V
Sub 分列() ‘以空格为分隔符,连续空格只算1个。对所选中的单元格进行处理 Dim m As Range, tmpStr As String, s As String Dim x As Integer, y As Integer, subStr As String If MsgBox("确定要分列处理吗?请确定分列的数据会覆盖它后面的单元格!", _
  窗体代码 1 Private Sub Text1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single) 2 Dim path As String, hash As String 3 For Each fil
  Imports MySql.Data.MySqlClient Public Class Form1 ‘ GLOBAL DECLARATIONS Dim conString As String = "Server=localhost;Database=net2;Uid=root;Pwd=123456;" Dim con As New MySqlConnection
‘導入命名空間 Imports ADODB Imports Microsoft.Office.Interop   Private Sub A1() Dim Sql As String Dim Cnn As New ADODB.Connection Dim Rs As New ADODB.Recordset Dim S As String   S = "Provider=OraOLEDB.Oracl
Imports System.IO Imports System.Threading Imports System.Diagnostics Public Class Form1 Dim A(254) As String    Function ping(ByVal IP As Integer) As String Dim IPAddress As String IPAddress = "10.0.
VB运行EXE程序,并等待其运行结束 参考:https://blog.csdn.net/useway/article/details/5494084 Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long Pr
今天碰到一个问题,登陆的时候,如果不需要验证手机号为空,则不去验证手机号 因为登陆的时候所有的验证信息都存放在一个数组里 Dim CheckUserInfo() As String ={UserBirthday, SecEmail, UserMob, UserSex, RealNameFirst, RealName, CheckCardID, CheckCardType, Contactemail
在VB6.0中,数据访问接口有三种: 1、ActiveX数据对象(ADO) 2、远程数据对象(RDO) 3、数据访问对象(DAO) 1.使用ADO(ActiveX Data Objec,ActiveX数据对象)连接SQL Server 1)使用ADO控件连接 使用ADO控件的ConnectionString属性就可以连接SQL Server,该属性包含一个由分号分隔的argument=value语
注:大家如果没有VB6.0的安装文件,可自行百度一下下载,一般文件大小在200M左右的均为完整版的软件,可以使用。   特别提示:安装此软件的时候最好退出360杀毒软件(包括360安全卫士,电脑管家等,如果电脑上有这些软件的话),因为现如今的360杀毒软件直接会对VB6.0软件误报,这样的话就可能会在安装过程中被误报阻止而导致安装失败,或者是安装后缺乏很多必须的组件(其它的杀毒软件或安全卫士之类的
Private Sub Form_Load() Call conndb End Sub Private Function conndb() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Dim strCn, sql As String Dim db_host As String Dim db_user As String
  PPSM06S70:  Add  moddate  EDITSPRINTJOB:  MAX(TO_CHAR(ETRN.MODDATE, ‘yyyy/mm/dd/HH24:MI AM‘)) ACTUAL_SHIPDATE   4.Test Scenario (1) :Query SQL Test DN:8016578337 SELECT CTRN.TKCTID TRUCK_ID,        
  沒有出現CrystalReportViewer時,須安裝CRforVS_13_0. 新增1個數據集,新增1個數據表,添加二列,列名要和資料庫名一樣. 修改目標Framework 修改app.config, <startup >改成<startup useLegacyV2RuntimeActivationPolicy ="true">  CrystalReport1.rpt增加數據庫專家 在表單
Imports System.Threading Imports System Public Class Form1 Dim th1, th2 As Thread Public Sub Method1() Dim i As Integer For i = 1 To 100 If Me.Label1.BackColor =
Friend Const PROCESS_ALL_ACCESS = &H1F0FFF = 2035711 Friend Const PROCESS_VM_READ = &H10 Friend Const PROCESS_VM_WRITE = &H20 Friend Const PAGE_READONLY = &H2 Friend Const PAGE_READWRITE = &H4 Friend
以下代码随手写的 并没有大量测试 效率也有待提升 如果需要C#的请自行转换 Function SplitBytes(Data As Byte(), Delimiter As Byte()) As List(Of Byte()) Dim i = 0 Dim List As New List(Of Byte()) Dim bytes As New
Imports System.Data.SqlClient Public Class Form1 REM Public conn1 As SqlConnection = New SqlConnection("server=.; Integrated Security=False;Initial Catalog= mydatabase1; User ID= sa;password")