2017-01-20 3 views
0

古いVB6アプリケーションからメインフレームアイコンを動的にロードしようとすると問題が発生します。アイコンファイルは2つのアイコン16x16x256と32x32x256を持っており、私はこの簡単な方法を経由して、それをやっている:しかし、メインフレーム上のアイコンのみ16(で示され、アイコンがよさそうだ、WindowsのタスクバーでMainFrame上のアイコンを動的にロード

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

またはより少ないかもしれない)色。

VB IDE経由でアイコンをロードすると、最も面白いのはアイコンがスムーズで素敵に見えます。

LoadPictureにはいくつかのパラメータがあり、3rhtはColorDepthです。私は256色にする必要がありますvbLPColorに手動で設定しようとしましたが、結果は同じです。

私はリソースから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

Hiにディザリングされたこれはまさに私の解決策でした。私は32ビットのアイコンをロードすることができますが、Form.Iconプロパティはもはや有効ではありません。だから私は MyForm_Loadのすべての出現を()を交換する必要がありました:Me.Icon = frmMain.Icon .... MyForm_Load()と :ターゲットにアイコンを設定します(バリアントとしてFRMのByRef)ミー SetFrameIcon SetFrameIcon形。 – Kiko

関連する問題