Visual Basic Foro
Programación => Visual Basic 6 => Mensaje iniciado por: xmbeat en Septiembre 08, 2010, 03:06:01 am
-
lo q pasa es que pregunto si habria una forma de ponerle un icono a la aplicacion con canales alfa, q tenga sombra etc. porque no todos los iconos los agarra vb.
Podria ser editando su PE ya cuando este compilado, pero no lo daniaria? o si existe alguna otra solucion podrian decirmela. Gracias!!!!!
-
Hola fijate esta fucnion que hiso cobein, tenes que poner el icono en un archivo de recurso (en este caso se llama ICON_1) solo se va a ver cuando este compilado.
Option Explicit
Private Const IMAGE_ICON As Long = 1
Private Const WM_SETICON As Long = &H80
Private Const ICON_SMALL As Long = 0
Private Const ICON_BIG As Long = 1
Private Const GW_OWNER As Long = 4
Private Const SM_CXICON As Long = 11
Private Const SM_CYICON As Long = 12
Private Const SM_CXSMICON As Long = 49
Private Const SM_CYSMICON As Long = 50
Private Const LR_SHARED As Long = &H8000&
Private Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long
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 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 Declare Function GetWindow Lib "user32" (ByVal hWnd As Long, ByVal wCmd As Long) As Long
Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
Private Declare Sub InitCommonControls Lib "comctl32.dll" ()
Sub Main()
Call Load(frmMain)
Call frmMain.Show
Call SetIcon(frmMain.hWnd, "ICON_1")
End Sub
Public Sub SetIcon(ByVal hWnd As Long, ByVal sIconResName As String)
' Author : Cobein
' Mail : cobein27@yahoo.com
' Purpose : Function to make your application forms use the same Icon that the .exe
Dim lhWndTop As Long
Dim lhWnd As Long
Dim cx As Long
Dim cy As Long
Dim hIcon As Long
lhWnd = hWnd
lhWndTop = lhWnd
Do While Not (lhWnd = 0)
lhWnd = GetWindow(lhWnd, GW_OWNER)
If Not (lhWnd = 0) Then
lhWndTop = lhWnd
End If
Loop
cx = GetSystemMetrics(SM_CXICON)
cy = GetSystemMetrics(SM_CYICON)
hIcon = LoadImageAsString(App.hInstance, sIconResName, IMAGE_ICON, cx, cy, LR_SHARED)
SendMessageLong lhWndTop, WM_SETICON, ICON_BIG, hIcon
SendMessageLong hWnd, WM_SETICON, ICON_BIG, hIcon
cx = GetSystemMetrics(SM_CXSMICON)
cy = GetSystemMetrics(SM_CYSMICON)
hIcon = LoadImageAsString(App.hInstance, sIconResName, IMAGE_ICON, cx, cy, LR_SHARED)
SendMessageLong lhWndTop, WM_SETICON, ICON_SMALL, hIcon
SendMessageLong hWnd, WM_SETICON, ICON_SMALL, hIcon
End Sub
Saludos.
-
Yo lo resolvi con IcoFx duplicando las imagenes del icono (todos los tamaños a 32bpp y a 24bpp)...
Aun asi, como haces para que el icono del exe sea un icono aparte (por ejemplo que no sea el icono de ningun formulario?)
-
Hola fijate esta fucnion que hiso cobein, tenes que poner el icono en un archivo de recurso (en este caso se llama ICON_1) solo se va a ver cuando este compilado.
Saludos.
perdoname si me equivoco, pero esto lo q hace es aplicar un icono al formulario desde recursos?
Lo q queria es q apareciera en el compilado o sea en el .exe.
no se si me di a enteder?
Gracias de antemano!
-
Para eso tenes q agregar un recurso llamado ICON y su ID=0, y agregarlo al proyecto. Una vez compilado, va a terminar siendo el icono del .exe.
Saludos
-
a ok!!
deja lo checo