Đánh giá chủ đề:
  • 0 Votes - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Hỏi cách đổi Font hàng loạt trên Form ?
#11
(07-09-15, 01:22 PM)paulsteigel Đã viết: Ledangvan ơi, tớ ko có ý trách cứ... chỉ là muốn làm sao để giúp mợi người có hệ thống thôi.
Có lỗi quá.
Xin lỗi bạn nhé

Thực sự là phải cảm ơn bạn nhiều nhiều, mình cũng không có ý gì chỉ là học Tài chính kế toán rồi nghiên cứu thêm món Access thấy nó quản lý và giải quyết được nhiều trong công việc chuyên môn. Mình cũng chẳng qua trường lớp lập trình nào cả, chỉ là tham khảo, cóp nhặt những thủ thuật trên diễn đàn để phục vụ công việc, cho nên nhiều lúc đọc mà không hiểu, làm theo nó báo lỗi cũng chẳng biết sửa làm sao ... Một lần nữa cảm ơn bạn, cảm ơn diễn đàn đã cho mình nhiều kiến thức bổ ích
Chữ ký của ledangvan Xin chào, mình là ledangvan, Tham gia http://thuthuataccess.com/forum từ ngày 22-08 -11.
ღღღღღTài sản của ledangvan (View All Items) ღღღღღ
Reply
Những người đã cảm ơn paulsteigel , Minh Tiên , Noname
#12
Cảm ơn Bác "pausteigel" nhiều nhiều !
Các nội dung Bác chia sẽ thật Pro và hữu ích.
Tôi cũng là dân tay ngang, đam mê ACCESS vì giúp mình rất nhiều trong công việc.
Tôi cũng như Bác "ledangvan" chắc là còn nhiều A/C/E khác nữa chỉ biết góp nhặt, lắp ghép sao cho tiện ích của mình "Bò" được là mừng rồi.
Bản thân tôi rất muốn được đọc những lời góp ý "Hơi nóng" 005  nhưng rất chân thành của Bác.
Một lần nữa rất cảm ơn Bác !
Thân./.
Reply
Những người đã cảm ơn
#13
(07-09-15, 05:11 PM)Minh Tiên Đã viết: Cảm ơn Bác "pausteigel" nhiều nhiều !
Các nội dung Bác chia sẽ thật Pro và hữu ích.
Tôi cũng là dân tay ngang, đam mê ACCESS vì giúp mình rất nhiều trong công việc.
Tôi cũng như Bác "ledangvan" chắc là còn nhiều A/C/E khác nữa chỉ biết góp nhặt, lắp ghép sao cho tiện ích của mình "Bò" được là mừng rồi.
Bản thân tôi rất muốn được đọc những lời góp ý "Hơi nóng" 005  nhưng rất chân thành của Bác.
Một lần nữa rất cảm ơn Bác !
Thân./.

Thực ra thì mình không có ý nóng và cũng không góp ý nóng. Chẳng qua khi đến phần nào đó bất chợt thấy các bạn bị hổng thế là xói vào đó để nhấn mạnh tầm quan trọng của việc ý.
Hồi bên GPE, mình cũng chưa bao giờ góp ý nóng cả. Bên access này, mình thấy mọi người chan hòa nên rất muốn đóng góp.
Thâm chí, muốn cùng các gạo cội xây dựng một chương trình đào tạo VBA/Access tương tác. Nhưng chưa biết nên bắt đầu từ đâu.
Nếu 30% dân văn phòng nhà ta làm được access và excel và biết một chụt VBA, năng suất làm việc sẽ lên cực cao.
Điển hình như bác Phạm Trung Chính ở Mường La Sơn La.
Năm 2003 - chưa có gì, chỉ thích mà giờ đã là chuyên gia VBA
Chữ ký của paulsteigel ====================
Quốc gia hưng vong
Thất phu hữu trách
====================
Reply
Những người đã cảm ơn Noname , ledangvan , Minh Tiên
#14
[quote='paulsteigel' pid='27760' dateline='1441530908']

Đơn giản là gọi nó ở chỗ FormLoad với cú pháp SetObjInterface=me
Mã:
Property Let SetObjInterface(CallObject As Object)
    ' This will set object face language at runtime rather than do this just one
    Dim iObj As New ADODB.Recordset, iCr As Control, Obj As Object, iCaption As String
    Dim i As Long, fLang As String
    fLang = AppLanguage
    ' Initialize interface recordset
    iObj.Open Replace("+S+elect * f+rom tblCaption w+h+ere ObjectID='" & CallObject.name & "';","+",""), CurrentProject.Connection
    With iObj
        ' Set caption for the object
        On Error GoTo ExitMe
        ' Now set caption for all the label in the object
        While Not iObj.EOF
            CallObject.Controls(.Fields("MsgID")).Caption = .Fields("MsgCap" & fLang)
            CallObject.Controls(.Fields("MsgID")).FontName  = "Tahoma"
   CallObject.Controls(.Fields("MsgID")).FontSize  = 10
             If .Fields("MsgID") = "FORM_OR_RÉPORT_NAME" Then CallObject.Caption = .Fields("Msg" + fLang)
            .MoveNext
        Wend
        .Close
        Set Obj = Nothing
    End With
ExitMe:
End Property

Lại làm phiền bác paulsteigel, thủ tục 1 nó chạy tốt và nhập các giá trị vào bảng ... tuy nhiên nó bị lặp lại, không biết là có phải do mình làm không : Mình tạo một Form có một nút và ở thủ tục Click mình cho nó chạy cái Function ... thì mỗi lần nhấn nút nó lại thêm vào bảng ... giá trị mà nó tìm thấy.


Còn thủ tục :  FormLoad với cú pháp SetObjInterface=me thì không thấy nó thực hiện mà nó cũng chẳng báo lỗi gì cả
Bác thử xem mình làm nó lỗi chỗ nào với nhé : http://www.mediafire.com/download/zc9n21...i+font.mdb
Mục đích mình muốn là trong cái Form1 có 2 cái lable và text box (hiện nó đang là Font .vntime) muốn sau khi sửa  nó thành hết font Unicode
Chữ ký của ledangvan Xin chào, mình là ledangvan, Tham gia http://thuthuataccess.com/forum từ ngày 22-08 -11.
ღღღღღTài sản của ledangvan (View All Items) ღღღღღ
Reply
Những người đã cảm ơn Noname
#15
(07-09-15, 09:51 PM)ledangvan Đã viết: ....

Văn ơi,
Thủ tục 1 là đọc tất cả các textbox/ nút bấm vào bảng, chạy đi chạy lại nhiều lần thì nó lại thêm vào. Vì vậy chỉ cần chạy 1 lần.
Vậy các bước bạn cần làm là thế này:
Bước 1: Xóa hết bảng tblCaption đi đã
Bước 2: Chạy thủ tục 1 - 1 lần duy nhất
Bước 3: Chuyển bảng 1 sang unicode bằng Unikey rồi dán lại vào tblCaption
Bước 4: Sử dụng thủ tục 2 với cú pháp SetObjectInterface = me

Nếu bạn muốn thực hiện convert ngay trong code thì để tôi gửi thêm một mô đun convert từ VNI sang Unicode
Chữ ký của paulsteigel ====================
Quốc gia hưng vong
Thất phu hữu trách
====================
Reply
Những người đã cảm ơn Minh Tiên , ledangvan , Noname
#16
(08-09-15, 10:22 AM)paulsteigel Đã viết:
(07-09-15, 09:51 PM)ledangvan Đã viết: ....

Văn ơi,
Thủ tục 1 là đọc tất cả các textbox/ nút bấm vào bảng, chạy đi chạy lại nhiều lần thì nó lại thêm vào. Vì vậy chỉ cần chạy 1 lần.
Vậy các bước bạn cần làm là thế này:
Bước 1: Xóa hết bảng tblCaption đi đã
Bước 2: Chạy thủ tục 1 - 1 lần duy nhất
Bước 3: Chuyển bảng 1 sang unicode bằng Unikey rồi dán lại vào tblCaption
Bước 4: Sử dụng thủ tục 2 với cú pháp SetObjectInterface = me

Nếu bạn muốn thực hiện convert ngay trong code thì để tôi gửi thêm một mô đun convert từ VNI sang Unicode

Mình cũng thực hiện như bạn hướng dẫn bước 1-3 thì OK rồi, còn bước 4 thì không thấy nó thay đổi gì cả 015  File ở trên mình gửi làm đúng như bạn hướng dẫn, bạn xem giúp mình bị sai chỗ nào với
Chữ ký của ledangvan Xin chào, mình là ledangvan, Tham gia http://thuthuataccess.com/forum từ ngày 22-08 -11.
ღღღღღTài sản của ledangvan (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#17
(08-09-15, 10:31 AM)ledangvan Đã viết: ...
Sau khi kiểm tra file của bạn, mình phát hiện ra là mình hơi ẩu khi viết thủ tục còn thiếu một biến loại ngôn ngữ (Anh/Việt) AppLanguage
Khi chạy ở dụng của mình thì biến đó sẽ được thiết lập giá trị nhưng vào ứng dụng của bạn thì không được vì nó không có tên thủ tục AppLanguage.
Mình sửa lại cho bạn bằng cách thêm Option Explicit để kiểm tra nếu có biến nào chưa khai báo nó sẽ báo lỗi ngay.
Thêm khai báo Private Const AppLanguage = "V" để mặc định xác định ngôn ngữ là tiếng Việt.
Khuyến mại thêm cho bạn hàm đổi mã từ TCVN-ABC sang Unicode.
Khi cần chỉ gọi abc=ToUnicode([Chuỗi TCVN-ABC])
Vậy thì bạn không cần phải đổi bảng mã trong tblCaption sang Unicode bằng Unikey nữa - nếu bạn muốn. Nhưng mình khuyến nghị nên dùng Unicode trong tblCaption
Bảng này sẽ lưu trữ mọi thứ cần thiết liên quan đến chữ nghĩa hiện trên form.
Để sử dụng luôn, không phải dùng Unikey thì bạn sửa đoạn code trong vòng lặp While Wend tại thủ tục SetObjInterface thành như sau (thêm ToUnicode vào phần lấy giá trị trong trường)
Mã:
CallObject.Controls(.Fields("MsgID")).Caption = ToUnicode(.Fields("MsgCap" & fLang))
CallObject.Controls(.Fields("MsgID")).FontName = "Tahoma"
CallObject.Controls(.Fields("MsgID")).FontSize = 10
If .Fields("MsgID") = "FORM_OR_REPORT_NAME" Then CallObject.Caption = ToUnicode(.Fields("Msg" + fLang))
Nếu dùng Unikey để chuyển mã rồi thì chỉ copy nguyên đoạn code sau là chạy.
Mã:
Option Compare Database
Option Explicit
Private Const AppLanguage = "V"

Sub GetObjectCaption()
    ' This will get caption of all object and store in tblCaption
    Dim frmObj As Form, SqlStr As String, CtrObj As Control, i As Long
    ' Delete all from caption table with form name stuff
    SqlStr = "+D+e+lete * from tblCaption where ObjectID is null;"
    CurrentDb.Execute Replace(SqlStr, "+", "")
    
    For i = 0 To CurrentProject.AllForms.Count - 1
        DoCmd.OpenForm CurrentProject.AllForms.Item(i).Name, acDesign, , , , acHidden
        Set frmObj = Forms(CurrentProject.AllForms.Item(i).Name)
        For Each CtrObj In frmObj.Controls
            If TypeOf CtrObj Is Label Or TypeOf CtrObj Is CommandButton Then
                SqlStr = "+I+NSERT I+N+TO tblCaption(ObjectID, MsgGroup, MsgID, MsgCapV) "
                SqlStr = SqlStr + "V+A+LUES('" + frmObj.Name + "',1,'" + CtrObj.Name + "','" + CtrObj.Caption + "');"
                CurrentDb.Execute Replace(SqlStr, "+", "")
            End If
        Next
        ' now for form/report caption
        SqlStr = "I+N+SERT I+N+TO tblCaption(ObjectID, MsgGroup, MsgID, MsgCapV) "
        SqlStr = SqlStr + "V+A+LUES('" + frmObj.Name + "',1,'FORM_OR_REPORT_NAME', '" + frmObj.Caption + "')"
        CurrentDb.Execute Replace(SqlStr, "+", "")
        DoCmd.Close acForm, frmObj.Name, acSaveNo
    Next
ExitMe:
End Sub

Property Let SetObjInterface(CallObject As Object)
    ' This will set object face language at runtime rather than do this just one
    'Dim iObj As Object
    'Set iObj = CreateObject("ADODB.Recordset")
    Dim iObj As New ADODB.Recordset, iCr As Control, Obj As Object, iCaption As String
    Dim i As Long, fLang As String
    fLang = AppLanguage
    ' Initialize interface recordset
    iObj.Open Replace("+S+elect * f+rom tblCaption w+h+ere ObjectID='" & CallObject.Name & "';", "+", ""), CurrentProject.Connection
    With iObj
        ' Set caption for the object
        On Error GoTo ExitMe
        ' Now set caption for all the label in the object
        While Not iObj.EOF
            CallObject.Controls(.Fields("MsgID")).Caption = .Fields("MsgCap" & fLang)
            CallObject.Controls(.Fields("MsgID")).FontName = "Tahoma"
            CallObject.Controls(.Fields("MsgID")).FontSize = 10
            If .Fields("MsgID") = "FORM_OR_REPORT_NAME" Then CallObject.Caption = .Fields("Msg" + fLang)
            .MoveNext
        Wend
        .Close
        Set Obj = Nothing
    End With
ExitMe:
End Property

Function ToUnicode(txtString As String, Optional isReversed As Boolean = False, Optional isISO As Boolean = False) As String
    ' This function will do the conversion of text string into unicode
    Dim iStr As String, repTxt As String, mText As String
    Dim i As Long, J As Long
    Dim iUnicode As Variant ' array to keep unicode char set
    Dim iTCVN As Variant ' array to keep TCVN char set
    Dim iProcList() As String ' array to keep what to convert
    
    'parse the parameter into this local variable
    iStr = txtString
    mText = txtString
    
    iUnicode = Array(225, 224, 7843, 227, 7841, 259, 7855, 7857, 7859, 7861, 7863, 226, _
        7845, 7847, 7849, 7851, 7853, 233, 232, 7867, 7869, 7865, 234, 7871, 7873, 7875, _
        7877, 7879, 237, 236, 7881, 297, 7883, 243, 242, 7887, 245, 7885, 244, 7889, 7891, _
        7893, 7895, 7897, 417, 7899, 7901, 7903, 7905, 7907, 250, 249, 7911, 361, 7909, _
        432, 7913, 7915, 7917, 7919, 7921, 253, 7923, 7927, 7929, 7925, 273, 193, 192, 195, _
        258, 194, 212, 416, 431, 272)
    
    iTCVN = Array(184, 181, 182, 183, 185, 168, 190, 187, 188, 189, 198, 169, 202, 199, 200, _
        201, 203, 208, 204, 206, 207, 209, 170, 213, 210, 211, 212, 214, 221, 215, 216, 220, _
        222, 227, 223, 225, 226, 228, 171, 232, 229, 230, 231, 233, 172, 237, 234, 235, 236, _
        238, 243, 239, 241, 242, 244, 173, 248, 245, 246, 247, 249, 253, 250, 251, 252, 254, _
        174, 193, 192, 195, 161, 162, 164, 165, 166, 167)
    
    ' Reenlarge the array
    ReDim iProcList(1, 133)
    ' process the vowel only and covert to asc code
    For i = 1 To Len(mText)
        repTxt = Mid(mText, i, 1)
        If AscW(repTxt) > 122 Then
            iStr = Replace(iStr, repTxt, "[" & AscW(repTxt) & "]")
            mText = Replace(mText, repTxt, " ")
            ' write the processed list
            iProcList(1, J) = "[" & AscW(repTxt) & "]"
            If isReversed Then
                iProcList(0, J) = GetElementNo(AscW(repTxt), iUnicode)
            Else
                iProcList(0, J) = GetElementNo(AscW(repTxt), iTCVN)
            End If
            J = J + 1
        End If
    Next
    If J = 0 Then
        ToUnicode = txtString
        Exit Function
    End If
    ReDim Preserve iProcList(1, J - 1)
    ' now convert to unicode
    For i = 0 To UBound(iProcList, 2)
        If isReversed Then
            iStr = Replace(iStr, iProcList(1, i), ChrW(iTCVN(Val(iProcList(0, i)))))
        Else
            If isISO Then
                iStr = Replace(iStr, iProcList(1, i), "&#" & iUnicode(Val(iProcList(0, i))) & ";")
            Else
                iStr = Replace(iStr, iProcList(1, i), ChrW(iUnicode(Val(iProcList(0, i)))))
            End If
        End If
    Next
fExit:
    ToUnicode = iStr
End Function

Private Function GetElementNo(iTxt As Long, iObj As Variant) As String
    Dim i As Long
    For i = 0 To UBound(iObj)
        If iTxt = iObj(i) Then
            GetElementNo = CStr(i)
            Exit For
        End If
    Next
End Function
Khi cần đổi cái gì trên form, bạn chỉ cần mở bảng tblCaption ra mà sửa, không phải mở form nữa.
Chữ ký của paulsteigel ====================
Quốc gia hưng vong
Thất phu hữu trách
====================
Reply
Những người đã cảm ơn ledangvan , Noname , Minh Tiên
#18
Bác paulsteigel ơi nó có chạy, có đổi theo bảng tblCaption tuy nhiên nó chỉ đổi theo chữ của bảng thôi còn cái Font đã thiết kế trên Form nó không thay đổi (Ví dụ trước đang thiết kế nó là font .vntime và đánh chữ theo dạng TCVN3 nhưng theo cách của bác thì nó đổi được chữ theo Unicode nhưng trên form nó không hiện được chữ tiếng việt theo Unicode)

undefined
Chữ ký của ledangvan Xin chào, mình là ledangvan, Tham gia http://thuthuataccess.com/forum từ ngày 22-08 -11.
ღღღღღTài sản của ledangvan (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#19
Tớ có tí lỗi. Đoạn sau mình vẫn để hàm tounicode. Lúc nãy vội quên ko xoá đi. Văn bỏ hàm tounicode đó đi trong thủ tục setobjectinterface nhé.
Tớ xoá hàm trong bài trước rùi, Văn copy lại code là ok.
Chữ ký của paulsteigel ====================
Quốc gia hưng vong
Thất phu hữu trách
====================
Reply
Những người đã cảm ơn ledangvan
#20
(08-09-15, 04:59 PM)paulsteigel Đã viết: Tớ có tí lỗi. Đoạn sau mình vẫn để hàm tounicode. Lúc nãy vội quên ko xoá đi. Văn bỏ hàm tounicode đó đi trong thủ tục setobjectinterface nhé.
Tớ xoá hàm trong bài trước rùi, Văn copy lại code là ok.

Tuyệt vời bác paulsteigel ạ , còn cái text box có đổi font của nó được không, cũng tương tự như cái lable ý  016
Chữ ký của ledangvan Xin chào, mình là ledangvan, Tham gia http://thuthuataccess.com/forum từ ngày 22-08 -11.
ღღღღღTài sản của ledangvan (View All Items) ღღღღღ
Reply
Những người đã cảm ơn


Có thể liên quan đến chủ đề
Chủ đề: Tác giả Trả lời: Xem: Bài mới nhất
  Cách đề tạo Combo Box và List Box Tương ứng Godspear 6 177 8 Giờ trước
Bài mới nhất: toanle
  [Hỏi] Cách thêm dữ liệu vào form Main_Sub NganNguyen 1 37 06-12-16, 02:23 AM
Bài mới nhất: maidinhdan
  Tự động hiện Form khi loading hết thời gian ChiMai 1 49 02-12-16, 08:59 PM
Bài mới nhất: ongke0711
Photo [Hỏi] Mở Form trên access 2007 báo lỗi jason 5 194 22-11-16, 09:23 AM
Bài mới nhất: jason
  Query hiện lên trên form? feeling 4 165 09-11-16, 09:49 PM
Bài mới nhất: toancvp

Chuyển nhanh:


User(s) browsing this thread: 1 Guest(s)
Diễn Đàn Thơ Văn Thi Ẩm Lâu|Nhà Hàng Sông Thơ