1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. Taz77

Beiträge von Taz77

  • Alternative Hash Funktion für MD4, MD5 & SHA-1

    • Taz77
    • 28. März 2016 um 21:47

    Super Tipp :thumbup:

    Ich hab den Code noch ein bisschen geändert, das hat bei mir nochmal, ein paar Tausend aufrufe die Sekunde mehr gebracht :D

    AutoIt
    ; #CONSTANTS# ===================================================================================================================
    Global Const $__g_tMD5_CTX = DllStructCreate("dword i[2];dword buf[4];ubyte in[64];ubyte digest[16]")
    Global Const $__g_pMD5_CTX = DllStructGetPtr($__g_tMD5_CTX), $__g_hDllAdvapi = DllOpen('advapi32.dll')
    ; ===============================================================================================================================
    OnAutoItExitRegister('__Md5_Exit')
    
    
    Func _Md5($sString)
    	DllCall($__g_hDllAdvapi, 'none', 'MD5Init', 'ptr', $__g_pMD5_CTX)
    	DllCall($__g_hDllAdvapi, 'none', 'MD5Update', 'ptr', $__g_pMD5_CTX, 'str', $sString, 'dword', StringLen($sString))
    	DllCall($__g_hDllAdvapi, 'none', 'MD5Final', 'ptr', $__g_pMD5_CTX)
    	Return Hex(DllStructGetData($__g_tMD5_CTX, 'digest'))
    EndFunc
    Func __Md5_Exit()
    	DllClose($__g_hDllAdvapi)
    EndFunc
    Alles anzeigen
  • GDI+ & LAYERED Window == Keine Live Preview?

    • Taz77
    • 28. Juni 2015 um 17:35

    Hier noch mal ein anderes Beispiel, welches mein vorhaben besser verdeutlichen sollte.
    (Ich weiß das es nicht perfekt ist :rolleyes: )

    Beispiel - Bild:
    _Frage2-Gui2.png


    Und der dazugehörige Code:

    AutoIt
    #include <WindowsConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GDIPlus.au3>
    
    
    Func _MaxInt($iNum1, $iNum2)
    	Return ($iNum1 > $iNum2) ? $iNum1 : $iNum2
    EndFunc
    
    
    Func _SetBmp($hGUI, $hImage, $iWidth, $iHeight, $iOpacity = 255)
    	Local $hScrDC = _WinAPI_GetDC($hGUI)
    	Local $hMemDC = _WinAPI_CreateCompatibleDC($hScrDC)
    	Local $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
    	Local $hOld = _WinAPI_SelectObject($hMemDC, $hBitmap)
    	Local $tSize = DllStructCreate("long X;long Y")
    	Local $pSize = DllStructGetPtr($tSize)
    	DllStructSetData($tSize, "X", $iWidth)
    	DllStructSetData($tSize, "Y", $iHeight)
    
    
    	Local $tSource = DllStructCreate("long X;long Y")
    	Local $pSource = DllStructGetPtr($tSource)
    	Local $tBlend = DllStructCreate("byte Op;byte Flags;byte Alpha;byte Format")
    	Local $pBlend = DllStructGetPtr($tBlend)
    	DllStructSetData($tBlend, "Alpha", $iOpacity)
    	DllStructSetData($tBlend, "Format", 1)
    
    
    	_WinAPI_UpdateLayeredWindow($hGUI, $hScrDC, 0, $pSize, $hMemDC, $pSource, 0, $pBlend, 0x02)
    	_WinAPI_ReleaseDC(0, $hScrDC)
    	_WinAPI_SelectObject($hMemDC, $hOld)
    	_WinAPI_DeleteObject($hBitmap)
    	_WinAPI_DeleteDC($hMemDC)
    EndFunc
    
    
    Func _DrawItems(ByRef $hImage, $iWidth, $iHeight, $hGui)
    	Local Enum $Bitmap, $x, $y, $Width, $Height
    	#forceref $x, $y
    
    
    	Local $aData[9][5] = [[0, 0, 0, 76, 76],[0, 77, 0, 1, 60],[0, 87, 0, 96, 76],[0, 0, 76, 76, 1],[1, 0, 0, 0, 0],  [0, 87, 76, 96, 1],[0, 0, 87, 76, 87],[0, 77, 87, 1, 87],[0, 87, 87, 96, 87]]
    	Local $WidthSteps = _MaxInt(Round(($iWidth - ($aData[0][$Width] + $aData[2][$Width])) / $aData[1][$Width], 0), 0)
    	Local $HeightSteps = _MaxInt(Round(($iHeight - ($aData[0][$Height] + $aData[6][$Height])) / $aData[3][$Height], 0), 0)
    	Local $WidthTotal = $aData[0][$Width] + $aData[2][$Width] + ($WidthSteps * $aData[1][$Width])
    	Local $HeightTotal = $aData[0][$Height] + $aData[6][$Height] + ($HeightSteps * $aData[3][$Height])
    
    
    	Local $hWindow = _GDIPlus_GraphicsCreateFromHWND($hGui)
    	Local $hBmp = _GDIPlus_BitmapCreateFromGraphics($WidthTotal, $HeightTotal, $hWindow)
    	Local $hGraphic = _GDIPlus_ImageGetGraphicsContext($hBmp)
    	Local $hBrush = _GDIPlus_LineBrushCreateFromRect(_GDIPlus_RectFCreate(0, 0, $iWidth, $iHeight), 0xFF009917, 0xFF0F6029, 1)
    
    
    
    
    	For $i = 0 To UBound($aData) - 1
    		If $aData[$i][0] <> 1 Then
    			$aData[$i][0] = _GDIPlus_BitmapCloneArea($hImage, $aData[$i][1], $aData[$i][2], $aData[$i][3], $aData[$i][4], $GDIP_PXF32ARGB)
    		EndIf
    	Next
    
    
    	_GDIPlus_GraphicsFillRect($hGraphic, 30, 30, $iWidth-80, $iHeight-70, $hBrush)
    
    
    	; Left: Top, Bottom
    	_GDIPlus_GraphicsDrawImageRect($hGraphic, $aData[0][$Bitmap], 0, 0, $aData[0][$Width], $aData[0][$Height])
    	_GDIPlus_GraphicsDrawImageRect($hGraphic, $aData[6][$Bitmap], 0, $HeightTotal-$aData[6][$Height], $aData[6][$Width], $aData[6][$Height])
    
    
    	; Right: Top, Bottom
    	_GDIPlus_GraphicsDrawImageRect($hGraphic, $aData[2][$Bitmap], $WidthTotal-$aData[2][$Width], 0, $aData[2][$Width], $aData[2][$Height])
    	_GDIPlus_GraphicsDrawImageRect($hGraphic, $aData[8][$Bitmap], $WidthTotal-$aData[8][$Width], $HeightTotal-$aData[8][$Height], $aData[8][$Width], $aData[8][$Height])
    
    
    	; Center: Top, Bottom
    	For $i = 0 To $WidthSteps - 1
    		_GDIPlus_GraphicsDrawImageRect($hGraphic, $aData[1][$Bitmap], $aData[0][$Width] + ($i * $aData[1][$Width]), 0, $aData[1][$Width], $aData[1][$Height])
    		_GDIPlus_GraphicsDrawImageRect($hGraphic, $aData[7][$Bitmap], $aData[3][$Width] + ($i * $aData[7][$Width]), $HeightTotal - $aData[7][$Height], $aData[7][$Width], $aData[7][$Height])
    	Next
    
    
    	; Center: Left, Right
    	For $i = 0 To $HeightSteps - 1
    		_GDIPlus_GraphicsDrawImageRect($hGraphic, $aData[3][$Bitmap], 0, $aData[0][$Height] + ($i * $aData[3][$Height]), $aData[3][$Width], $aData[3][$Height])
    		_GDIPlus_GraphicsDrawImageRect($hGraphic, $aData[5][$Bitmap], $WidthTotal - $aData[5][$Width], $aData[2][$Height] + ($i * $aData[5][$Height]), $aData[5][$Width], $aData[5][$Height])
    	Next
    
    
    	For $i = 0 To UBound($aData) - 1
    		If $aData[$i][0] <> 1 Then
    			_GDIPlus_ImageDispose($aData[$i][0])
    		EndIf
    	Next
    
    
    	_GDIPlus_BrushDispose($hBrush)
    	_GDIPlus_GraphicsDispose($hGraphic)
    	_GDIPlus_GraphicsDispose($hWindow)
    
    
    	Return $hBmp
    EndFunc
    
    
    
    
    _GDIPlus_Startup()
    
    
    Global $Image = _GDIPlus_ImageLoadFromFile(StringRegExpReplace(@AutoItExe, "(?i)AutoIt(?:[\dx_]+)\.exe", "Examples\\GUI\\Torus.png"))
    Global $Width = 500, $Height = 300
    Global $Gui = GUICreate("Test Gui", $Width, $Height, -1, -1, BitOR($WS_POPUP, $WS_GROUP, $WS_SYSMENU), $WS_EX_LAYERED)
    Global $Bmp = _DrawItems($Image, $Width, $Height, $Gui)
    
    
    _SetBmp($Gui, $Bmp, $Width, $Height)
    _GDIPlus_ImageDispose($Image)
    _GDIPlus_ImageDispose($Bmp)
    
    
    Global $Child = GUICreate("", $Width-10, $Height-10, 10, 10, $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_MDICHILD), $Gui)
    GUISetBkColor(0x000000, $Child)
    _WinAPI_SetLayeredWindowAttributes($Child, 0x000000, 255)
    
    
    GUICtrlCreateLabel("Where is the text and the buttons in the Live Preview, when the window is minimized?", 50, 58, 360, 152)
    GUICtrlSetFont(-1, 22, 800, 0, "Comic Sans Ms")
    GUICtrlSetColor(-1, 0xEEEEEE)
    Global $BtnExit = GUICtrlCreateButton("Exit", 140, 222, 100, 25)
    Global $BtnMinimize = GUICtrlCreateButton("Minimize", 250, 222, 100, 25)
    
    
    GUISetState(@SW_SHOW, $Gui)
    GUISetState(@SW_SHOW, $Child)
    
    
    While 1
    	Switch GUIGetMsg()
    		Case $GUI_EVENT_CLOSE, $BtnExit
    			ExitLoop
    		Case $BtnMinimize
    			WinSetState($Gui, "", @SW_MINIMIZE)
    	EndSwitch
    WEnd
    
    
    _GDIPlus_Shutdown()
    GUIDelete($Gui)
    GUIDelete($Child)
    Alles anzeigen


  • GDI+ & LAYERED Window == Keine Live Preview?

    • Taz77
    • 26. Juni 2015 um 22:22

    Ich bin halt gerade dabei, mir einen eigenen flexiblen Gui Style zu erstellen.
    Dabei wird die Umrandung, also der Rahmen aus einer png Datei mittels _GDIPlus_BitmapCloneArea geschnitten, und flexibel auf die Größe angepasst.
    Ein Teil für die Ecke Oben links, Oben Mitte x mal wiederholt, Oben Rechts, usw...


    Das Script was ich im ersten Post eingefügt habe war ja, als einfache Demonstration gedacht, welches mein Problem sichtbar macht, und sich auf das wesentliche beschränkt,
    da ich nicht direkt 700 Zeilen Code Posten wollte, und das ganze zu unübersichtlich wird, und mir keiner mehr helfen kann :D

    Sorry nochmal, das ich die Transparenz vergessen hatte zu erwähnen.


    Edit: Beispiel Bild, und Code im nächsten Post

  • GDI+ & LAYERED Window == Keine Live Preview?

    • Taz77
    • 26. Juni 2015 um 21:45
    Zitat von UEZ

    Arbeite ich bei MS?

    hihi :D
    Danke für deinen Lösungs Vorschlag, das Problem dabei ist aber leider, das die Gui nicht mehr Transparent ist :S
    Deswegen musste ich ja, mit der zweiten Gui und _WinAPI_SetLayeredWindowAttributes arbeiten.
    Aber ich glaube ich hatte auch vergessen zu erwähnen, das die Gui Transparent bleiben muss.

  • GDI+ & LAYERED Window == Keine Live Preview?

    • Taz77
    • 26. Juni 2015 um 17:12
    Zitat von UEZ

    Warum im Vorschaufenster der Text nicht angezeigt wird, weiß ich nicht...

    Ps: Es macht mir ihrgentwie Angst wenn eine Foren Legende wie UEZ so was schreibt ;(

  • GDI+ & LAYERED Window == Keine Live Preview?

    • Taz77
    • 26. Juni 2015 um 14:59

    Das hier ist ja nur ein kleines Beispiel.
    In Wirklichkeit handelt es sich ja um eine komplexere Gui mit ganz vielen unterschiedlichen Elementen, und nicht einfach nur um einen Text.
    (Select, Listen zig Buttons usw.)

  • GDI+ & LAYERED Window == Keine Live Preview?

    • Taz77
    • 26. Juni 2015 um 11:01

    Hallo zusammen, mich beschäftigt seit Tagen schon ein Problem welches ich leider nicht gelöst bekomme ;(
    (Hätte ich mal nicht mit den GDI+ zeug angefangen 8| )

    Das Problem ist das der Inhalt von der zweiten Gui nicht in der Live Preview angezeigt wird, sobald das Fenster Minimiert ist.

    So sollte es aussehen:


    Und wenn ich die Gui minimiere sieht es leider so aus:

    Hier mal der Dazugehörige beispiel AutoIt Code:

    AutoIt
    #include <WindowsConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GDIPlus.au3>
    
    
    Func _SetBmp($hGUI, $hImage, $iWidth, $iHeight, $iOpacity = 255)
    	Local $hScrDC = _WinAPI_GetDC($hGUI)
    	Local $hMemDC = _WinAPI_CreateCompatibleDC($hScrDC)
    	Local $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
    	Local $hOld = _WinAPI_SelectObject($hMemDC, $hBitmap)
    	Local $tSize = DllStructCreate("long X;long Y")
    	Local $pSize = DllStructGetPtr($tSize)
    	DllStructSetData($tSize, "X", $iWidth)
    	DllStructSetData($tSize, "Y", $iHeight)
    
    
    	Local $tSource = DllStructCreate("long X;long Y")
    	Local $pSource = DllStructGetPtr($tSource)
    	Local $tBlend = DllStructCreate("byte Op;byte Flags;byte Alpha;byte Format")
    	Local $pBlend = DllStructGetPtr($tBlend)
    	DllStructSetData($tBlend, "Alpha", $iOpacity)
    	DllStructSetData($tBlend, "Format", 1)
    
    
    	_WinAPI_UpdateLayeredWindow($hGUI, $hScrDC, 0, $pSize, $hMemDC, $pSource, 0, $pBlend, 0x02)
    	_WinAPI_ReleaseDC(0, $hScrDC)
    	_WinAPI_SelectObject($hMemDC, $hOld)
    	_WinAPI_DeleteObject($hBitmap)
    	_WinAPI_DeleteDC($hMemDC)
    EndFunc
    
    
    Func _DrawItems(ByRef $hImage, $iWidth, $iHeight, $hGui)
    	Local $hWindow = _GDIPlus_GraphicsCreateFromHWND($hGui)
    	Local $hBmp = _GDIPlus_BitmapCreateFromGraphics($iWidth, $iHeight, $hWindow)
    	Local $hGraphic = _GDIPlus_ImageGetGraphicsContext($hBmp)
    	Local $hBrush = _GDIPlus_LineBrushCreateFromRect(_GDIPlus_RectFCreate(0, 0, $iWidth, $iHeight), 0xFF009917, 0xFF0F6029, 1)
    
    
    	_GDIPlus_GraphicsFillRect($hGraphic, 0, 0, $iWidth, $iHeight, $hBrush)
    	_GDIPlus_GraphicsDrawImageRect($hGraphic, $hImage, 0, 0, 92, 90)
    
    
    	_GDIPlus_BrushDispose($hBrush)
    	_GDIPlus_GraphicsDispose($hGraphic)
    	_GDIPlus_GraphicsDispose($hWindow)
    
    
    	Return $hBmp
    EndFunc
    
    
    
    
    _GDIPlus_Startup()
    
    
    Global $Image = _GDIPlus_ImageLoadFromFile(StringRegExpReplace(@AutoItExe, "(?i)AutoIt(?:[\dx_]+)\.exe", "Examples\\GUI\\Torus.png"))
    Global $Width = 400, $Height = 300
    Global $Clone = _GDIPlus_BitmapCloneArea($Image, 0, 0, 92, 90, $GDIP_PXF32ARGB)
    Global $Gui = GUICreate("Test Gui", $Width, $Height, -1, -1, BitOR($WS_POPUP, $WS_GROUP, $WS_SYSMENU), $WS_EX_LAYERED)
    Global $Bmp = _DrawItems($Clone, $Width, $Height, $Gui)
    
    
    _SetBmp($Gui, $Bmp, $Width, $Height)
    _GDIPlus_ImageDispose($Image)
    _GDIPlus_ImageDispose($Bmp)
    
    
    Global $Child = GUICreate("", $Width-10, $Height-10, 10, 10, $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_MDICHILD), $Gui)
    GUISetBkColor(0x000000, $Child)
    _WinAPI_SetLayeredWindowAttributes($Child, 0x000000, 255)
    
    
    GUICtrlCreateLabel("Wo ist der Text und der Button, in der Live Vorschau, wenn das Fenster Minimiert ist?", 1, 94, 360, 152, $WS_BORDER)
    GUICtrlSetFont(-1, 24, 800)
    GUICtrlSetColor(-1, 0xEEEEEE)
    Global $BtnExit = GUICtrlCreateButton("Beenden", 150, 256, 100, 25)
    Global $BtnMinimize = GUICtrlCreateButton("Minimieren", 260, 256, 100, 25)
    
    
    
    
    GUISetState(@SW_SHOW, $Gui)
    GUISetState(@SW_SHOW, $Child)
    
    
    While 1
    	Switch GUIGetMsg()
    		Case $GUI_EVENT_CLOSE, $BtnExit
    			ExitLoop
    		Case $BtnMinimize
    			WinSetState($Gui, "", @SW_MINIMIZE)
    	EndSwitch
    WEnd
    
    
    _GDIPlus_Shutdown()
    GUIDelete($Gui)
    GUIDelete($Child)
    Alles anzeigen

    Ich hoffe ihr könnt mir weiterhelfen :love:

  • _GDIPlus_***Dispose

    • Taz77
    • 23. Juni 2015 um 11:32

    Stimmt hast recht, danke dir :)

  • _GDIPlus_***Dispose

    • Taz77
    • 23. Juni 2015 um 11:20

    Hab da mal eine kurze simple Frage:
    Reicht es zb. einmal am ende des Scriptes _GDIPlus_****Dispose($hVariable) aufzurufen, oder muss diese nach jeden Wechsel die Funktion aufgerufen werden?

    Beispiel A:

    AutoIt
    $hBrush = _GDIPlus_LineBrushCreate(0, 0, 280, 500, 0xFFFF0000, 0xFF4020FF, 1)
    ; ... Ganz viel Code
    $hBrush = _GDIPlus_LineBrushCreate(0, 0, 200, 500, 0xFF000000, 0xFF0020FF, 1)
    ; ... Ganz viel Code
    $hBrush = _GDIPlus_LineBrushCreate(0, 0, 277, 500, 0xFF00FF00, 0xFF0000FF, 1)
    ; ... Ganz viel Code
    
    
    _GDIPlus_BrushDispose($hBrush)


    Beispiel B:

    AutoIt
    $hBrush = _GDIPlus_LineBrushCreate(0, 0, 280, 500, 0xFFFF0000, 0xFF4020FF, 1)
    ; ... Ganz viel Code
    _GDIPlus_BrushDispose($hBrush)
    
    
    $hBrush = _GDIPlus_LineBrushCreate(0, 0, 200, 500, 0xFF000000, 0xFF0020FF, 1)
    ; ... Ganz viel Code
    _GDIPlus_BrushDispose($hBrush)
    
    
    $hBrush = _GDIPlus_LineBrushCreate(0, 0, 277, 500, 0xFF00FF00, 0xFF0000FF, 1)
    ; ... Ganz viel Code
    _GDIPlus_BrushDispose($hBrush)
    Alles anzeigen
  • AutoIt Versions-Archiv und Diskussionsthread (3.3.8.1 bis 3.3.10.2, Stand 30.12.13)

    • Taz77
    • 30. Dezember 2013 um 09:02
    Zitat

    -> Wer Versionen 3.3.9.12 bis 3.3.9.21 hat, bitte melden!

    Alle Dateien mit 7-zip gepackt. (leider atm nur auf uploaded.net)

    autoit-v3.3.9.12.7z
    autoit-v3.3.9.13.7z
    autoit-v3.3.9.14.7z
    autoit-v3.3.9.15.7z
    autoit-v3.3.9.16.7z
    autoit-v3.3.9.17.7z
    autoit-v3.3.9.18.7z
    autoit-v3.3.9.19.7z
    autoit-v3.3.9.20.7z
    autoit-v3.3.9.21.7z

    Edit:
    Die Version 3.3.9.10 (Beta) & Version 3.3.9.11 (Beta) von dem ersten Beitrag sind defekt. (2,9 mb, und 5 mb)
    Kannst du die nochmal neu Hochladen?

  • AutoIt Versions-Archiv und Diskussionsthread (3.3.8.1 bis 3.3.10.2, Stand 30.12.13)

    • Taz77
    • 23. Dezember 2013 um 23:37

    Also ich bin super zufrieden mit der neuen Version, einfach Top :thumbup:
    Ich muss gestehen, das ich aber auch schon seit Monaten immer mit der jeweiligen aktuellen Beta gearbeitet habe.

    Zitat von Andy

    error: _WinAPI_MoveMemory() already defined.
    Aber WO diese Funktion defined ist, behält der Interpreter für sich....
    .....
    Meine persönliches "User-Include-Dir" ist jedenfalls größer als die gesamte restliche AutoIt-Installation.

    Hehe, wo ich das gelesen habe, musste ich schon schmunzeln :rolleyes:

    Bzw. sollte man immer mit den folgenden AU3Check Parametern Programmieren, dann bleiben böse Überraschungen meistens aus ;)

    [autoit]

    #AutoIt3Wrapper_AU3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6 -w 7

    [/autoit]


    Und für Ordnungsfanatiker, bzw zwischen durch mal :thumbup:

    [autoit]

    #AutoIt3Wrapper_AU3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6 -w 7 -v 3

    [/autoit]

    EDIT:

    Zitat von minx

    AutoIt-Versionsarchiv (Mirror) und Diskussionsthread
    -> Wer Versionen 3.3.9.12 bis 3.3.9.23 hat, bitte melden!


    Hab die Versionen! Brauchst du sie noch? Dann würde ich sie dir Hochladen.

  • Gui Resizing

    • Taz77
    • 23. Dezember 2013 um 08:58
    Zitat von Raupi

    So sollte es gehen:

    Spoiler anzeigen
    [autoit]

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

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

    $iDefWinW = 500
    $iDefWinH = 332

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

    Opt("GUIResizeMode", $GUI_DOCKALL)

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

    $hGui = GUICreate("Gui", 500, 332, -1, -1, BitOR($GUI_SS_DEFAULT_GUI, $WS_MAXIMIZEBOX, $WS_SIZEBOX, $WS_THICKFRAME, $WS_TABSTOP))
    $iMinH = _WinAPI_GetWindowHeight($hGui);Höhe des Fensters mit Rahmen
    $iMinW = _WinAPI_GetWindowWidth($hGui);Breite des Fensters mit Rahmen

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

    Global $GroupTop = GUICtrlCreateGroup("Dock: Left, Right, Top", 8, 8, 484, 100)
    ;~ GUICtrlSetResizing(-1, $GUI_DOCKLEFT+$GUI_DOCKRIGHT+$GUI_DOCKTOP)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    Global $GroupMiddle = GUICtrlCreateGroup("Dock: Left, Right, Height, VCenter", 8, 116, 484, 100)
    ;~ GUICtrlSetResizing(-1, $GUI_DOCKLEFT+$GUI_DOCKRIGHT+$GUI_DOCKVCENTER)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    Global $GroupBottom = GUICtrlCreateGroup("Dock: Left, Right, Bottom", 8, 224, 484, 100)
    ;~ GUICtrlSetResizing(-1, $GUI_DOCKLEFT+$GUI_DOCKRIGHT+$GUI_DOCKBOTTOM+$GUI_DOCKHEIGHT)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUISetState(@SW_SHOW)

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

    GUIRegisterMsg($WM_SIZE, "_ResizeHandler")
    GUIRegisterMsg($WM_GETMINMAXINFO, "MY_WM_GETMINMAXINFO");Resizen der GUI begrenzen
    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    ExitLoop
    EndSwitch
    WEnd

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

    Func _ResizeHandler($hWnd, $iCtrl, $iWParam, $iLParam)
    $iW = _WinAPI_LoWord($iLParam)
    $iH = _WinAPI_HiWord($iLParam)
    $iGrouphight = Int(($iH - 132) / 2)
    GUICtrlSetPos($GroupTop, 8, 8, $iW - $iDefWinW + 484, $iGrouphight)
    GUICtrlSetPos($GroupBottom, 8, $iGrouphight + 124, $iW - $iDefWinW + 484, $iGrouphight)
    GUICtrlSetPos($GroupMiddle, 8, $iGrouphight + 16, $iW - $iDefWinW + 484, 100)

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

    EndFunc ;==>_ResizeHandler

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

    Func MY_WM_GETMINMAXINFO($hWnd, $msg, $wParam, $lParam)
    If $hWnd = $hGui Then
    Local $minmaxinfo = DllStructCreate("int;int;int;int;int;int;int;int;int;int", $lParam)
    DllStructSetData($minmaxinfo, 7, $iMinW) ; min Breite
    DllStructSetData($minmaxinfo, 8, $iMinH) ; min Höhe
    ;DllStructSetData($minmaxinfo, 9, 1024) ; max X
    ;DllStructSetData($minmaxinfo, 10, 180) ; max Y
    EndIf
    EndFunc ;==>MY_WM_GETMINMAXINFO

    [/autoit]


    Zusätzlich habe ich beim Resizen die Minimalgröße der GUI auf den Wert begrenzt, welche die Gui beim erstellen hatte.
    Sieht ziehmlich beknackt aus, wenn die GUI zu klein wird. ;)

    Alles anzeigen


    Super, vielen lieben dank Raupi :thumbup:

    Ein dickes Dankeschön an alle!

  • Gui Resizing

    • Taz77
    • 22. Dezember 2013 um 16:47
    Zitat von Raupi

    Ich denke das in den Groups noch weiter Controls entstehen sollen. Schon alleine deshalb ist ein resizen der Childguis der geringere Aufwand. ;)

    Nein, in meinen Fall im Moment nicht. Ich habe in der Top & Bottom Gruppe Jeweils ein Child Fenster drin, welches aber keine AutoIt Anwendung ist. Wenn dem aber so wäre, ist deine Idee auf jeden Fall die weniger aufwendigere. :thumbup:
    Ich habe nur in der Mittleren Gruppe meine ganzen Controls.

    Ich habe mal versucht nur die Obere und Untere Gruppe zu verschieben, das war mein Lösungsansatz:

    Spoiler anzeigen
    [autoit]

    Func __WM_SIZE($hWnd, $iMsg, $wParam, $lParam)
    #forceref $hWnd, $iMsg, $wParam, $lParam
    Local $iMargin = 16, $iWndHeight = BitShift($lParam, 16), $aPos = ControlGetPos($hWnd, '', $GroupMiddle)

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

    GUICtrlSetPos($GroupTop, Default, Default, $aPos[2], $aPos[1]-$iMargin)
    GUICtrlSetPos($GroupBottom, Default, $aPos[1]+$aPos[3]+($iMargin/2), $aPos[2], $iWndHeight - ($aPos[1]+$aPos[3]+$iMargin))
    Return $GUI_RUNDEFMSG
    EndFunc

    [/autoit]


    Funktioniert auch soweit super, nur leider nicht wenn ich das Fenster Maximiere. ?(

  • Gui Resizing

    • Taz77
    • 22. Dezember 2013 um 16:21
    Zitat von Raupi

    Setze die 3 Gruppen auf Childguis, dann mußt du bei WM_SIZE nur die Childs in der Größe ändern.
    Die einzelnen Controls der Childs kannst du ja per GUICtrlSetResizing an die Childguis koppeln.


    Super Idee :thumbup:

    Zitat von chesstiger
    Spoiler anzeigen
    [autoit]


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

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

    $iDefWinW = 500
    $iDefWinH = 332

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

    Opt("GUIResizeMode", $GUI_DOCKALL)

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

    GUICreate("Gui", 500, 332, -1, -1, BitOR($GUI_SS_DEFAULT_GUI,$WS_MAXIMIZEBOX,$WS_SIZEBOX,$WS_THICKFRAME,$WS_TABSTOP))
    GUIRegisterMsg($WM_SIZE, "_ResizeHandler")

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

    Global $GroupTop = GUICtrlCreateGroup("Dock: Left, Right, Top", 8, 8, 484, 100)
    ;~ GUICtrlSetResizing(-1, $GUI_DOCKLEFT+$GUI_DOCKRIGHT+$GUI_DOCKTOP)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    Global $GroupMiddle = GUICtrlCreateGroup("Dock: Left, Right, Height, VCenter", 8, 116, 484, 100)
    ;~ GUICtrlSetResizing(-1, $GUI_DOCKLEFT+$GUI_DOCKRIGHT+$GUI_DOCKVCENTER)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    Global $GroupBottom = GUICtrlCreateGroup("Dock: Left, Right, Bottom", 8, 224, 484, 100)
    ;~ GUICtrlSetResizing(-1, $GUI_DOCKLEFT+$GUI_DOCKRIGHT+$GUI_DOCKBOTTOM+$GUI_DOCKHEIGHT)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUISetState(@SW_SHOW)

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

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    ExitLoop
    EndSwitch
    WEnd

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

    Func _ResizeHandler($hWnd, $iCtrl, $iWParam, $iLParam)
    $iW = _WinAPI_LoWord($iLParam)
    $iH = _WinAPI_HiWord($iLParam)
    ConsoleWrite("New Size: " & $iW & ":" & $iH & @CRLF)

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

    ;GBottom soll die Position nicht verändern. Breite muss trotzdem angepasst werden.
    GUICtrlSetPos($GroupBottom, 8, $iH - $iDefWinH + 224, $iW - $iDefWinW + 484, 100)

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

    ;GMiddle soll die Hälfte des Abstandes vom oberen Rand und GBottom einnehmen. Die Position und die Höhe muss sich daher anpassen.
    $iGMiddleHFactor = (($iH - 108) / ($iDefWinH - 108))
    GUICtrlSetPos($GroupMiddle, 8, 116 * $iGMiddleHFactor, $iW - $iDefWinW + 484, $iH - $iDefWinH + 224 - $iGMiddleHFactor * 116)

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

    ;GTop soll die Position nicht verändern, nur die andere Hälfte des Abstandes zwischen dem oberen Rand und GBottom einnehmen.
    GUICtrlSetPos($GroupTop, 8, 8, $iW - $iDefWinW + 484, 116 * $iGMiddleHFactor - 8)
    EndFunc

    [/autoit]

    WM_SIZE ist der richtige Ansatz. :thumbup:

    lg

    Edit:
    Raupis Idee wäre evtl. auch nicht schlecht, wenn man sich die Berechnungen anschaut... ^^
    Dann muss immer nur die Child-GUI verändert werden.

    Alles anzeigen

    Auch eine Super Idee, danke für den Code :thumbup:
    Nur soll GMiddle die Fixe Höhe haben, und nicht die GBottom.

  • Gui Resizing

    • Taz77
    • 22. Dezember 2013 um 15:30
    Zitat von BugFix

    Soweit ich beim Rumprobieren mit dem Resizing erfahren habe, wird das Resize-Verhalten nicht nur auf die Ctrl sondern auch auf den gesamten GUI-Hintergrund angewendet. Somit kannst du einen fixen Abstand zw. Ctrls aber dynamische Änderung der Ctrl selbst nicht realisieren.

    Das habe ich fast befürchtet, aber Dankeschön für die Info.

    Mir Ist da gerade etwas eingefallen. Ich werde mal versuchen mit WM_SIZE etwas zu bauen, mal schauen ob das klappt.

  • Gui Resizing

    • Taz77
    • 22. Dezember 2013 um 15:03

    Hallo zusammen, ich hab ein kleines Problem.
    Ich möchte eine Gui mit 3 Group Controls erstellen, eine Art 3 Zeilen Ansicht.

    Im Prinzip soll beim Resize der Gui der Abstand zwischen "$GroupTop, $GroupMiddle" und "$GroupMiddle, $GroupBottom" immer 8 Pixel bleiben!
    Aber die Höhe von $GroupTop und $GroupMiddle soll sich Dynamisch anpassen.
    Nur leider wird der Abstand zwischen den Groups immer größer :(

    So weit bin ich bis jetzt gekommen:

    [autoit]

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

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

    GUICreate("Gui", 500, 332, -1, -1, BitOR($GUI_SS_DEFAULT_GUI,$WS_MAXIMIZEBOX,$WS_SIZEBOX,$WS_THICKFRAME,$WS_TABSTOP))
    Global $GroupTop = GUICtrlCreateGroup("Dock: Left, Right, Top", 8, 8, 484, 100)
    GUICtrlSetResizing(-1, $GUI_DOCKLEFT+$GUI_DOCKRIGHT+$GUI_DOCKTOP)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    Global $GroupMiddle = GUICtrlCreateGroup("Dock: Left, Right, Height, VCenter", 8, 116, 484, 100)
    GUICtrlSetResizing(-1, $GUI_DOCKLEFT+$GUI_DOCKRIGHT+$GUI_DOCKHEIGHT+$GUI_DOCKVCENTER)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    Global $GroupBottom = GUICtrlCreateGroup("Dock: Left, Right, Bottom", 8, 224, 484, 100)
    GUICtrlSetResizing(-1, $GUI_DOCKLEFT+$GUI_DOCKRIGHT+$GUI_DOCKBOTTOM)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUISetState(@SW_SHOW)

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

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    ExitLoop
    EndSwitch
    WEnd

    [/autoit]
  • StringReplace mit RegExp-Pattern und Manipulation jedes Matches per Iteration

    • Taz77
    • 23. Mai 2013 um 01:03

    Gern,
    wäre nett wenn du deine Resultate, uns dann mitteilen würdest :)

  • StringReplace mit RegExp-Pattern und Manipulation jedes Matches per Iteration

    • Taz77
    • 22. Mai 2013 um 23:07

    Hallo BugFix, ich stell dir hier mal einer meiner Lieblings Funktion "_StringRegExpReplace_Callback" zu Verfügung :)

    [autoit]

    ; #FUNCTION# ====================================================================================================================
    ; Name ..........: _StringRegExpReplace_Callback
    ; Description ...:
    ; Syntax ........: _StringRegExpReplace_Callback($sString, $sPattern, $sCallback[, $sBefore = ''[, $sAfter = '']])
    ; Parameters ....: $sString
    ; $sPattern
    ; $sCallback
    ; $sBefore
    ; $sAfter
    ; Return values .: None
    ; Author ........: Taz77 (Markus Ehmig <autoit at ehmig dot net>)
    ; Since .........: 2012/04/23
    ; Modified ......: 2013/05/11
    ; Remarks .......: Achtung! Das ' wird temporär im $sString durch \x1a ersetzt, wenn im plattern danach gesucht werden soll, muss nach \x1a enstelle von ' gesucht werden
    ; Related .......:
    ; Link ..........:
    ; Example .......: No
    ; ===============================================================================================================================
    Func _StringRegExpReplace_Callback($sString, $sPattern, $sCallback, $sBefore='', $sAfter='')
    Local $Str = Execute("'" & StringRegExpReplace(StringReplace($sString, "'", Chr(26), 0, 2), $sPattern, $sBefore&"'&" & $sCallback & "&'"&$sAfter) & "'")
    If @error then
    ConsoleWrite('_StringRegExpReplace_Callback error! Pattern: "'&$sPattern&'", Callback: "'&$sCallback&'"' & @LF)
    Return $sString
    EndIf
    Return StringReplace($Str, Chr(26), "'", 0, 2)
    EndFunc

    [/autoit]

    Anwendungsbeispiel für dein Problem:

    [autoit]

    $String = "abc[1] gjj66 h [20]j4l7l3 l[3]-g9 j[80lh[444][5]k21k]kq" ; alle Zahlen in eckigen Klammern sollen mit ihrem Wert*1000 ersetzt werden
    $sRet = _StringRegExpReplace_Callback($String, "\[(\d+)\]", "__CallBack_Multiplikation('\1')", '[', ']')
    ConsoleWrite($sRet & @LF)

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

    Func __CallBack_Multiplikation($sInput)
    Return Int($sInput) * 1000
    EndFunc

    [/autoit]


    Ich hoffe das hilft dir weiter :)

  • Hilfe beim Parsen(Regex) von Globalen/Lokalen Variablen aus einer *.au3 Datei

    • Taz77
    • 20. Mai 2013 um 19:35

    Danke für deine Tipps :thumbup:

    Zitat von BugFix

    Noch was: Ich halte es für wenig wahrscheinlich, dass du allein mit einem Pattern die Ergebnisse rausziehen kannst.


    Jap genau, das Problem sind die Funktion in Funktion Zuweisungen zu einer Variable, z.b:

    [autoit]

    Local $Test = StringRegExpReplace(StringReplace($sString, "'", Chr(26), 0, 2), $sPattern, $sDummy), $Var

    [/autoit]


    Ich habe es jetzt so gelöst das ich die "einfachen" Zuweisungen schon mal mit einen Regex Teile, und für die Komplexeren, werde ich mal deine Tipps befolgen.
    Stichwort: Klammern zählen inc :D

  • Hilfe beim Parsen(Regex) von Globalen/Lokalen Variablen aus einer *.au3 Datei

    • Taz77
    • 20. Mai 2013 um 02:33

    danke werde ich mir mal anschauen.

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™