IconFX Beispiele ( Icon2DLLs )

  • Hi...

    da ich für meine RibbonsBar die ganzen Bilder als Icons in dlls gepackt habe und mehrere gefragt haben wie man eine Übersicht von den ganzen Icons bekommt, möchte ich hier mal kurz 2 Bsps machen wie man 1. Icons erstellt ,sie in eine dll bekommt und 2. alle Icons in einer dll sich anzeigen lassen kann. Eines der besten Programme ist IconFX, das man kostenlos hier runterladen kann.
    Wenn ihr dies habt könnt ihr es installieren.... :whistling:

    [Blockierte Grafik: http://img88.imageshack.us/img88/6325/92417481.png]


    Bsp. 1. Wie erstelle ich ein Icon und wie bekomme ich es in eine dll um es in einem Gui zu benutzen?

    Spoiler anzeigen


    Als erstes sollte man natürlich ein Bild haben je nach dem was man möchte mit durchsichtigem HG Bereichen (*.png) oder ein ganz normales Bild ( *.jpg oder *.bmp ). In meinem Bsp nehme ich das IconFX logo . (auch oben zu sehen) Dann braucht man noch eine leere DLL Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist. (bitte noch entpacken mit 7z).

    • klar... als erstes IconFX starten ^^

    [Blockierte Grafik: http://img27.imageshack.us/img27/2203/62797151.jpg]

    • Als nächstes importiert man ein neues Bild
    • Hier wählt man jetzt z.B. das IconFX logo

    [Blockierte Grafik: http://img39.imageshack.us/img39/4633/29478085.jpg]

    • Wichtig ist jetzt hierbei darauf zu achten, dass die korrekte größe des Bildes angegeben wird
    • in unserem fall 256 x 73 Pixel
    • dann mit OK bestätigen

    [Blockierte Grafik: http://img508.imageshack.us/img508/456/14341759.jpg]

    • im IconFX sollte man jetzt schön den duchsichtigen Bereich anhand des Schachbrettmusters sehen

    [Blockierte Grafik: http://img9.imageshack.us/img9/4392/38007252.jpg] 

    • Nun das Bild als Icon speichern
    • Jetzt muss man das Bild in die leere DLL beokommen Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist. (bitte noch entpacken mit 7z).

    [Blockierte Grafik: http://img24.imageshack.us/img24/561/73450723.jpg] 

    • Dazu öffnet man den Resource Editor

    [Blockierte Grafik: http://img41.imageshack.us/img41/5421/27136145.jpg]

    • Im Resource Editor öffnet (rot) man die zuvor runtergeladene leere dll
    • Dann fügt man das neue Icon der dll hinzu (grün)
    • durch Close schließt man den Resource Editor und wird zum speichern aufgefordert
    • jetzt kann man IconFX beenden
    • Um jetzt das Icon mit durchsichtigem HG in den Gui zu bekommen habe ich mir jetzt 3 Funktionen aus der RibbonsBar UDF kopiert
    • dies wird im folgendem Quelltext verdeutlicht...
    [autoit]

    #include <WinAPI.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 625, 443, 193, 125)
    GUISetBkColor ( 0xCCCCCC ) ; Damit man sieht das der HG des Icons durchsichtig ist!!

    [/autoit] [autoit][/autoit] [autoit]

    ; Erst erstellt man ein normales PIC
    $hPic = GUICtrlCreatePic ( '', 5, 5, 265, 73)

    [/autoit] [autoit][/autoit] [autoit]

    ; einfügen des Icons in das PIC
    __RibbonsBar_SetIconAlpha($hPic, 'leer.dll', 1, 256, 73)

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

    [/autoit] [autoit][/autoit] [autoit]

    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func __RibbonsBar_SetIconAlpha($hWnd, $sIcon, $iIndex, $iWidth, $iHeight)
    If Not IsHWnd($hWnd) Then
    $hWnd = GUICtrlGetHandle($hWnd)
    If $hWnd = 0 Then
    Return SetError(1, 0, 0)
    EndIf
    EndIf
    Local $hIcon = __RibbonsBar_ShellExtractIcons($sIcon, $iIndex-1, $iWidth, $iHeight)
    If $hIcon = 0 Then
    Return SetError(1, 0, 0)
    EndIf
    Local $hBitmap, $hObj, $hDC, $hMem, $hSv
    $hDC = _WinAPI_GetDC($hWnd)
    $hMem = _WinAPI_CreateCompatibleDC($hDC)
    $hBitmap = _WinAPI_CreateCompatibleBitmap($hDC, $iWidth, $iHeight)
    $hSv = _WinAPI_SelectObject($hMem, $hBitmap)
    _WinAPI_DrawIconEx($hMem, 0, 0, $hIcon, $iWidth, $iHeight, 0, 0, 2)
    _WinAPI_ReleaseDC($hWnd, $hDC)
    _WinAPI_SelectObject($hMem, $hSv)
    _WinAPI_DeleteDC($hMem)
    _WinAPI_DestroyIcon($hIcon)
    _WinAPI_DeleteObject(__RibbonsBar_SendMessage($hWnd, 0x0172, 0, 0))
    __RibbonsBar_SendMessage($hWnd, 0x0172, 0, $hBitmap)
    $hObj = __RibbonsBar_SendMessage($hWnd, 0x0173)
    If $hObj <> $hBitmap Then
    _WinAPI_DeleteObject($hBitmap)
    EndIf
    Return 1
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func __RibbonsBar_ShellExtractIcons($sIcon, $iIndex, $iWidth, $iHeight)
    Local $Ret = DllCall('shell32.dll', 'int', 'SHExtractIconsW', 'wstr', $sIcon, 'int', $iIndex, 'int', $iWidth, 'int', $iHeight, 'ptr*', 0, 'ptr*', 0, 'int', 1, 'int', 0)
    If (@error) Or ($Ret[0] = 0) Or ($Ret[5] = Ptr(0)) Then
    Return SetError(1, 0, 0)
    EndIf
    Return $Ret[5]
    EndFunc ;==>_WinAPI_ShellExtractIcons

    [/autoit] [autoit][/autoit] [autoit]

    Func __RibbonsBar_IsPressed($sHexKey, $vDLL = 'user32.dll')
    Local $a_R = DllCall($vDLL, "int", "GetAsyncKeyState", "int", '0x' & $sHexKey)
    If Not @error And BitAND($a_R[0], 0x8000) = 0x8000 Then Return 1
    Return 0
    EndFunc ;==>__RibbonsBar_IsPressed

    [/autoit] [autoit][/autoit] [autoit]

    Func __RibbonsBar_SendMessage($hWnd, $iMsg, $wParam = 0, $lParam = 0, $iReturn = 0, $wParamType = "wparam", $lParamType = "lparam", $sReturnType = "lparam")
    Local $aResult = DllCall("user32.dll", $sReturnType, "SendMessage", "hwnd", $hWnd, "int", $iMsg, $wParamType, $wParam, $lParamType, $lParam)
    If @error Then Return SetError(@error, @extended, "")
    If $iReturn >= 0 And $iReturn <= 4 Then Return $aResult[$iReturn]
    Return $aResult
    EndFunc ;==>__RibbonsBar_SendMessage

    [/autoit]
    • Fertig so hat mein ein durchsichtiges PNG ( Icon ) im Gui.

    Bsp. 2. Wie sehe ich wieviele Icons und welches mit welcher Nummer in einer dll ist?

    Spoiler anzeigen
    • klar... als erstes mal wieder IconFX starten ^^

    [Blockierte Grafik: http://img24.imageshack.us/img24/561/73450723.jpg]

    • jetzt wieder den Resource Editor starten ....
    • die dll datei wie im Bsp.1 öffnen....

    [Blockierte Grafik: http://img291.imageshack.us/img291/3866/26816114.jpg]

    • Hier findet man jetzt die Resouce Nr des Icons in der dll heraus
    • Achtung die Resouce Nr müssen nicht immer unbedingt auch Nummern sein sondern können auch Namen sein!!!
    • Fertig :thumbup:

    Ich hoffe das hilft jemandem ^^
    Habe alles Dateien auch nochmal im Anhang.

    MFG Chris :D

  • Hi,
    mit dem ResHacker kannst Du die DLL einsehen. ;)
    siehe auch: http://icofx.ro/tutorials/tutorial4.html

    Spoiler anzeigen
    [autoit]


    ; Beispiel 1 ---------------------------
    Func Example1()
    Local $icon, $n1, $n2, $msg

    GUICreate("Meine GUI Icons", 250, 250)

    [/autoit] [autoit][/autoit] [autoit]

    $icon = GUICtrlCreateIcon("shell32.dll", 10, 20, 20)
    $n1 = GUICtrlCreateIcon(@WindowsDir & "\cursors\horse.ani", -1, 20, 40, 32, 32)
    $n2 = GUICtrlCreateIcon("shell32.dll", 7, 20, 75, 32, 32) ;#################### Hier die Beispiel-DLL
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    ; Die Schleife wiederholt sich, bis der Benutzer die Beenden-Aktion der GUI auslöst
    While 1
    $msg = GUIGetMsg()

    [/autoit] [autoit][/autoit] [autoit]

    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    WEnd
    GUIDelete()
    EndFunc ;==>Example1 aus der Hilfe

    [/autoit]
  • ich habe das problem dass wenn ich im recoureeditor eine iconsammlung erstellt habe dann auf speichern gehe es nur als .icl oder so speichern kann aber nicht als dll aber warum

  • Ich benutze IcoFx
    Wenn ich die LeereDll herunterladen und die öffne geht es wenn ich eine dll einfach mit endung dll erstelle ohne inhalt und dan mit icofx öffnen will geht es nicht aber jetzt hats funktioniert hab lauter icons drinen und ein toolbar problem aber wie gesagt mit der leeren dll aus dem archiv von chrisatack geht es

  • @Raupi ja genau hab ich schon alleine hätte ich die nicht gefunden aber chrisatack hat sie ja hochgeladen, was mir aber erst später aufgefallen ist jetzt habe ich eine mit 4 icons und stehe vor dem nächsten problem