• Thứ Ba, 16/12/2003 14:57 (GMT+7)

    Quay Text trong VB


    Đôi khi trong các chương trình ứng dụng chúng ta cần bố trí chữ theo chiều khác với chiều nằm ngang, ví dụ như tên cho trục đứng trong các đồ thị. Trong VB, người dùng không thể tuỳ tiện bố trí chữ theo chiều bất kì, vì thế đôi khi gặp khó khăn khi muốn trang trí trên form.
    Ở đây tôi xin giới thiệu một chương trình quay chữ đơn giản để các bạn tham khảo. Chương trình này cho phép quay chữ theo bất kỳ góc nào. Lưu ý là chỉ những font theo kiểu bitmap mới cho phép quay.
    Chương trình gồm có một Form, một Textbox để nhập giá trị góc mà người dùng muốn quay, nút lệnh Done để thực hiện quay chữ. Chú ý rằng để in chữ trên form bằng lệnh Print thì nhất thiết form phải đặt thuộc tính AutoRedraw là True. Font chữ được chọn ở đây là Arial. Dưới đây là mã lệnh của Form và Module.

     

    Code cho Form1
    Option Explicit
    Dim udtFont As LOGFONT ‘to create a logical font type
    Dim lHandleFont As Long ‘handle for new (logical) font
    Dim lOldFont As Long ‘handle of old font
    Dim lRetVal As Long ‘acts for storing return value

    Private Sub Command1_Click()

      ‘logical font

      With udtFont

        .lfEscapement = Val(Text1.Text) * 10

        .lfFaceName = “Arial” & Chr$(0)

        .lfHeight = (9 * -20) / Screen.TwipsPerPixelY ‘try change this to test font size

      End With

      Cls

      lHandleFont = CreateFontIndirect(udtFont)

      lOldFont = SelectObject(Form1.hdc, lHandleFont)

        CurrentX = Me.ScaleWidth / 2

        CurrentY = Me.ScaleHeight / 2

        Print “Rotation Text”

      lRetVal = SelectObject(Form1.hdc, lOldFont)

      lRetVal = DeleteObject(lHandleFont)

    End Sub
    Private Sub Form_Load()
    Command1_Click
    End SubOption Explicit

     

    Code cho Module1
    Option Explicit

    ‘API declarations font handling

    Public Declare Function SelectObject Lib “gdi32” (ByVal hdc As Long, ByVal hObject As Long) As Long

    Public Declare Function DeleteObject Lib “gdi32” (ByVal hObject As Long) As Long

    Public Declare Function CreateFontIndirect Lib “gdi32” Alias
                    “CreateFontIndirectA” (lpLogFont As LOGFONT) As Long

    Public Type LOGFONT

      lfHeight As Long

      lfWidth As Long

      lfEscapement As Long

      lfOrientation As Long

      lfWeight As Long

      lfItalic As Byte

      lfUnderline As Byte

      lfStrikeOut As Byte

      lfCharSet As Byte

      lfOutPrecision As Byte

      lfClipPrecision As Byte

      lfQuality As Byte

      lfPitchAndFamily As Byte

      lfFaceName As String * 32

      ‘lfFaceName(1 To LF_FACESIZE) As Byte ‘original type declaration from API Viewer

    End Type
    Hy vọng chương trình này có thể giúp ích cho các bạn.

    Nguyễn Cảnh Phong
    nothingbutfamily@yahoo.com

    ID: A0301_85