Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    957

    [VB6] Icone form e tray

    Ciao a tutti,
    ho un po' di confusione per quello che riguarda le icone che utilizza VB6. Ho provato a farne una multipla da 256 colore e a 24bit, e chiaramente VB usa la 256 colori, e su Vista, vi assicuro viene un'obrobrio. C'è qualche modo per superare questo limite dei 256 colori dell'icona, e magari anche quello per l'icona sulla tray?

    Grazie

  2. #2
    Certo che c'è, bisogna smanettare un attimo con le API ma c'è.

    Crea la tua icona e salvala in un file di risorse con un editor qualsiasi con le dimensioni che ti pare e il numero di colori che preferisci e dalle un nome nel file di risorse tipo "ICON", o comunque fai in modo che sia la prima icona disponibile nel file di risorse (occhio a non usare il visualizzatore di risorse di VB perchè non permette di salvare immagini con qualità superiore a 256 colori, io per questo uso Resource Builder).

    Ora in VB crea un modulo di classe chiamato clsHQIcon e copia questo codice:
    codice:
    Option Explicit
    
    Private Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long
    
    Private Const SM_CXICON = 11
    Private Const SM_CYICON = 12
    
    Private Const SM_CXSMICON = 49
    Private Const SM_CYSMICON = 50
       
    Private Declare Function LoadImageAsString Lib "user32" Alias "LoadImageA" ( _
          ByVal hInst As Long, _
          ByVal lpsz As String, _
          ByVal uType As Long, _
          ByVal cxDesired As Long, _
          ByVal cyDesired As Long, _
          ByVal fuLoad As Long _
       ) As Long
       
    Private Const LR_DEFAULTCOLOR = &H0
    Private Const LR_MONOCHROME = &H1
    Private Const LR_COLOR = &H2
    Private Const LR_COPYRETURNORG = &H4
    Private Const LR_COPYDELETEORG = &H8
    Private Const LR_LOADFROMFILE = &H10
    Private Const LR_LOADTRANSPARENT = &H20
    Private Const LR_DEFAULTSIZE = &H40
    Private Const LR_VGACOLOR = &H80
    Private Const LR_LOADMAP3DCOLORS = &H1000
    Private Const LR_CREATEDIBSECTION = &H2000
    Private Const LR_COPYFROMRESOURCE = &H4000
    Private Const LR_SHARED = &H8000&
    
    Private Const IMAGE_ICON = 1
    
    Private Declare Function SendMessageLong Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    
    Private Const WM_SETICON = &H80
    
    Private Const ICON_SMALL = 0
    Private Const ICON_BIG = 1
    
    Private Declare Function GetWindow Lib "user32" (ByVal hWnd As Long, ByVal wCmd As Long) As Long
    Private Const GW_OWNER = 4
    
    
    Public Sub SetIcon(ByVal hWnd As Long, ByVal sIconResName As String, Optional ByVal bSetAsAppIcon As Boolean = True)
    Dim lhWndTop As Long
    Dim lhWnd As Long
    Dim cx As Long
    Dim cy As Long
    Dim hIconLarge As Long
    Dim hIconSmall As Long
          
       If (bSetAsAppIcon) Then
          ' Find VB's hidden parent window:
          lhWnd = hWnd
          lhWndTop = lhWnd
          Do While Not (lhWnd = 0)
             lhWnd = GetWindow(lhWnd, GW_OWNER)
             If Not (lhWnd = 0) Then
                lhWndTop = lhWnd
             End If
          Loop
       End If
       
       cx = GetSystemMetrics(SM_CXICON)
       cy = GetSystemMetrics(SM_CYICON)
       hIconLarge = LoadImageAsString( _
             App.hInstance, sIconResName, _
             IMAGE_ICON, _
             cx, cy, _
             LR_SHARED)
       If (bSetAsAppIcon) Then
          SendMessageLong lhWndTop, WM_SETICON, ICON_BIG, hIconLarge
       End If
       SendMessageLong hWnd, WM_SETICON, ICON_BIG, hIconLarge
       
       cx = GetSystemMetrics(SM_CXSMICON)
       cy = GetSystemMetrics(SM_CYSMICON)
       hIconSmall = LoadImageAsString( _
             App.hInstance, sIconResName, _
             IMAGE_ICON, _
             cx, cy, _
             LR_SHARED)
       If (bSetAsAppIcon) Then
          SendMessageLong lhWndTop, WM_SETICON, ICON_SMALL, hIconSmall
       End If
       SendMessageLong hWnd, WM_SETICON, ICON_SMALL, hIconSmall
       
    End Sub
    A questo punto nell'evento Load della form usa questo codice:
    codice:
    Dim mIcon As New clsHQIcon
    mIcon.SetIcon Me.hWnd, "ICON", True
    Spero ti sia d'aiuto.

    Ciao!
    Cerco ombrello vecchio, nuovo, moderno o antidiluviano; purché protegga da una pioggia che vien giù come Dio la manda. Fate presto che ho l’acqua alla gola. (Noè)

    C# programming and other stuffs

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.