Xin danh sách các imageMso trong Custom UI

Liên hệ QC

Mr.hieudoanxd

Thành viên thường trực
Tham gia
25/10/19
Bài viết
322
Được thích
150
Chào các anh/chị!
Có quá nhiều thứ để học mà thời gian, thêm nữa là đầu óc có hạn. Em đang tìm hiểu tạo Ribbon cho excel bằng Custom UI. Tuy nhiên, việc tìm tên của các imageMso thì không biết tìm ở đâu (hoặc có thể từ khóa tìm kiếm em gõ không chính xác).
Em muốn xin các danh sách các imageMso trong Custom UI (có hình đính kèm càng tốt ạ)
Em cảm ơn
 
Chào các anh/chị!
Có quá nhiều thứ để học mà thời gian, thêm nữa là đầu óc có hạn. Em đang tìm hiểu tạo Ribbon cho excel bằng Custom UI. Tuy nhiên, việc tìm tên của các imageMso thì không biết tìm ở đâu (hoặc có thể từ khóa tìm kiếm em gõ không chính xác).
Em muốn xin các danh sách các imageMso trong Custom UI (có hình đính kèm càng tốt ạ)
Em cảm ơn
Tham khảo tại link sau : https://bert-toolkit.com/imagemso-list.html
 
Upvote 0
Em tìm trên mạng theo từ khóa Imagemso list ra cái addin này hiển thị các ImageMSO và hình ảnh của chúng ở thẻ Developer
Em đăng lên để những người cùng có nhu cầu tìm hiểu!
 

File đính kèm

  • Office2007IconsGallery.xlam
    57.5 KB · Đọc: 54
Upvote 0
Bác tham khảo ở đây nhé: https://www.ka-net.org/blog/?p=11361#idO
Nếu bác làm các chức năng tương tự của excel thì dùng imagemso được, nhưng nếu bác làm mấy cái chức năng chuyên ngành thì dùng mấy ảnh ở ngoài nó hợp hơn
 
Upvote 0
Bác tham khảo ở đây nhé: https://www.ka-net.org/blog/?p=11361#idO
Nếu bác làm các chức năng tương tự của excel thì dùng imagemso được, nhưng nếu bác làm mấy cái chức năng chuyên ngành thì dùng mấy ảnh ở ngoài nó hợp hơn
Bác có thể hướng dẫn em cách chèn hình ảnh vào không ạ. Liệu khi mang sang máy khác có cần copy ảnh đó theo không ạ?, em xài Custom UI
 
Upvote 0
Bạn đã làm như thế này? Mở tập tin trong Custom UI Editor -> nhấn nút thứ 3 hoặc menu Insert rồi chọn mục Icons ... -> chọn tập tin ảnh -> không dùng imageMso="..." mà dùng image="..." - trong 3 dấu chấm ... là tên ảnh mà Editor vừa chèn vào bên cạnh ảnh?

Nếu muốn thì bạn không cần chèn ảnh bằng cách Insert -> Icons mà dùng cách 2. Bạn có thể chèn ảnh cho menu ribbon mỗi khi mở tập tin hoặc thậm chí rất nhiều lần trong một phiên làm việc. Với kiểu này mỗi ngày có thể chèn một ảnh khác, chèn từ đĩa của máy hiện hành. Nếu có ảnh trên sheet (có thể thay đổi liên tục bởi người dùng) thì có thể ghi ra đĩa và chèn từ đĩa vào icon trên ribbon. Tức thích chèn khi nào, chèn ảnh nào thì luôn tự quyết được cho mỗi lần mở tập tin và nhiều lần trong phiên làm việc.
 
Upvote 0
Bạn đã làm như thế này? Mở tập tin trong Custom UI Editor -> nhấn nút thứ 3 hoặc menu Insert rồi chọn mục Icons ... -> chọn tập tin ảnh -> không dùng imageMso="..." mà dùng image="..." - trong 3 dấu chấm ... là tên ảnh mà Editor vừa chèn vào bên cạnh ảnh?

Nếu muốn thì bạn không cần chèn ảnh bằng cách Insert -> Icons mà dùng cách 2. Bạn có thể chèn ảnh cho menu ribbon mỗi khi mở tập tin hoặc thậm chí rất nhiều lần trong một phiên làm việc. Với kiểu này mỗi ngày có thể chèn một ảnh khác, chèn từ đĩa của máy hiện hành. Nếu có ảnh trên sheet (có thể thay đổi liên tục bởi người dùng) thì có thể ghi ra đĩa và chèn từ đĩa vào icon trên ribbon. Tức thích chèn khi nào, chèn ảnh nào thì luôn tự quyết được cho mỗi lần mở tập tin và nhiều lần trong phiên làm việc.
Em sử dụng cách đầu tiên và đã làm được rồi ạ. Với cách thứ 2 nghe anh mô tả hay quá anh có thể hướng dẫn em không ạ?
 
