Cỏc kỹ thuật Việt hoỏ giao diện

Một phần của tài liệu Chương trình tính toán tường chắn hố móng sâu (Trang 110 - 114)

b. Dữ liệu phục vụ mụ tả mụ hỡnh bài toỏn trong Sap2000:

8.3.8.Cỏc kỹ thuật Việt hoỏ giao diện

Để người dựng thuận tiện trong sử dụng thỡ cỏc thanh cụng cụ, tiờu đề của biểu mẫu được Việt hoỏ là vấn đề rất được quan tõm của cỏc nhà lập trỡnh.

Dưới đõy xin trỡnh bày hai kỹ thuật việt hoỏ giao diện, đú là sử dụng phần mềm làm menu cho chương trỡnh để cú thể cú được menu bằng tiếng Việt và dựng hàm API để việt hoỏ thanh tiờu đề cho biểu mẫu trong chương trỡnh mà khụng cần phải đổi phụng chữ của hệ điều hành.

a. Thiết kế menu

Để thiết kế menu bằng bảng mó Unicode và cú thể hiển thị tiếng Việt khi chạy chương trỡnh ta dựng cụng cụ soạn thảo menu, thanh cụng cụ của hóng Sheridan cú tờn là ActiveBar. Phần mềm này hỗ trợ ActiveX cho chương trỡnh và giỳp tạo menu một cỏch dễ dàng, cú thể thờm vào bờn cạnh menu là hỡnh ảnh minh hoạ. Đặc biệt là nú hỗ trợ tiếng Việt Unicode với thuộc tớnh dựng phụng chữ của điều khiển, khụng dựng phụng chữ của hệ thống. Do vậy mà chương trỡnh cú thể hiển thị được tiếng Việt trờn thanh menu.

Với cụng cụ này, menu xõy dựng đến đõu sẽ được hiển thị tới đú, người dựng cú thể biết trước được menu của mỡnh xõy dựng sẽ ra sao. Và cú thể sửa đổi nếu muốn.

b. Việt hoỏ thanh tiờu đề của biểu mẫu

Phụng chữ hiển thị trờn thanh tiờu đề của biểu mẫu là phụng chữ của hệ thống. Do vậy, nếu dựng bất kỳ một cụng cụ soạn thảo nào đều khụng thể hiển thị tiếng Việt trờn thanh tiờu đề này. Ta phải dựng hàm API can thiệp vào hệ thống để cú thể hiển thị tiếng Việt trờn thanh tiờu đề.

Khi nào biểu mẫu được hiển thị trờn màn hỡnh thỡ hệ thống sẽ nhận được thụng điệp từ chương trỡnh thụng qua cỏc hàm API “bỏo” rằng phải hiển thị thanh tiờu đề ấy với phụng chữ hiển thị mà chương trỡnh chỉ ra.

Public oldWndProc As Long

Public Const FONT_FACE = "ABC-VBClubFont" Public Const GWL_WNDPROC = (-4&)

Public Const WM_NCPAINT = &H85 Public Const WM_NCACTIVATE = &H86 Public Const SM_CYCAPTION = 4& Public Const SM_CXSMICON = 49 Public Const SM_CXFRAME = 32 Public Const SM_CYFRAME = 33 Public Const NEWTRANSPARENT = 3 Public Const DT_SINGLELINE = &H20 Public Const DT_VCENTER = &H4 Public Const DT_EXPANDTABS = &H40 Public Const COLOR_CAPTIONTEXT = 9

Public Const COLOR_INACTIVECAPTIONTEXT = 19 Public Type RECT

Left As Long Top As Long

Thanh tiờu đề

Right As Long Bottom As Long End Type

Public Type MEASUREITEMSTRUCT CtlType As Long CtlID As Long itemID As Long itemWidth As Long itemHeight As Long ItemData As Long End Type

Public Type DRAWITEMSTRUCT CtlType As Long CtlID As Long itemID As Long itemAction As Long itemState As Long hwndItem As Long hdc As Long rcItem As RECT ItemData As Long End Type

