2017-01-20 5 views
0

Ich habe ein Problem beim Versuch, ein Mainframe-Symbol dynamisch aus meiner alten VB6-Anwendung zu laden. Die Icon-Datei hat zwei Symbole 16x16x256 und 32x32x256 und ich tue es über diese einfache Art und Weise:Dynamisch laden Symbole auf MainFrame

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

auf der Windows-Taskleiste auf das Symbol sieht gut aus, aber auf dem Hauptrahmen wird das Symbol mit nur 16 gezeigt (oder vielleicht weniger) Farben.

Was am interessantesten ist, wenn ich dieses Symbol über VB IDE laden, sieht das Symbol glatt und nett aus.

LoadPicture hat mehrere Parameter, der 3rht ist ColorDepth. Ich habe versucht, es manuell auf vbLPColor, die 256 Farben sein sollte, aber das Ergebnis ist das gleiche.

Dann habe ich versucht, das Icon von Ressourcen über LoadResPicture zu laden, aber wieder kein Glück für mich.

Irgendwelche Ideen?

Antwort

1

Wenn Sie auf Windows-API zurückgreifen, dann sieht das Ergebnis auch gut mit 256 Farben:

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 

Hier ist ein Vergleich mit einem Symbol mit insgesamt 256 paletted Farben. Me.Icon wird Dithering 16.

enter image description here

+0

Hallo, Das war genau meine Lösung. Via Win32 kann ich 32-Bit-Icons laden und alles ist gut, außer dass - Form.Icon Eigenschaft ist nicht mehr gültig. So hatte ich alle Vorkommen von MyForm_Load ersetzen(): Me.Icon = frmMain.Icon .... mit MyForm_Load(): SetFrameIcon Me SetFrameIcon (ByRef frm Als Variante) stellt das Symbol auf ein Ziel bilden. – Kiko