User Form'da Label' e başka bir userformdan icon almak

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
3,163
Excel Vers. ve Dili
Office 2013 İngilizce
Merhabalar,
User Form'da Label' e aşağıdaki kod ile klasörden bir mouse icon resmi yükleyebiliyoruz,

öğrenmek istediğim bu icon' u klasör yerine bir userform içindeki label' den alamaz mıyız?
frmElement.lblMouse.Picture
bu şekilde denedim ama olmadı, desteğiniz için şimdiden teşekkürler,
iyi Çalışmalar dilerim.


Kod:
img= ThisWorkbook.Path & "\img\hand.ico"

    With ctrl
       
        .MouseIcon = LoadPicture(img)
        .MousePointer = 99
'       .BorderStyle = fmBorderStyleSingle
        
    End With

[code]
 

muhasebeciyiz

Altın Üye
Katılım
10 Şubat 2006
Mesajlar
906
Excel Vers. ve Dili
Office 2016
64 Bit
Altın Üyelik Bitiş Tarihi
21-12-2027
frmElement.lblMouse.Picture niçin olmadı derseniz ;
lblMouse.Picture nesnesi, bir resim nesnesi (IPictureDisp) taşır ama bu her zaman MouseIcon için uyumlu olmayabilir.MouseIcon genellikle .ico formatındaki dosyaları desteklerken, Label’ın Picture özelliği bitmap (.bmp, .jpg vs.) resimler içerebilir. Bu durumda uyumsuzluk oluşur.

Mouse icon özelliğini ayarlamak için genellikle dış klasörden LoadPicture ile bir ikon dosyası yüklenir, fakat UserForm içindeki Label'daki Picture verisini doğrudan MouseIcon olarak kullanmak maalesef doğrudan desteklenmez. Bunun nedeni, MouseIcon özelliğinin özel bir Picture tipine ihtiyaç duymasıdır genellikle .ico uzantılı bir ikon dosyası şeklinde.

İkonu önceden bir klasöre koyup LoadPicture ile çağırmak en garanti yöntemdir (mevcut kodunuz gibi):
ctrl.MouseIcon = LoadPicture(ThisWorkbook.Path & "\img\hand.ico")

2. Eğer Label içindeki görsel zaten bir ikon formatındaysa ve dosya haline çevrilebiliyorsa:

O resmi önce disk üzerine kaydetmeniz gerekebilir.
Sonra bu dosyayı tekrar LoadPicture ile alarak kullanabilirsiniz.

Label'daki resmi dosya haline kaydet
SavePicture frmElement.lblMouse.Picture, ThisWorkbook.Path & "\temp\labelicon.ico"

Sonra bu resmi MouseIcon olarak yükle
ctrl.MouseIcon = LoadPicture(ThisWorkbook.Path & "\temp\labelicon.ico")

Ancak dikkat: Bu yöntem sadece ikon (.ico) formatındaki resimler için geçerlidir. Label'daki görsel BMP veya JPG ise ikon gibi davranmaz.
 

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
3,163
Excel Vers. ve Dili
Office 2013 İngilizce
frmElement.lblMouse.Picture niçin olmadı derseniz ;
lblMouse.Picture nesnesi, bir resim nesnesi (IPictureDisp) taşır ama bu her zaman MouseIcon için uyumlu olmayabilir.MouseIcon genellikle .ico formatındaki dosyaları desteklerken, Label’ın Picture özelliği bitmap (.bmp, .jpg vs.) resimler içerebilir. Bu durumda uyumsuzluk oluşur.

Mouse icon özelliğini ayarlamak için genellikle dış klasörden LoadPicture ile bir ikon dosyası yüklenir, fakat UserForm içindeki Label'daki Picture verisini doğrudan MouseIcon olarak kullanmak maalesef doğrudan desteklenmez. Bunun nedeni, MouseIcon özelliğinin özel bir Picture tipine ihtiyaç duymasıdır genellikle .ico uzantılı bir ikon dosyası şeklinde.

İkonu önceden bir klasöre koyup LoadPicture ile çağırmak en garanti yöntemdir (mevcut kodunuz gibi):
ctrl.MouseIcon = LoadPicture(ThisWorkbook.Path & "\img\hand.ico")

2. Eğer Label içindeki görsel zaten bir ikon formatındaysa ve dosya haline çevrilebiliyorsa:

O resmi önce disk üzerine kaydetmeniz gerekebilir.
Sonra bu dosyayı tekrar LoadPicture ile alarak kullanabilirsiniz.

Label'daki resmi dosya haline kaydet
SavePicture frmElement.lblMouse.Picture, ThisWorkbook.Path & "\temp\labelicon.ico"

Sonra bu resmi MouseIcon olarak yükle
ctrl.MouseIcon = LoadPicture(ThisWorkbook.Path & "\temp\labelicon.ico")

