Hallo UEZ,
das icon ist im 16x16, 32x32, 48x48, 64x64 und 72x72 Format enthalten.
Gruß Gremlin
Hallo UEZ,
das icon ist im 16x16, 32x32, 48x48, 64x64 und 72x72 Format enthalten.
Gruß Gremlin
Hallo Leute,
meine Frage lautet:
Wie kann ich das Icon auf einem Button, beispielsweise auf eine Größe von 72x72 erhöhen?
$button01 = GUICtrlCreateButton('',5,5,80,80,$BS_ICON)
GUICtrlSetImage(-1,'resource.dll',3); in der dll liegt mein Icon mit verschiedenen Größen
Ist das möglich?
Danke, Gruß Gremlin
Ja, das mit der @AppDataDir war auch so ein Gedanke, oder Einstellungen in der Registry zu hinterlegen aber übersichtlicher wärs halt im Programmordner.
Danke, Gruß Gremlin
Hallo Leute,
ich würde gern meine Einstellungen in einer "settings.ini"-Datei speichern. Wenn diese nicht vorhanden ist wird sie vom Programm erstellt. Soweit so gut, doch wenn mein Programm im Standart-Programm-Ordner liegt und die Datei noch nicht vorhanden ist, benötige ich Admin-Rechte für mein Programm um sie zu erstellen.
Nun meine Frage: kann ich AutoIT sagen, "wenn settings.ini nicht vorhanden, starte Programm als Admin, sonst nicht!" ?
Gruß Gremlin
Vielen Dank euch beiden,
die "Lösung" mit dem ExStyle $WS_EX_CONTROLPARENT hatte ich auch schon probiert, aber vergessen anzugeben. Die Lösung von RAUPI funktioniert mal wieder tadelos.
BIG THX.
Gruß Gremlin
Hallo liebe Leute,
ich würde gern meine gui bewegen können, nutze aber $WS_POPUP und $WS_BORDER, sowie ein Menü mit GUICtrlCreateMenu(...).
Die WM_NCHITTEST Funktion habe ich bereits getestet jedoch ohne Erfolg.
#include <WindowsConstants.au3>
$GUI=GUICreate('Test',300,200,-1,-1,$WS_POPUP+$WS_BORDER)
$ribbon=GUICtrlCreateMenu('Menü')
$ribbonexit=GUICtrlCreateMenuItem('BEENDEN',$ribbon)
GUIRegisterMsg($WM_NCHITTEST, "WM_NCHITTEST")
GUISetState()
While 1
Switch GUIGetMsg()
Case $ribbonexit, -3
Exit
EndSwitch
WEnd
Func WM_NCHITTEST($hWnd, $iMsg, $iwParam, $ilParam)
Local $MousePos = MouseGetPos()
Local $WinPos = WinGetPos($hWnd)
If $hWnd = $GUI And $iMsg = 0x0084 And $MousePos[1] > $WinPos[1]+35 And $MousePos[0] > $WinPos[0]+5 And _
$MousePos[0]+5 < $WinPos[0]+$WinPos[2] And $MousePos[1]+5 < $WinPos[1]+$WinPos[3] Then Return 2
EndFunc
Könnt ihr mir helfen?
Gruß Gremlin
Cool, vielen Dank.
da bau ich mein Script auf deine Funktion um.
Gruß Gremlin
Ist noch im Umbau...
#NoTrayIcon
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Outfile=LottoChance.exe
#AutoIt3Wrapper_Res_Description=v1.2.04
#AutoIt3Wrapper_Res_Comment=Lottochancen-GENERATOR: 6 aus 49
#AutoIt3Wrapper_Res_Field=Companyname|dk78soft
#AutoIt3Wrapper_Res_LegalCopyright=dk78soft
#AutoIt3Wrapper_Res_ProductVersion=1.2.0.4
#AutoIt3Wrapper_Res_FileVersion=1.2.0.4
#AutoIt3Wrapper_Res_Language=7
#AutoIt3Wrapper_UseUpx
#AutoIt3Wrapper_Au3Check_Parameters=-d -w 2 -w 4 -w 6
#AutoIt3Wrapper_Icon=lotto.ico
;#AutoIt3Wrapper_Res_Icon_Add=cancel.ico
;#AutoIt3Wrapper_Res_Icon_Add=ok.ico
;#AutoIt3Wrapper_Res_Icon_Add=write.ico
#endregion
#include <ComboConstants.au3>
#include <Array.au3>
#include <GUIConstantsEx.au3>
#include <GuiButton.au3>
#include <WindowsConstants.au3>
#include <GuiStatusBar.au3>
#include <Date.au3>
#include <File.au3>
HotKeySet('{F9}', '_break')
Global $aLottoNum[49], $timer, $bBreak = False,$iCount = 0
For $i = 1 To 49
$aLottoNum[$i - 1] = $i
Next
Global $progname='LottoChance', $mycompany = 'dkSoftware', $version = '1.02.04'
Global $breite=410, $hoehe=280
Global $Form1 = GUICreate($progname, $breite, $hoehe,-1,-1,$WS_Border+$WS_POPUP+$WS_CLIPSIBLINGS)
Global $ribboncontext =GUICtrlCreateMenu("o(°U°)o ")
Global $idrandom=GUICtrlCreateMenuItem("Zufallsgenerator", $ribboncontext)
Global $idclean=GUICtrlCreateMenuItem("Tip löschen", $ribboncontext)
Global $idsim=GUICtrlCreateMenuItem("Simulation starten", $ribboncontext)
GUICtrlSetState(-1,$GUI_DISABLE)
GUICtrlCreateMenuItem("", $ribboncontext)
Global $ribbonexit = GUICtrlCreateMenuItem("Beenden", $ribboncontext)
Global $ahCheck[49]
For $i = 0 To 48
$ahCheck[$i] = GUICtrlCreateCheckbox($i + 1, 5 + Mod($i, 7) * 30, 5 + Int($i / 7) * 30, 30, 30,$BS_PUSHLIKE)
GUICtrlSetFont(-1, 12, 400,0,"IMPACT")
GUICtrlSetTip(-1, "Wählen Sie ihre 6 Zahlen")
Next
Global $label1 = GUICtrlCreateLabel(' 6 Zahlen auswählen!',5,235,400,16,1)
Global $label3 = GUICtrlCreateLabel('0',250,15,60,16,2)
GUICtrlSetFont(-1, 10, 800,'','Tahoma')
GUICtrlCreateLabel('x 3 Richtige',312,17,70,15)
Global $label4 = GUICtrlCreateLabel('0',250,35,60,16,2)
GUICtrlSetFont(-1, 10, 800,'','Tahoma')
GUICtrlCreateLabel('x 4 Richtige',312,37,70,15)
Global $label5 = GUICtrlCreateLabel('0',250,55,60,16,2)
GUICtrlSetFont(-1, 10, 800,'','Tahoma')
GUICtrlCreateLabel('x 5 Richtige',312,57,70,15)
Global $label6 = GUICtrlCreateLabel('0',250,78,60,18,2)
GUICtrlSetFont(-1, 12, 800,'','Tahoma')
GUICtrlCreateLabel('x 6 Richtige',312,82,70,15)
Global $hStatusb = _GUICtrlStatusBar_Create($Form1, -1, "", $SBARS_TOOLTIPS)
Global $aParts[2] = [$breite-200,$breite]
Global $prozess = GUICtrlCreateProgress(15,220,380,8)
GUICtrlSetState(-1,$GUI_HIDE)
GUISetState()
_GUICtrlStatusBar_SetMinHeight($hStatusb, 25)
_GUICtrlStatusBar_SetParts($hStatusb, $aParts)
Global $hIcon = __WinAPI_ShellExtractIcons(@ScriptFullPath, 0, 16, 16)
_GUICtrlStatusBar_SetIcon($hStatusb, 0, $hIcon)
_GUICtrlStatusBar_SetText($hStatusb,' '&$progname&' '&$version,0)
[/autoit] [autoit][/autoit] [autoit]While 1
Switch GUIGetMsg()
Case $ribbonexit
Exit
#cs
Case $ahCheck[0]
_CheckboxCounter()
Case $ahCheck[1]
_CheckboxCounter()
Case $ahCheck[2]
_CheckboxCounter()
Case $ahCheck[3]
_CheckboxCounter()
Case $ahCheck[4]
_CheckboxCounter()
Case $ahCheck[5]
_CheckboxCounter()
Case $ahCheck[6]
_CheckboxCounter()
Case $ahCheck[7]
_CheckboxCounter()
Case $ahCheck[8]
_CheckboxCounter()
Case $ahCheck[9]
_CheckboxCounter()
Case $ahCheck[10]
_CheckboxCounter()
Case $ahCheck[11]
_CheckboxCounter()
Case $ahCheck[12]
_CheckboxCounter()
Case $ahCheck[13]
_CheckboxCounter()
Case $ahCheck[14]
_CheckboxCounter()
Case $ahCheck[15]
_CheckboxCounter()
Case $ahCheck[16]
_CheckboxCounter()
Case $ahCheck[17]
_CheckboxCounter()
Case $ahCheck[18]
_CheckboxCounter()
Case $ahCheck[19]
_CheckboxCounter()
Case $ahCheck[20]
_CheckboxCounter()
Case $ahCheck[21]
_CheckboxCounter()
Case $ahCheck[22]
_CheckboxCounter()
Case $ahCheck[23]
_CheckboxCounter()
Case $ahCheck[24]
_CheckboxCounter()
Case $ahCheck[25]
_CheckboxCounter()
Case $ahCheck[26]
_CheckboxCounter()
Case $ahCheck[27]
_CheckboxCounter()
Case $ahCheck[28]
_CheckboxCounter()
Case $ahCheck[29]
_CheckboxCounter()
Case $ahCheck[30]
_CheckboxCounter()
Case $ahCheck[31]
_CheckboxCounter()
Case $ahCheck[32]
_CheckboxCounter()
Case $ahCheck[33]
_CheckboxCounter()
Case $ahCheck[34]
_CheckboxCounter()
Case $ahCheck[35]
_CheckboxCounter()
Case $ahCheck[36]
_CheckboxCounter()
Case $ahCheck[37]
_CheckboxCounter()
Case $ahCheck[38]
_CheckboxCounter()
Case $ahCheck[39]
_CheckboxCounter()
Case $ahCheck[40]
_CheckboxCounter()
Case $ahCheck[41]
_CheckboxCounter()
Case $ahCheck[42]
_CheckboxCounter()
Case $ahCheck[43]
_CheckboxCounter()
Case $ahCheck[44]
_CheckboxCounter()
Case $ahCheck[45]
_CheckboxCounter()
Case $ahCheck[46]
_CheckboxCounter()
Case $ahCheck[47]
_CheckboxCounter()
Case $ahCheck[48]
_CheckboxCounter()
For $i = 0 to 48 step 1
Case $ahCheck[$i]
_CheckboxCounter()
Next
#ce
Case $idrandom
_Randoming()
Case $idclean
_Clear()
Case $idsim
_Start()
EndSwitch
[/autoit] [autoit][/autoit] [autoit]WEnd
[/autoit] [autoit][/autoit] [autoit]Func _Randoming()
[/autoit] [autoit][/autoit] [autoit]For $i = 0 To 48
GUICtrlSetState($ahCheck[$i],$GUI_DISABLE)
GUICtrlSetState($ahCheck[$i],$GUI_UNCHECKED)
Next
Local $result,$zahl
For $i = 1 to 6
Do
$zahl = Random(1,49,1)
GUICtrlSetState($ahCheck[$zahl-1],$GUI_CHECKED)
Until StringInStr($result,$zahl) = 0
$result &= StringRight($zahl,stringlen($zahl)-1)
Next
GUICtrlSetState($idsim, $GUI_ENABLE)
_CheckboxCounter()
if $iCount <> 6 Then _Randoming()
AdlibUnRegister()
EndFunc
[/autoit] [autoit][/autoit] [autoit]Func _Break()
$bBreak = True
GUICtrlSetState($idsim, $GUI_DISABLE)
GUICtrlSetState($idrandom,$GUI_ENABLE)
GUICtrlSetState($idclean,$GUI_ENABLE)
GUICtrlSetState($prozess,$GUI_HIDE)
GUICtrlSetData($label1,' Start-Button anklicken!')
EndFunc ;==>_Break
Func _Clear()
For $i = 0 To 48
GUICtrlSetState($ahCheck[$i],$GUI_ENABLE)
GUICtrlSetState($ahCheck[$i],$GUI_UNCHECKED)
Next
GUICtrlSetState($idsim, $GUI_DISABLE)
GUICtrlSetData($label1,' 6 Zahlen auswählen!')
EndFunc
Func _Start()
_CheckboxCounter()
if $iCount <> 6 Then _Randoming()
GUICtrlSetState($idrandom,$GUI_DISABLE)
GUICtrlSetState($idclean,$GUI_DISABLE)
GUICtrlSetState($idsim, $GUI_DISABLE)
GUICtrlSetData($label3,0)
GUICtrlSetData($label4,0)
GUICtrlSetData($label5,0)
GUICtrlSetData($label6,0)
GUICtrlSetState($prozess,$GUI_SHOW)
GUICtrlSetData($prozess,0)
Local $aTip[6], $aDraw, $iWin = StringLeft(6, 1),$i3,$i4,$i5,$i6
$iCount = 0
For $i = 0 To 48
If BitAND(GUICtrlRead($ahCheck[$i]), $GUI_CHECKED) Then
$aTip[$iCount] = $i + 1
$iCount += 1
EndIf
Next
$iCount = 0
GUICtrlSetData($label1,' Bitte warten...')
$timer = TimerInit()
AdlibRegister('_DisplayTimer', 500)
Do
$iCount += 1
$aDraw = _Lottodraw()
Switch _Win($aTip, $aDraw)
Case 3
$i3 += 1
GUICtrlSetData($label3,$i3)
If $i3 = 5 then GUICtrlSetData($prozess,1)
If $i3 = 10 then GUICtrlSetData($prozess,2)
If $i3 = 25 then GUICtrlSetData($prozess,3)
If $i3 = 50 then GUICtrlSetData($prozess,4)
If $i3 = 100 then GUICtrlSetData($prozess,5)
If $i3 = 1000 then GUICtrlSetData($prozess,10)
If $i3 = 2000 then GUICtrlSetData($prozess,15)
If $i3 = 3000 then GUICtrlSetData($prozess,20)
If $i3 = 5000 then GUICtrlSetData($prozess,30)
If $i3 = 7500 then GUICtrlSetData($prozess,40)
If $i3 = 10000 then GUICtrlSetData($prozess,50)
If $i3 = 15000 then GUICtrlSetData($prozess,60)
If $i3 = 20000 then GUICtrlSetData($prozess,70)
If $i3 = 30000 then GUICtrlSetData($prozess,80)
If $i3 = 50000 then GUICtrlSetData($prozess,90)
If $i3 = 75000 then GUICtrlSetData($prozess,95)
Case 4
$i4 += 1
GUICtrlSetData($label4,$i4)
Case 5
$i5 += 1
GUICtrlSetData($label5,$i5)
Case 6
$i6 += 1
GUICtrlSetData($prozess,100)
$bBreak = True
GUICtrlSetData($label6,$i6)
GUICtrlSetData($label1,' Gewonnen!')
MsgBox(0, 'Lottogewinn', 'Hurra, ' & $iWin & ' Richtige!' & @CRLF & 'Anzahl der Ziehungen: ' _
& _NumberFormatThousand($iCount) & @CRLF & 'Benötigte Zeit: ' & _NumberFormatThousand(Round(TimerDiff($timer) / 1000)) & ' sek.')
GUICtrlSetState($prozess,$GUI_HIDE)
EndSwitch
Until $bBreak
$bBreak = False
GUICtrlSetState($idclean, $GUI_ENABLE)
GUICtrlSetState($idsim, $GUI_ENABLE)
GUICtrlSetState($idrandom, $GUI_ENABLE)
AdlibUnRegister()
EndFunc ;==>_Start
Func _DisplayTimer()
GUICtrlSetData($label1,' Bitte warten... '& _NumberFormatThousand($iCount)&' Ziehungen')
EndFunc ;==>_DisplayTimer
Func _Lottodraw()
Local $aTmp = $aLottoNum, $aDraw[6], $iTmp
For $i = 0 To 5
Local $iRandom = Random(0, 48 - $i, 1)
$aDraw[$i] = $aTmp[$iRandom]
$aTmp[$iRandom] = $aTmp[48 - $i]
Next
_ArraySort($aDraw)
Return $aDraw
EndFunc ;==>_Lottodraw
Func _Win($aTip, $aDraw)
Local $iCount = 0
For $i = 0 To 5
If $aTip[$i] = $aDraw[$i] Then $iCount += 1
Next
Return $iCount
EndFunc ;==>_Win
Func _CheckboxCounter()
Global $iCount = 0
For $i = 0 To 48
$iCount += BitAND(GUICtrlRead($ahCheck[$i]), $GUI_CHECKED)
Next
GUICtrlSetData($label1,' '&6-$iCount & ' Zahlen auswählen!')
If $iCount = 6 Then
_CheckboxState($GUI_DISABLE)
GUICtrlSetState($idsim, $GUI_ENABLE)
GUICtrlSetData($label1,' Start-Button anklicken!')
Else
_CheckboxState($GUI_ENABLE)
GUICtrlSetState($idsim, $GUI_DISABLE)
EndIf
EndFunc ;==>_CheckboxCounter
Func _CheckboxState($State)
For $i = 0 To 48
If BitAND(GUICtrlRead($ahCheck[$i]), $GUI_UNCHECKED) Then GUICtrlSetState($ahCheck[$i], $State)
Next
EndFunc ;==>_CheckboxState
Func _NumberFormatThousand($vNumber, $ret='DE') ; bis 18 Vorkommastellen
Local $sOut = '', $a = StringRegExp(StringReplace($vNumber, '.', ','), "(-?\d{1,3})(\d{3})?(\d{3})?(\d{3})?(\d{3})?(\d{3})?(?:\Z|(,\d+))", 3)
For $i = 0 To UBound($a) -1
If $a[$i] <> '' Then $sOut &= '.' & $a[$i]
Next
If $ret <> 'DE' Then Return StringTrimLeft(StringReplace(StringReplace($sOut, '.', ','), ',,', '.'), 1)
Return StringTrimLeft(StringReplace($sOut, '.,', ','), 1)
EndFunc
Func __WinAPI_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)
Return $Ret[5]
EndFunc ;==>__WinAPI_ShellExtractIcons
Hallo Oscar,
die Schleife geht eigentlich bis 48 und soll über nen Counter (in der Funktion) abgefragt werden ob sechs Zahlen gewählt wurden.
Und so wird ein Lottozahlen-Generator draus.
Gruß Gremlin
Hallo,
ist es möglich, Schleifen in Switch/Case zu verwenden, so in dieser Art?
While 1
Switch GUIGetMsg()
For $i=0 to 20 step 1
Case $conrol[$i]
_funktion($i)
next
EndSwitch
WEnd
Gruß Gremlin
Danke @ Shadow667 & Teare, diese Möglichkeit war mir bisher unbekannt und funktioniert tadelos.
Hallo Leute,
ich würde gern in mein Script eine Checkbox einbauen, mit der ich bei Bedarf die GUI in den Vordergrund setzen kann.
Aber irgendwie funktionert es nicht. Seht ihr meinen Fehler?
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
GUICreate('TOPMOST',350,200,-1,-1,BitOR($WS_POPUP,$WS_BORDER))
$check=GUICtrlCreateCheckbox('immer im Vordergrund',5,5,120,30)
GUISetState()
While 1
Switch GUIGetMsg()
Case -3
ExitLoop
Case $check
if BitAnd(GUICtrlRead($check),$GUI_CHECKED) = $GUI_CHECKED then
GUISetStyle(BitOR($WS_POPUP,$WS_BORDER,$DS_SETFOREGROUND))
;GUISetStyle(BitOR($WS_POPUP,$WS_BORDER),$WS_EX_TOPMOST) funktioniert auch nicht
Else
GUISetStyle(BitOR($WS_POPUP,$WS_BORDER))
EndIf
EndSwitch
WEnd
Ich kann mich nur wiederholen, spitzen Arbeit, Danke Raupi.
Vielen Dank Raupi,
du bist Spitze.
Ist es eigentlich auch möglich den gedroppten Inhalt nach Dateien und Ordnern zu überprüfen?
Damit ich quasi für Dateien FileGetSize und für Ordner DirGetSize zum bestimmen der Größe nutzen kann.
Gruß Gremlin
Hallo Leute,
in habe, wie ihr schon gelesen habt ein Problem mit dem drag and drop in ein ListView.
Hier mein Quellcode
#include <GuiListView.au3>
#include <WindowsConstants.au3>
#include <EditConstants.au3>
#include <WinAPISys.au3>
#include <ListViewConstants.au3>
#include <GUIConstantsEx.au3>
Global Const $WM_DROPFILES = 0x0233
Global $gaDropFiles[1], $str = ""
$hGUI = GUICreate('Test',550,300,-1,-1, -1,$WS_EX_ACCEPTFILES)
$idList=GUICtrlCreateListView('Datei|Größe|Hash',10,35,530,240,$ES_AUTOVSCROLL+$ES_READONLY+$WS_VSCROLL)
GUICtrlSetState(-1, $GUI_DROPACCEPTED)
_GUICtrlListView_SetColumnWidth($idList,0,390)
_GUICtrlListView_SetColumnWidth($idList,1,100)
_GUICtrlListView_SetColumnWidth($idList,2,250)
GUIRegisterMsg(0x0233, "WM_DROPFILES")
GUIRegisterMsg ($WM_DROPFILES, "WM_DROPFILES_FUNC")
GUISetState()
While 1
Switch GUIGetMsg()
Case -3
Exit
Case $GUI_EVENT_DROPPED
$str = ""
For $i = 0 To UBound($gaDropFiles) - 1
$str &= "|" & $gaDropFiles[$i]
Next
GUICtrlSetData($idList, $str)
EndSwitch
WEnd
Func WM_DROPFILES_FUNC($hWnd, $msgID, $wParam, $lParam)
Local $nSize, $pFileName
Local $nAmt = DllCall("shell32.dll", "int", "DragQueryFile", "hwnd", $wParam, "int", 0xFFFFFFFF, "ptr", 0, "int", 255)
For $i = 0 To $nAmt[0] - 1
$nSize = DllCall("shell32.dll", "int", "DragQueryFile", "hwnd", $wParam, "int", $i, "ptr", 0, "int", 0)
$nSize = $nSize[0] + 1
$pFileName = DllStructCreate("char[" & $nSize & "]")
DllCall("shell32.dll", "int", "DragQueryFile", "hwnd", $wParam, "int", $i, "ptr", DllStructGetPtr($pFileName), "int", $nSize)
ReDim $gaDropFiles[$i+1]
$gaDropFiles[$i] = DllStructGetData($pFileName, 1)
$pFileName = 0
Next
EndFunc ;==>_WM_DROPFILES_FUNC
Func WM_DROPFILES($hWnd, $iMsg, $wParam, $lParam)
#forceref $hWnd, $iMsg, $wParam, $lParam
Local $aFileList
Switch $hWnd
Case $hGUI
$aFileList = _WinAPI_DragQueryFileEx($wParam)
If IsArray($aFileList) Then
For $A = 1 To $aFileList[0]
ConsoleWrite($aFileList[$A] & @CRLF)
Next
EndIf
_WinAPI_DragFinish($wParam)
Return 0
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>_WM_DROPFILES
Die Dateinamen werden bei mir in den Header des ListViews gepackt, warum?
Und warum erhalte ich den Fehler, dass die Konstante $WM_DROPFILES ( Zeile 8 ) bereits definiert ist?
Gruß Gremlin
Danke UEZ für deine Antwort,
leider ist das Neuland für mich. Ich denke mal, damit kann ich das Icon aus der dll herauslösen,
aber wie bekomme ich es als Hintergrund gesetzt?
Hab es jetzt so versucht mit GDIPlus, aber zu sehen ist nichts.
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <WinAPIShellEx.au3>
#include <GDIPlus.au3>
Global $GUI = GUICreate('',256,256,-1,-1,$WS_POPUP, $WS_EX_CONTROLPARENT+$WS_EX_LAYERED)
Global $pic = _WinAPI_ShellExtractIcon("resource.dll", 5,256,256)
_GDIPlus_Startup() ; lade und aktiviere GDI+
Global $hImageGUIBK = _GDIPlus_ImageLoadFromFile($pic) ; lade Hintergrunddatei per GDI+
SetBitmap($GUI, $hImageGUIBK, 255) ; setze Alpha vom Fenster des Bildes auf 255 (transparent)
Global $GUIsub = GUICreate("", 256, 256, -1, -1, $WS_POPUP, $WS_EX_LAYERED+ $WS_EX_MDICHILD, $GUI)
GUISetBkColor(0x585858) ; => hintergrund ebenfalls durchsichtig, damit die buttons direkt auf das Hintergrundbild gesetzt werden
_WinAPI_SetLayeredWindowAttributes($GUIsub, 0x585858)
GUISetState(@SW_SHOW, $GUI)
GUISetState(@SW_SHOW, $GUIsub)
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_SECONDARYUP
_GDIPlus_Shutdown()
Exit
EndSwitch
WEnd
Global $AC_SRC_ALPHA = 1
Func SetBitmap($hGUI, $hImage, $iOpacity) ; lade hintergrundbild und mache den hintergrund transparent
Local $hScrDC, $hMemDC, $hBitmap, $hOld, $pSize, $tSize, $pSource, $tSource, $pBlend, $tBlend
$hScrDC = _WinAPI_GetDC(0)
$hMemDC = _WinAPI_CreateCompatibleDC($hScrDC)
$hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
$hOld = _WinAPI_SelectObject($hMemDC, $hBitmap)
$tSize = DllStructCreate($tagSIZE)
$pSize = DllStructGetPtr($tSize)
DllStructSetData($tSize, "X", _GDIPlus_ImageGetWidth($hImage))
DllStructSetData($tSize, "Y", _GDIPlus_ImageGetHeight($hImage))
$tSource = DllStructCreate($tagPOINT)
$pSource = DllStructGetPtr($tSource)
$tBlend = DllStructCreate($tagBLENDFUNCTION)
$pBlend = DllStructGetPtr($tBlend)
DllStructSetData($tBlend, "Alpha", $iOpacity)
DllStructSetData($tBlend, "Format", $AC_SRC_ALPHA)
_WinAPI_UpdateLayeredWindow($hGUI, $hScrDC, 0, $pSize, $hMemDC, $pSource, 0, $pBlend, $ULW_ALPHA)
_WinAPI_ReleaseDC(0, $hScrDC)
_WinAPI_SelectObject($hMemDC, $hOld)
_WinAPI_DeleteObject($hBitmap)
_WinAPI_DeleteDC($hMemDC)
EndFunc
Muss ich das Icon vorher noch zwischenspeichern (im TEMP o.ä.)?
Gruß Gremlin
Hallo Leute, ich mal wieder,
heute quält mich folgendes Problem. Ich würde gern ein transparentes Icon, das in einer dll steckt, als Hintergrundbild für eine GUI nutzen, finde allerdings keine Lösung.
Hab es bereits mit GDIPLUS versucht (da konnte ich keine dll benutzen) und mit dem Beispiel der schwebende Buttons sehe ich mein Bild leider auch nicht oder nicht transparent.
#include <WindowsConstants.au3>
#include <GUIConstants.au3>
#include <WinAPI.au3>
$gui = GUICreate("Test Windows regions", 256, 256, -1, -1, $WS_POPUP, $WS_EX_TOPMOST)
$pic = GUICtrlCreateIcon("resource.dll", 5,0,0,256,256)
GUISetState(@SW_SHOW)
$pos = WinGetPos($gui)
_GuiHole($gui, 0, 0, 150, 150)
While 1
$msg = GUIGetMsg()
Switch $msg
Case $GUI_EVENT_SECONDARYUP
ExitLoop
EndSwitch
WEnd
Func _GuiHole($h_win, $i_x, $i_y, $i_sizew, $i_sizeh)
Local $outer_rgn, $inner_rgn, $combined_rgn
$combined_rgn = _WinAPI_CreateRectRgn(0, 0, 0, 0)
_WinAPI_DeleteObject($outer_rgn)
_WinAPI_DeleteObject($inner_rgn)
_AddCtrlRegion($combined_rgn, $pic)
_WinAPI_SetWindowRgn($h_win, $combined_rgn)
EndFunc ;==>_GuiHole
Func _AddCtrlRegion($full_rgn, $ctrl_id)
Local $ctrl_pos, $ctrl_rgn
If IsArray($ctrl_id) Then
For $i = 0 To UBound($ctrl_id) -1
$ctrl_pos = ControlGetPos($gui, "", $ctrl_id[$i])
$ctrl_rgn = _WinAPI_CreateRectRgn($ctrl_pos[0], $ctrl_pos[1], $ctrl_pos[0] + $ctrl_pos[2], $ctrl_pos[1] + $ctrl_pos[3])
_WinAPI_CombineRgn($full_rgn, $full_rgn, $ctrl_rgn, $RGN_OR)
_WinAPI_DeleteObject($ctrl_rgn)
Next
Else
$ctrl_pos = ControlGetPos($gui, "", $ctrl_id)
$ctrl_rgn = _WinAPI_CreateRectRgn($ctrl_pos[0], $ctrl_pos[1], $ctrl_pos[0] + $ctrl_pos[2], $ctrl_pos[1] + $ctrl_pos[3])
_WinAPI_CombineRgn($full_rgn, $full_rgn, $ctrl_rgn, $RGN_OR)
_WinAPI_DeleteObject($ctrl_rgn)
EndIf
EndFunc ;==>_AddCtrlRegion
Ich hoffe ihr könnt mir ein wenig auf die Sprünge helfen,
Gruß Gremlin
Lottich: .icl ist eine Icon Libary, die mit Hilfe der meisten IconEditoren (z.B. IcoFX) erstellt werden können. Sorry, hatte vorausgesetzt, dass das den meisten bekannt wäre.
@ funkey: Vielen Dank, die Funktion ist echt ne große Hilfe.
Gruß Gremlin.
Hat wirklich keiner eine Idee?
Hallo Leute,
es ist ja möglich Icons in Form einer .dll einzubinden. Kann man das in ähnlicher Form mit einer .icl Datei?
Gruß Gremlin.