Declare Function SetBkMode Lib "gdi32" (ByVal hdc As Long, ByVal nBkMode As Long) As Long

Declare Function CreateFont Lib "gdi32" Alias "CreateFontA" (ByVal H As Long, ByVal W As Long, ByVal E As Long, ByVal O As Long, ByVal W As Long, ByVal i As Long, ByVal U As Long, ByVal S As Long, ByVal C As Long, ByVal OP As Long, ByVal CP As Long, ByVal Q As Long, ByVal PAF As Long, ByVal F As String) As Long

Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long

Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long

Declare Function SetTextColor Lib "gdi32" (ByVal hdc As Long, ByVal crColor As Long) As Long

Declare Function DrawTextEx Lib "user32" Alias "DrawTextExA" (ByVal hdc As Long, ByVal lpsz As String, ByVal n As Long, lpRect As RECT, ByVal un As Long, lpDrawTextParams As Any) As Long

Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd&, ByVal nIndex&, ByVal dwNewLong&) As Long

Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long

Declare Function GetSysColor Lib "user32" (ByVal nIndex As Long) As Long Declare Function GetActiveWindow Lib "user32" () As Long

Declare Function GetWindowDC Lib "user32" (ByVal hwnd As Long) As Long Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long

Function NewWndProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Dim hdc As Long, uRCT As RECT

Dim uDIS As DRAWITEMSTRUCT, uMIS As MEASUREITEMSTRUCT Dim hBrush As Long, hPen As Long (adsbygoogle = window.adsbygoogle || []).push({});

Dim hOldBrush As Long, hOldPen As Long Dim iTextColor As Long, iMenuColor As Long Dim bSelected As Boolean

NewWndProc = CallWindowProc(oldWndProc, hwnd, uMsg, wParam, lParam) Select Case uMsg

Case WM_NCACTIVATE, WM_NCPAINT hdc = GetWindowDC(hwnd)

uRCT.Left = GetSystemMetrics(SM_CXFRAME) + GetSystemMetrics(SM_CXSMICON) + 4

uRCT.Top = GetSystemMetrics(SM_CYFRAME) uRCT.Right = uRCT.Left + 200

uRCT.Bottom = uRCT.Top + GetSystemMetrics(SM_CYCAPTION) - 1 113

If uMsg = WM_NCACTIVATE Then

If wParam Then iTextColor = COLOR_CAPTIONTEXT Else iTextColor = COLOR_INACTIVECAPTIONTEXT

Else

If hwnd = GetActiveWindow() Then iTextColor =

COLOR_CAPTIONTEXT Else iTextColor =

COLOR_INACTIVECAPTIONTEXT End If

DrawString hdc, uRCT, FORM_CAPTION, True, iTextColor ReleaseDC hwnd, hdc

End Select End Function

Private Sub DrawString(hdc As Long, uRCT As RECT, sText As String, bBold As Boolean, iColor As Long)

Dim hFont As Long, hOldFont As Long, hOldColor As Long SetBkMode hdc, NEWTRANSPARENT

hOldColor = SetTextColor(hdc, GetSysColor(iColor))

hFont = CreateFont(16, 0, 0, 0, 500 + Abs(bBold) * 200, 0, 0, 0, 0, 0, 0, 0, 0, FONT_FACE)

hOldFont = SelectObject(hdc, hFont)

DrawTextEx hdc, sText, Len(sText), uRCT, DT_SINGLELINE Or DT_VCENTER Or DT_EXPANDTABS, ByVal 0&

SetTextColor hdc, hOldColor SelectObject hdc, hOldFont DeleteObject hFont

End Sub

Với hai kỹ thuật Việt hoỏ giao diện này, ta cú thể hiển thị tiếng Việt cho chương trỡnh mà khụng phải đổi phụng chữ của hệ thống.

Một phần của tài liệu Chương trình tính toán tường chắn hố móng sâu (Trang 110 - 114)