2017-01-20 7 views
0

У меня возникла проблема при загрузке значка основного фрейма динамически из моего старого приложения VB6. Файл значка имеет 2 иконки 16x16x256 и 32x32x256, и я делаю это с помощью этого простого способа:Значки динамической загрузки на MainFrame

Private Sub Form_OnLoad() 
    Me.Icon = LoadPicture("C:\MainMyIcon.ico") 
End Sub 

На панели задач Windows значок выглядит хорошо, однако на основной раме значок отображается только с 16 (или может быть меньше).

Что наиболее интересно, если я загружаю этот значок через VB IDE, значок выглядит гладко и красиво.

LoadPicture имеет несколько параметров, 3rht - ColorDepth. Я попытался установить его вручную на vbLPColor, который должен быть 256 цветов, но результат тот же.

Затем я попытался загрузить иконку из ресурсов через LoadResPicture, но снова мне не повезло.

Любые идеи?

ответ

1

Если вы прибегаете к Windows API, то результат выглядит хорошо и с 256 цветами:

Option Explicit 

Private Declare Function LoadImage Lib "user32" Alias "LoadImageA" (ByVal hInst As Long, ByVal lpsz As String, ByVal dwImageType As Long, ByVal dwDesiredWidth As Long, ByVal dwDesiredHeight As Long, ByVal dwFlags 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 Const LR_LOADFROMFILE = &H10 
Private Const WM_SETICON = &H80 
Private Const IMAGE_ICON = &H1 
Private Const ICON_SMALL = &H0 
Private Const ICON_BIG = &H1 

Private Sub SetIconFromFile(ByVal hWnd As Long, FullFileName As String) 
    Dim hIcon As Long 
    hIcon = LoadImage(App.hInstance, FullFileName, IMAGE_ICON, 16, 16, LR_LOADFROMFILE) 
    If hIcon = 0 Then Exit Sub 
    SendMessageLong hWnd, WM_SETICON, ICON_BIG, hIcon 
    SendMessageLong hWnd, WM_SETICON, ICON_SMALL, hIcon 
End Sub 

Private Sub Command1_Click() 
    SetIconFromFile Me.hWnd, App.Path & "\" & "icon8bpp.ico" 
End Sub 

Вот сравнение с иконкой с 256 полных палитрой цветов. Me.Icon является размывание до 16.

enter image description here

+0

Привет, Это было именно мое решение. Через Win32 я могу загружать 32-разрядные значки, и все в порядке, за исключением того, что - свойство Form.Icon больше недействительно. Таким образом, я должен был заменить все вхождения MyForm_Load(): Me.Icon = frmMain.Icon .... с MyForm_Load(): SetFrameIcon Me SetFrameIcon (ByRef FRM как вариант) устанавливает иконку к цели форма. – Kiko