Ancak dikkat: Bu yöntem sadece ikon (.ico) formatındaki resimler için geçerlidir. Label'daki görsel BMP veya JPG ise ikon gibi davranmaz.
teşekkürler Hocam,
Bu icon' u mevcut dosya içinde sayfa da bir yere alıdıktan sonra;
sayfadan userform' a alınabilir mi?

iyi çalışmalarç
 

muhasebeciyiz

Altın Üye
Katılım
10 Şubat 2006
Mesajlar
906
Excel Vers. ve Dili
Office 2016
64 Bit
Altın Üyelik Bitiş Tarihi
21-12-2027
Ne yazık ki VBA doğrudan BMP → ICO dönüşümünü desteklemez. Bu noktada:
Bir dış ikon dönüştürücü (örneğin bir komut satırı aracı veya .NET eklentisi) devreye girebilir.
Veya resmi zaten .ico formatında sayfaya ekleyip Export ile bu formatta kaydetmeniz gerekir.

MouseIcon olarak yükleme
ctrl.MouseIcon = LoadPicture(ThisWorkbook.Path & "\temp\worksheet_icon.ico")
ctrl.MousePointer = 99

Worksheet üzerindeki resim bir Shape objesi olarak bulunur.
UserForm'daki MouseIcon özelliği özel bir Picture (IPictureDisp) nesnesini .ico formatında bekler.
Worksheet'teki görseli direkt olarak Label’a aktarmak mümkün değil; önce ara bir işlem gerektiriyor.

Eğer amacınız görsellikse ve özel ikon yüklemek zorundaysanız, ikonları baştan .ico olarak tutup klasörden çağırmak en pratik ve sağlam yol.
Worksheet üzerindeki Shape objeleri doğrudan IPictureDisp desteklemediği için her zaman bir dolaylı yol gerekir (Export → LoadPicture).
 

muhasebeciyiz

Altın Üye
Katılım
10 Şubat 2006
Mesajlar
906
Excel Vers. ve Dili
Office 2016
64 Bit
Altın Üyelik Bitiş Tarihi
21-12-2027
Görsel ikonları yönetmenin pratik ve sürdürülebilir bir yolu, ikonları dış klasörde tutmak ve oradan LoadPicture ile çağırmaktır

Sayfadaki Resmi MouseIcon Olarak Kullanmak

Kod:
Sub SetMouseIconFromSheetPicture()

    Dim shp As Shape
    Dim chtObj As ChartObject
    Dim iconPath As String
    Dim ctrl As Control
   
    Set shp = ThisWorkbook.Sheets("Sheet1").Shapes("Picture 1")
   
    Set chtObj = ActiveSheet.ChartObjects.Add(Left:=0, Top:=0, Width:=100, Height:=100)
    chtObj.Chart.Paste
    iconPath = ThisWorkbook.Path & "\temp\sheetIcon.bmp"
    chtObj.Chart.Export Filename:=iconPath, FilterName:="BMP"
    chtObj.Delete
   
    Set ctrl = frmElement.CommandButton1 ' ← burada kendi kontrolünü gir
   
    ctrl.MouseIcon = LoadPicture(iconPath)
    ctrl.MousePointer = 99

End Sub
"Picture 1" adındaki şeklin gerçekten var olduğundan emin ol.
frmElement.CommandButton1 yerine kendi UserForm ve kontrol ismini yaz.
Bu örnek BMP formatını kullandı. Eğer elindeki görsel .ico ise daha da kolay olur.
 

muhasebeciyiz

Altın Üye
Katılım
10 Şubat 2006
Mesajlar
906
Excel Vers. ve Dili
Office 2016
64 Bit
Altın Üyelik Bitiş Tarihi
21-12-2027
UserForm’larda birçok kontrol varsa ve ikonları tek tek ayarlamak gerekiyorsa, ikonları bir klasörde tutup bir tanımlama sistemine göre çağırmak oldukça verimli olur.

Klasörde ikonları adlandır. Örneğin:
  • cmdSave.ico
  • cmdDelete.ico
  • cmdRefresh.ico
Kontrol adına göre ikon yükleyen bir prosedür
Kod:
Sub SetMouseIconByControlName(ctrl As Control)
    
    Dim iconPath As String
    iconPath = ThisWorkbook.Path & "\img\" & ctrl.Name & ".ico"
    
    If Dir(iconPath) <> "" Then
        ctrl.MouseIcon = LoadPicture(iconPath)
        ctrl.MousePointer = 99
    Else
        ctrl.MousePointer = fmMousePointerDefault
    End If

End Sub
UserForm Initialize içinde döngü ile uygula
Kod:
Private Sub UserForm_Initialize()
    Dim ctrl As Control
    For Each ctrl In Me.Controls
        If TypeOf ctrl Is MSForms.CommandButton Then
            Call SetMouseIconByControlName(ctrl)
        End If
    Next ctrl
End Sub
Sonuç:
İkonları değiştirmen gerektiğinde tek yapacağın şey ilgili dosyayı klasöre koymak.
Kod kalabalığını önler, bakım kolaylaşır.
Yeni kontroller eklendiğinde ikonları otomatik tanır ve uygular.
 
Üst