Upvote 0
Em sử dụng cách đầu tiên và đã làm được rồi ạ. Với cách thứ 2 nghe anh mô tả hay quá anh có thể hướng dẫn em không ạ?
Giả sử bạn có:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="RibbonLoad">
<ribbon startFromScratch="false">
<tabs>
<tab id="Menu4" label="Du Lieu" insertAfterMso="TabView">
<group id="Group4" label="Du Lieu">
<button id="GCDM" label="Goi cho Diem My" getImage="GetButtonImage" size="large" onAction="Goi_cho_DM" />
<button id="GCNA" label="Goi cho Nguyet Anh" getImage="GetButtonImage" size="large" onAction="Goi_choNA" />
</group>
</tab>
</tabs>
</ribbon>
</customUI>

Tức mỗi khi ribbon cần ảnh để hiển thị thì nó sẽ gọi sub GetButtonImage để lấy ảnh. Khi nào cần? Khi lần đầu tiên hiển thị thẻ tự tạo, và mỗi khi code gọi phương thức Invalidate*** của ribbon nếu có.

Trong code phải có

Sub GetButtonImage(control As IRibbonControl, ByRef returnedVal)

End Sub


Do GetButtonImage được gán cho getImage của 2 button nên nó sẽ được gọi 2 lần. 1 lần với control là button với id = "GCDM", lần 2 với control là button có id = "GCNA". Tức control.ID = "GCDM" và control.ID = "GCNA"
---------------
Ví dụ về một code hoàn chỉnh:

Mã:
Private rb As IRibbonUI

Sub RibbonLoad(ribbon As IRibbonUI)
    Set rb = ribbon
End Sub

Sub GetButtonImage(control As IRibbonControl, ByRef returnedVal)
Dim filename
    filename = Application.GetOpenFilename("Tap tin anh (*.bmp; *.gif; *.jpg; *.ico), *.bmp; *.gif; *.jpg; *.ico", Title:="Hay chon anh cho " & control.ID)
    If filename <> False Then Set returnedVal = LoadPicture(filename)
End Sub

Sub Goi_cho_DM(control As IRibbonControl)
    MsgBox "Goi cho em " & control.ID
End Sub

Sub Goi_choNA(control As IRibbonControl)
    MsgBox "Goi cho em " & control.ID
End Sub

Khi mở tập tin và chọn thẻ "Du Lieu" thì sẽ có cửa sổ với tiêu đề = "Hay chon anh cho GCDM" để chọn ảnh cho button "GCDM". Tiếp theo là cửa sổ với tiêu đề = "Hay chon anh cho GCNA" để chọn ảnh cho button "GCNA".

Dòng quan trong nhất là returnedVal = LoadPicture(filename). Tức phải trả về trong biến returnedVal ảnh cần cung cấp (IPictureDisp). Nói cho cùng thì chỉ cần trả về trong returnedVal một IPictureDisp. LoadPicture(filename) trả về IPictureDisp. Nhưng nếu có ảnh trên sheet thì có thể viết code để nó trả về một IPictureDisp.

Trong code ở trên filename là do chọn trong cửa sổ hộp thoại. Nhưng tất nhiên có thể nhập cứng, vd.

Mã:
Sub GetButtonImage(control As IRibbonControl, ByRef returnedVal)
Dim filename
    If control.ID = "GCDM" Then
        filename = "D:\mang.jpg"
    ElseIf control.ID = "GCNA" Then
        filename = "D:\gau.jpg"
    End If
    If filename <> False Then Set returnedVal = LoadPicture(filename)
End Sub

Cũng có thể không nhập 1 ảnh cố định mà nhập các ảnh khác nhau tùy theo điều kiện. Dưới đây ảnh cho "GCDM" được tùy chọn:
Mã:
Sub GetButtonImage(control As IRibbonControl, ByRef returnedVal)
Dim filename
    If control.ID = "GCDM" Then
        Select Case Day(Date)
            Case Is < 10: filename = "D:\bikini.jpg"
            Case Is < 20: filename = "D:\topless.jpg"
            Case Else: filename = "D:\as god created.jpg"
        End Select
    ElseIf control.ID = "GCNA" Then
        filename = "D:\gau.jpg"
    End If
    If filename <> False Then Set returnedVal = LoadPicture(filename)
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Em làm theo hướng dẫn rất chi tiết của anh @batman1 tuy nhiên lại bị lỗi ở một ảnh "Facebook.jpg" này không rõ nguyên nhân là gì em gửi file lên, chụp hình lỗi không biết anh có thể chỉ giúp em nguyên nhân lỗi để lần khác em thao tác có thể tránh được không
Lọ mọ mãi không ra lỗi gì
 

File đính kèm

  • 3.jpg
    3.jpg
    75.2 KB · Đọc: 23
  • 2.jpg
    2.jpg
    65 KB · Đọc: 20
  • 1.jpg
    1.jpg
    18.8 KB · Đọc: 22
  • New Microsoft Excel Worksheet.xlsm
    16.7 KB · Đọc: 3
