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....
[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 autoit.de/wcf/attachment/6415/(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 autoit.de/wcf/attachment/6415/(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...
#include <WinAPI.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#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!!
; Erst erstellt man ein normales PIC
$hPic = GUICtrlCreatePic ( '', 5, 5, 265, 73)
; einfügen des Icons in das PIC
__RibbonsBar_SetIconAlpha($hPic, 'leer.dll', 1, 256, 73)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
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
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
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
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
- 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
Ich hoffe das hilft jemandem
Habe alles Dateien auch nochmal im Anhang.
MFG Chris