Upvote 0
Úp cái ảnh đó lên đây. Cái ảnh đó bị lỗi kỹ thuật.
 
Upvote 0
Đây là file ảnh đó ạ. Mà sao khi em upload lên diễn đàn nó lại là .png trong khi đuôi file là .jpg nhỉ?
 

File đính kèm

  • Facebook.png
    Facebook.png
    7.1 KB · Đọc: 1
Upvote 0
File gói lại rồi đây ạ
 

File đính kèm

  • Facebook.rar
    5.5 KB · Đọc: 4
Upvote 0
Đây là file ảnh đó ạ. Mà sao khi em upload lên diễn đàn nó lại là .png trong khi đuôi file là .jpg nhỉ?
Facebook.jpg

Tập tin của bạn chỉ có tên là Facebook.jpg nhưng thực chất lõi nó là PNG. Nó như là đực rựa mặc váy nhưng thực chất nó là đực rựa.

LoadPicture không chấp nhận PNG, vì thế trong cửa sổ chọn tập tin tôi thiết lập Filter không có PNG.

LoadPicture chỉ là ví dụ. Tôi biết rõ bạn không thạo nên tôi không tung tập tin. Chọn cách tung tập tin để cho bạn tự tìm hiểu thì quá dễ với tôi nhưng khó với bạn. Vì thế tôi chọn cách giải thích chi tiết. Tôi hiểu là bạn không thạo nên nói rõ
Nói cho cùng thì chỉ cần trả về trong returnedVal một IPictureDisp. LoadPicture(filename) trả về IPictureDisp. Nhưng nếu có ảnh trên sheet thì có thể viết code để nó trả về một IPictureDisp.
Tức cái cần có để nhập vào returnedVal là một IPictureDisp. Dùng LoadPicture chỉ là ví dụ. Có thể dùng các hàm khác, tự tạo một IPictureDisp từ A đến Z, từ dữ liệu nguồn bất kỳ, vd. từ Range - ảnh Range trên sheet. Những code kiểu ghi Shape, ghi Range trên sheet ở dạng IPictureDisp thì trên GPE đã có nhiều rồi.

Bất kể bằng cách nào, LoadPicture chỉ là 1 cách, cần phải soạn một IPictureDisp rồi trả nó về trong biến returnedVal. Thế thôi. Nếu cố tình dùng LoadPicture thì phải mở tập tin Facebook của bạn rồi save as thành JPG.

--------------

Các tập tin ảnh chúng có định dạng cụ thể nên ở đầu tập tin (phần gọi là header) luôn có signature đặc trưng của mình. Cho dù con người có mặc cho chúng những cái váy PNG, JPG, BMP ... thì khi mở bằng Hex Editor mà thấy gần đầu có JFIF thì ảnh đó là JPG, bất kể nó đang mặc váy PNG hay váy gì. Nếu đầu là BM thì ắt đó là BMP, nếu có GIF - GIF89 thì ắt là ảnh GIF, nếu có PNG thì đó là ảnh PNG, bất kể nó đang mặc váy gì.

Suy nghĩ chút thì biết thôi. Giả sử có chandai.avi. Bây giờ phải chuột rồi đổi tên thành chandai.PNG thì nó thành ảnh à? Làm gì có chuyện đó. Nếu click trực tiếp thì sẽ có lỗi vì click trực tiếp thì Explorer sẽ dùng chương trình ảnh mặc định để mở, nhưng lõi không là ảnh nên có lỗi. Khi phải chuột rồi chọn Open with rồi chọn chương trình video thì mở được. Vì đối với chương trình video thì cái quan trọng là LÕI, là nội dung của tập tin, tên gì váy gì không quan trọng. Có thể đổi thành chandai.TXT rồi Open with rồi chọn chương trình video thì vẫn mở được.
 
Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn anh @batman1 ! Anh giải thích rất chi tiết.
Tôi biết rõ bạn không thạo nên tôi không tung tập tin. Chọn cách tung tập tin để cho bạn tự tìm hiểu thì quá dễ với tôi nhưng khó với bạn. Vì thế tôi chọn cách giải thích chi tiết
Em lan man 1 chút Cách học của em cũng hơi củ chuối của em. Ví dụ em tìm được file hay trên GPE em cũng hay tự tìm hiểu, mày mò tạo lại file giống vậy có lúc hiểu được làm được y hệt, có lúc đi vướng quá không thể làm theo như mấy cái API, Classmodule thì làm theo cách khác mô tả giống theo ý của file đó. Cho nên dụng ý của anh em hiểu điều đó. Đầu óc có hạn nên em cũng phải vận động thao tác lại để hiểu hơn hoặc chí ít thuộc lòng cách làm hoặc là gặp các lỗi khác nhau trong quá trình làm để tìm hiểu thêm.
Cảm ơn anh @giaiphap đã giúp đỡ!
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom