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. BugFix

Beiträge von BugFix

  • Falsche Ausgabe einer WMIC Abfrage

    • BugFix
    • 20. Juni 2018 um 11:40

    || - hast du da zwei stehen? - Dann gehts natürlich nicht. Mit einem funktionierts, wie gewollt.

  • _IsPressed mit ß

    • BugFix
    • 20. Juni 2018 um 11:11
    Zitat von Simpel

    Hätte das was mit _WinAPI_SetWindowsHookEx() zu tun?

    Genau. Ist eine interessante Sache. Leider wird das auch für gar nicht gern gesehene Aktivitäten (z.B. Keyloggger) genutzt.

    Deshalb halten wir uns mit Unterstützung zu diesem Thema etwas bedeckt. Mit etwas eigener Anstrengung findet man dann schon zu Lösungen.

    Da Scriptkiddies sich nicht gern anstrengen, reichen unsere vagen Hinweise den Usern eigentlich.

  • Aus Textdatei Zahlen bis zum bestimmten wert weiterführen

    • BugFix
    • 20. Juni 2018 um 09:47

    Ich versuche mal das so auszudrücken, wie ich es verstanden habe:

    Code
    Startwert_1: 3019180
    Startwert_2: 91
    Endwert_1:  3019199
    Endwert_2: 93
    
    gewünschtes Ergebnis, eine Liste:
    3019180-91 (Startwert_1-Startwert_2)
    3019180-92
    3019180-93
    3019181-91
    3019181-92
    ...
    3019199-93 (Endwert_1-Endwert_2)
    Alles anzeigen

    Ist das korrekt?

    Soll die Liste als Textdatei mit allen Werten untereinander ausgegeben werden oder gruppiert?

    Gib mal ein vorher-nachher-Bsp. an.


    EDIT:

    Das geht natürlich problemlos auch in Excel:

    Erstelle dieses Makro

    Code
    Sub GenerateNumbers()
        Dim sResult As String
        Dim iWriteLine As Integer
        iWriteLine = 4
        For i = Range("B1").Value To Range("B2").Value
            For k = Range("C1").Value To Range("C2").Value
                sResult = CStr(i) & "-" & CStr(k)
                Range("A" & CStr(iWriteLine)).Value = sResult
                iWriteLine = iWriteLine + 1
            Next k
        Next i
    End Sub
    Alles anzeigen

    Die Felder musst du ggf. anpassen, ich habe es mit dieser Tabelle ausgeführt:

    generate Numbers.png


    PS: Wegen Bezahlung - Drück den Spenden-Button und unterstütze unser Forum. Betrag ist dir überlassen.

  • Firebird SQL - Problem Belegdatum

    • BugFix
    • 19. Juni 2018 um 18:41

    Mit GROUP & Co stehe ich sowieso auf Kriegsfuß. Die Syntaxbeschreibung dazu ist leider wenig aussagekräftig. Deshalb habe ich darum in den letzten 20 Jahren immer einen Bogen gemacht (ich verstehe das einfach nicht :().

    Wenn ich das analog zu deinem Bsp. ausführe gibt es ein Problem bei HAVING: "Allgemeiner SQL-Fehler. Ungültiger Ausdruck in der HAVING-Bedingung. Weder eine Aggregatfunktion noch Teil einer GROUPBY-Bedingung."

    Setze ich bei HAVING statt date<=.. maxDate<=.. ein, ergibt das den Fehler: Column MAXDATE unbekannt.

    Aber, wie gesagt, da sich mir das Group-Gedöns echt nicht erschließt, weiß ich nicht mal, wie ich daran herumschrauben sollte. :rolleyes:

  • Firebird SQL - Problem Belegdatum

    • BugFix
    • 19. Juni 2018 um 16:30
    Zitat von Bitnugger

    Hilft dir das weiter?

    http://www.firebirdfaq.org/faq198/

    Leider nicht. Zählen war jetzt nicht das Ziel.

    Zitat von Kanashius

    Ich kenn jetzt Firebird-SQL nicht, aber generell würde ich es so probieren:

    SELECT * FROM (SELECT adressnr,max(date) as maxDate FROM belege GROUP BY adressnr) g WHERE g.maxDate<='2011-10-10'

    (Bei max muss eventuell erst zu einem zahlenwert gecastet werden, das hängt von der art der speicherung ab)

    MfG Kanashius

    Aggregat max funktioniert mit Datumsfeldern, das ist schon mal ein Schritt vorwärts, brauch ich nichts casten.

    Leider lässt sich die obige Syntax nicht umsetzen. Das innere Query kann man in Firebird nicht einem Pseudotable zuweisen und im selben Atemzug darauf zugreifen.

    Ich habe etliches experimentiert, aber ich vermute, dass es gar nicht möglich ist diese Abfrage in einem Schritt zu realisieren, da auf jeden DS in BELEG eine Abfrage auf die verfügbaren Adressnummern in KUNDEN erfolgen muss. Das sind ca. 1.200.000 DS aus Belege auf ca. 10.000 DS in KUNDEN.

    Ich werde jetzt mal umsteigen auf SQL-Batch. Sollte ich da zu einer Lösung kommen, kann ich versuchen das Step-by-Step zurückzubauen und im Idealfall doch noch bei einem Query zu landen.

  • Firebird SQL - Problem Belegdatum

    • BugFix
    • 18. Juni 2018 um 21:46

    Ich brauche als Ergebnis einer Abfrage: jüngste Rechnung ist größer/kleiner gefragter Zeitraum. Das kann ich optisch sehen, wenn ich für jede KundenNr alle Belege gruppiere und nach Datum sortiere. Aber optisch nutzt nichts - ich muss anhand der Entscheidung die Daten weiterverarbeiten.

    Das ist mein Problem auf den Punkt:

    Ich kann abfragen:

    - alle Belege mit Belegdatum älter X

    Aber jeder Beleg enthält eine AdressNr und es gibt mehrere Belege zu einer Adressnr.

    Meine Abfrage müsste also von der Logik lauten:

    Alle Belege bei denen für die Adressnr des Beleges kein anderer Beleg existiert mit derselben AdressNr und einem Belegdatum jünger als HEUTE minus FRIST.

    Ich bekomme das einfach nicht in ein Query.

  • Firebird SQL - Problem Belegdatum

    • BugFix
    • 18. Juni 2018 um 21:21

    Ich habe gerade einen Knoten im Hirn und komme nicht weiter.

    Ich habe eine Tabelle BELEGE und will diejenigen Einträge ausfiltern, bei denen für die enthaltene ADRESSNR der neueste Beleg mindestens das Alter X hat.

    (Auf diese Weise will ich über die entsprechenden ADRESSNR die Kunden ermitteln, bei denen die Aufbewahrungsfrist abgelaufen ist und somit die Löschung/Anonymisierung vorgenommen werden muss - Danke an DSGVO :cursing:)

    Abfrage nach Rechnungen älter als X sind kein Problem - aber wie komme ich an die jüngste?

    Bin dankbar für Vorschläge.

  • Digitaluhr v4

    • BugFix
    • 17. Juni 2018 um 21:13

    Schick, schick!

    Aber ich möchte mal auf hohem Niveau "meckern" 8o

    Für die Kalenderwoche verwendet man üblicherweise "KW", "WNr." ist dann eher eine private Abkürzung. [/Klugscheißmodus]

  • Pixelsearch / alternative für Bilder

    • BugFix
    • 17. Juni 2018 um 01:01

    Nun bleib mal auf dem Teppich. Ich kann hier keine Aggressivität entdecken.

    Du solltest nur nicht gleich angepisst sein, wenn intensiv nachgefragt wird.

    Ich kann mit deinem Startpost auch nichts anfangen und habe mich deshalb von Anfang an raus gehalten. - Gehe aber auch von einem X-Y Problem aus.

    Im Übrigen solltest du in einem Programmiererforum keine bauchpinselnde Konversation erwarten. Wir machen das alles in unserer Freizeit und lieben daher zeitsparenderweise kurz und knackig Fakten.

  • GroupEx.au3 -- User Group Control, vielseitig modifizierbar

    • BugFix
    • 3. Juni 2018 um 09:36

    Neu v0.12

    Ein paar Optimierungen.

  • GroupEx.au3 -- User Group Control, vielseitig modifizierbar

    • BugFix
    • 2. Juni 2018 um 22:57

    Neu v0.11

    Nun ist auch das Auffangen/Setzen der Farbe beim Disable/Enable nicht mehr erforderlich.

  • GroupEx.au3 -- User Group Control, vielseitig modifizierbar

    • BugFix
    • 2. Juni 2018 um 18:26

    Oh man, war ein klassisches Eigentor.

    Meine Groupelemente sind ja alle Label. Und wenn ich die Label auf Hide setze (was sinnfrei ist, da das keinen Einfluß auf das Aussehen hat), werden die darüber gelagerten Control nicht mehr klickbar, auch nicht nach Enable. Habe ich nun korrigiert.

    Ich poste gleich die neue Version im Startpost.

  • GroupEx.au3 -- User Group Control, vielseitig modifizierbar

    • BugFix
    • 2. Juni 2018 um 15:40

    To-Do-List:

    Funktion GroupClose

    ControlMove ersetzen durch GUICtrlSetPos

    Verschieben /Status setzen auch für nicht-native Control --> ist umgesetzt aber: nach set Status Disable, dann Enable kann kein Control der Group angeklickt werden :/

    Bitte mal die v 0.9 testen,

    vielleicht findet jemand den Fehler, bin da irgendwie in einer Sackgasse.

    v 0.9
    AutoIt
    ;-- TIME_STAMP   2018-06-02 15:31:10   v 0.9
    
    #include-once
    #include <GUIConstantsEx.au3>
    #include <WinAPIGdi.au3>
    #include <WinAPI.au3>
    
    ; == border color settings
    Global Const $_GROUPBORDER_LEFT     = 0x000001   ; == left border
    Global Const $_GROUPBORDER_TOPL     = 0x000002   ; == top border left from title
    Global Const $_GROUPBORDER_TOPR     = 0x000004   ; == top border right from title
    Global Const $_GROUPBORDER_TOP      = BitOR($_GROUPBORDER_TOPL,$_GROUPBORDER_TOPR)  ; == top border
    Global Const $_GROUPBORDER_RIGHT    = 0x000008   ; == right border
    Global Const $_GROUPBORDER_BOTTOM   = 0x000010   ; == bottom border
    Global Const $_GROUPBORDER_ALL      = BitOR($_GROUPBORDER_LEFT,$_GROUPBORDER_TOP,$_GROUPBORDER_RIGHT,$_GROUPBORDER_BOTTOM)  ; == full border
    ; == text settings
    Global Const $_GROUPTEXT_FORE       = 0x000020   ; == sets text fore color
    Global Const $_GROUPTEXT_BACK       = 0x000040   ; == sets text BG-color, should be $GUI_BKCOLOR_TRANSPARENT (default), if Group BG-color is diffent to GUI BG-color or same as Group BG-color
    Global Const $_GROUPTEXT_TRANS      = 0x000080   ; == sets text BG-color to $GUI_BKCOLOR_TRANSPARENT
    Global Const $_GROUPTEXT_TEXT       = 0x000100   ; == sets the title text
    Global Const $_GROUPTEXT_ITALIC     = 0x000200   ; == sets text style to italic
    Global Const $_GROUPTEXT_DEFAULT    = 0x000400   ; == sets text style back to normal
    Global Const $_GROUPTEXT_LEFT       = 0x000800   ; == sets text position to left side (default)
    Global Const $_GROUPTEXT_CENTER     = 0x001000   ; == sets text position centered
    Global Const $_GROUPTEXT_RIGHT      = 0x002000   ; == sets text position to right side
    ; == background color group
    Global Const $_GROUPBACKGROUND      = 0x004000   ; == sets BG-color inside border area
    ; == move the whole control
    Global Const $_GROUP_MOVE_ABS       = 0x008000   ; == give param as array [x,y,width,height], values that should not change set to "*"
                                                     ;    you can also give values as comma seperated string: "x,y,width,height"
                                                     ;    y,width,height by default has value "*", so you can omit them if not need to change
    Global Const $_GROUP_MOVE_REL       = 0x010000   ; == same as before, but given values relative to current position/size
    ; == default disabling colors
    Global Const $_GROUP_DISABLE_BGDEF  = 0xFAFAFA   ; == the default background color value, if disabling the group
    Global Const $_GROUP_DISABLE_TXTDEF = 0xF2F2F2   ; == the default title color value, if disabling the group
    
    ; == get system metrics
    Global $_giTop, $_giSide
    __SystemGetWindowBorder($_giTop, $_giSide)
    
    ; #FUNCTION# ====================================================================================================================
    ; Name ..........: _GuiCtrlGroup_Create
    ; Description ...: Creates a group control as collection of labels
    ; Syntax ........: _GuiCtrlGroup_Create($_sText, $_iX, $_iY, $_iWidth, $_iHeight[, $_iBorderCol = -1[, $_iForeCol = -1[,
    ;                  $_iBackCol = -1[, $_iTitleParam=$_GROUPTEXT_LEFT]]]])
    ; Parameters ....: $_hGui               - GUI, where the group is still create
    ;                  $_sText              - Titel
    ;                  $_iX                 - x position
    ;                  $_iY                 - y position, its the value for top of the title - border starts at: y +7
    ;                  $_iWidth             - width
    ;                  $_iHeight            - height, its the height from top of title to bottom border
    ;                  $_iBorderCol         - [optional] Color for all border elements. Keyword Default = Silver: 0xC0C0C0, -1 = System (invisible)
    ;                  $_iForeCol           - [optional] Title text color. Default is -1 (System).
    ;                  $_iBackCol           - [optional] Group area background color. Default is -1 (System).
    ;                  $_iTitleParam        - [optional] Title align left (default), centered or right or combined with italic style: BitOr($_CONST_ALIGN_, $_GROUPTEXT_ITALIC)
    ;                                         Because $_GROUPTEXT_LEFT is the default alignment, you can use $_GROUPTEXT_ITALIC alone, to set italic style left aligned.
    ; Return values .: Structure with IDs of all group elements
    ; Author ........: BugFix
    ; ===============================================================================================================================
    Func _GuiCtrlGroup_Create($_hGui, $_sText, $_iX, $_iY, $_iWidth, $_iHeight, $_iBorderCol=Default, $_iForeCol=-1, $_iBackCol=-1, $_iTitleParam=$_GROUPTEXT_LEFT)
        $_iY += 7
        Local $guiTmp = GUICreate('TEMP')
        Local $idText, $aSize[1]
        If $_sText <> '' Then
            $idText = GUICtrlCreateLabel('  ' & $_sText, 0, 0)
            $aSize = ControlGetPos($guiTmp, '', $idText)
            GUICtrlDelete($idText)
        Else
            ReDim $aSize[3]
            $aSize[2] = 0
        EndIf
        GUISwitch($_hGui)
        GUIDelete($guiTmp)
        If $aSize[2] > $_iWidth -12 Then $aSize[2] = $_iWidth -12
        Local $dLeft = 10
        If $aSize[2] > 0 Then
            Switch $_iTitleParam
                Case $_GROUPTEXT_CENTER
                    $dLeft = Int(($_iWidth-$aSize[2])/2)
                Case $_GROUPTEXT_RIGHT
                    $dLeft = $_iWidth-10-$aSize[2]
            EndSwitch
        EndIf
        Local $idBG     = GUICtrlCreateLabel('', $_iX+1, $_iY+1, $_iWidth-2, $_iHeight-2-7)
        If $_iBackCol > -1 Then GUICtrlSetBkColor($idBG, $_iBackCol)
        GUICtrlSetState($idBG, $GUI_DISABLE)
        Local $idLeft   = GUICtrlCreateLabel('', $_iX,                  $_iY,             1,                         $_iHeight-7)
        Local $idTopL   = GUICtrlCreateLabel('', $_iX+1,                $_iY,             $dLeft-1,                  1)
        Local $idTopR   = GUICtrlCreateLabel('', $_iX+$dLeft+$aSize[2], $_iY,             $_iWidth-$aSize[2]-$dLeft, 1)
        Local $idRight  = GUICtrlCreateLabel('', $_iX+$_iWidth,         $_iY,             1,                         $_iHeight-7)
        Local $idBottom = GUICtrlCreateLabel('', $_iX+1,                $_iY+$_iHeight-7, $_iWidth,                  1)
        If IsKeyword($_iBorderCol) Then $_iBorderCol = 0xC0C0C0
        If $_iBorderCol > -1 Then
            GUICtrlSetBkColor($idLeft,   $_iBorderCol)
            GUICtrlSetBkColor($idTopL,   $_iBorderCol)
            GUICtrlSetBkColor($idTopR,   $_iBorderCol)
            GUICtrlSetBkColor($idRight,  $_iBorderCol)
            GUICtrlSetBkColor($idBottom, $_iBorderCol)
        EndIf
        If $_sText <> '' Then $_sText = '  ' & $_sText
        $idText = GUICtrlCreateLabel($_sText, $_iX+$dLeft, $_iY-7, $aSize[2], 17)
        GUICtrlSetBkColor($idText, $GUI_BKCOLOR_TRANSPARENT)
        If BitAND($_iTitleParam, $_GROUPTEXT_ITALIC) Then
            GUICtrlSetFont($idText, Default, Default, 2)
        EndIf
        If $_iForeCol > -1 Then GUICtrlSetColor($idText, $_iForeCol)
        Local $tagGROUP = "int Text;int Left;int TopL;int TopR;int Right;int Bottom;int Background;int Align;"
        Local $tGROUP   = DllStructCreate($tagGROUP)
        $tGROUP.Text = $idText
        $tGROUP.Left = $idLeft
        $tGROUP.TopL = $idTopL
        $tGROUP.TopR = $idTopR
        $tGROUP.Right = $idRight
        $tGROUP.Bottom = $idBottom
        $tGROUP.Background = $idBG
        $tGROUP.Align = BitXOR($_iTitleParam, $_GROUPTEXT_ITALIC)
        GUIStartGroup()
        Return $tGROUP
    EndFunc  ;==>_GuiCtrlGroup_Create
    
    
    ; #FUNCTION# ====================================================================================================================
    ; Name ..........: _GuiCtrlGroup_Close
    ; Description ...: Starts a new group and so the previous group will closed
    ; Syntax ........: _GuiCtrlGroup_Set()
    ; Return values .: None
    ; Note ..........: Only required, if outside the group radio buttons following. But it can used to close each group.
    ; Author ........: BugFix
    ; ===============================================================================================================================
    Func _GuiCtrlGroup_Close()
        GUIStartGroup()
    EndFunc  ;==>_GuiCtrlGroup_Close
    
    ; #FUNCTION# ====================================================================================================================
    ; Name ..........: _GuiCtrlGroup_Set
    ; Description ...: Changes values of a _GuiCtrlGroup_Create() created control.
    ; Syntax ........: _GuiCtrlGroup_Set(ByRef $_structGroup, $_vValue, $_constFlag, $_aCtrlInside)
    ; Parameters ....: $_structGroup        - Return value from _GuiCtrlGroup_Create()
    ;                  $_vValue             - The new value, maybe an empty string with some flag.
    ;                  $_constFlag          - The const to identify the action (see constants at top)
    ;                  $_aCtrlInside        - With action flag $_GROUP_MOVE_ABS/$_GROUP_MOVE_REL you can give an array of controls
    ;                                         inside this group. This controls will moved too with the delta x/y values.
    ; Return values .: None
    ; Author ........: BugFix
    ; ===============================================================================================================================
    Func _GuiCtrlGroup_Set(ByRef $_structGroup, $_vValue, $_constFlag, $_aCtrlInside= Null)
        Local $hWndGui = _WinAPI_GetParent(GUICtrlGetHandle($_structGroup.Background))
        Local $idText       = $_structGroup.Text
        Local $idLeft       = $_structGroup.Left
        Local $idTopL       = $_structGroup.TopL
        Local $idTopR       = $_structGroup.TopR
        Local $idRight      = $_structGroup.Right
        Local $idBottom     = $_structGroup.Bottom
        Local $idBackground = $_structGroup.Background
        Local $iAlign       = $_structGroup.Align
        Local $aSize, $aBott, $sTitle;, $vReturn = Null
        If BitAND($_constFlag, $_GROUPBORDER_LEFT)   Then GUICtrlSetBkColor($idLeft,       $_vValue)
        If BitAND($_constFlag, $_GROUPBORDER_TOPL)   Then GUICtrlSetBkColor($idTopL,       $_vValue)
        If BitAND($_constFlag, $_GROUPBORDER_TOPR)   Then GUICtrlSetBkColor($idTopR,       $_vValue)
        If BitAND($_constFlag, $_GROUPBORDER_RIGHT)  Then GUICtrlSetBkColor($idRight,      $_vValue)
        If BitAND($_constFlag, $_GROUPBORDER_BOTTOM) Then GUICtrlSetBkColor($idBottom,     $_vValue)
        If BitAND($_constFlag, $_GROUPBACKGROUND)    Then GUICtrlSetBkColor($idBackground, $_vValue)
        If BitAND($_constFlag, $_GROUPTEXT_FORE)     Then GUICtrlSetColor  ($idText,       $_vValue)
        If BitAND($_constFlag, $_GROUPTEXT_BACK)     Then GUICtrlSetBkColor($idText,       $_vValue)
        If BitAND($_constFlag, $_GROUPTEXT_TRANS)    Then GUICtrlSetBkColor($idText, $GUI_BKCOLOR_TRANSPARENT)
        If BitAND($_constFlag, $_GROUPTEXT_ITALIC)   Then GUICtrlSetFont   ($idText, Default, Default, 2)
        If BitAND($_constFlag, $_GROUPTEXT_DEFAULT)  Then GUICtrlSetFont   ($idText, Default, Default, Default)
        If BitAND($_constFlag, BitOR($_GROUPTEXT_LEFT,$_GROUPTEXT_CENTER,$_GROUPTEXT_RIGHT,$_GROUPTEXT_TEXT)) Then
            $aSize = ControlGetPos($hWndGui, '', $idLeft)
            $aBott = ControlGetPos($hWndGui, '', $idBottom)
            Local $x = $aSize[0], $y = $aSize[1]
            If $_vValue = '' Then
                If BitAND($_constFlag, BitOR($_GROUPTEXT_LEFT,$_GROUPTEXT_CENTER,$_GROUPTEXT_RIGHT)) Then
                    $aSize = ControlGetPos($hWndGui, '', $idText)
                Else
                    $aSize[2] = 0
                EndIf
            Else
                Local $guiTmp = GUICreate('')
                GUISwitch($guiTmp)
                Local $idTmp = GUICtrlCreateLabel('  ' & $_vValue, 0, 0)
                $aSize = ControlGetPos($guiTmp, '', $idTmp)
                GUICtrlDelete($idTmp)
                GUISwitch($hWndGui)
                GUIDelete($guiTmp)
            EndIf
            Local $dLeft = 10
            If $aSize[2] > $aBott[2] -12 Then $aSize[2] = $aBott[2] -12
            If $aSize[2] > 0 Then
                If BitAND($_constFlag, $_GROUPTEXT_CENTER) Then $dLeft = Int(($aBott[2]-$aSize[2])/2)
                If BitAND($_constFlag, $_GROUPTEXT_RIGHT)  Then $dLeft = $aBott[2]-10-$aSize[2]
            EndIf
            GUICtrlSetPos($idTopL, $x+1,                $y,   $dLeft-1,                     1)
            GUICtrlSetPos($idTopR, $x+$dLeft+$aSize[2], $y,   $aBott[2]+2-$aSize[2]-$dLeft, 1)
            GUICtrlSetPos($idText, $x+$dLeft,           $y-7, $aSize[2],                    17)
            If BitAND($_constFlag, $_GROUPTEXT_TEXT) Then
                If $_vValue <> '' Then $_vValue = '  ' & $_vValue
                GUICtrlSetData($idText, $_vValue)
            EndIf
        EndIf
        If BitAND($_constFlag, BitOR($_GROUP_MOVE_ABS,$_GROUP_MOVE_REL)) Then
            If Not IsArray($_vValue) Then $_vValue = StringSplit($_vValue, ',', 2)
            If UBound($_vValue) < 4 Then
                ReDim $_vValue[4]
                For $i = 1 To 3
                    If $_vValue[$i] = '' Then $_vValue[$i] = '*'
                Next
            EndIf
            Local $bRel = False
            If BitAND($_constFlag, $_GROUP_MOVE_REL) Then $bRel = True
            GUISetState(@SW_LOCK, $hWndGui)
            Local $aDelta = __SubCtrlMove($hWndGui, $_structGroup, $_vValue, $bRel, $iAlign)
            ; if an array with controls from inside the group is given - move them too
            If IsArray($_aCtrlInside) Then
                Local $aSize, $dX = $aDelta[0], $dY = $aDelta[1], $bhWnd, $opt = AutoitSetOption('GUICoordMode', 1)
                For $i = 0 To UBound($_aCtrlInside) -1
                    $bhWnd = False
                    If IsHWnd($_aCtrlInside[$i]) Then
                        $bhWnd = True
                        $aSize = WinGetPos($_aCtrlInside[$i])
                    Else
                        $aSize = ControlGetPos($hWndGui, '', $_aCtrlInside[$i])
                    EndIf
                    __ControlMove($hWndGui, $bhWnd, $_aCtrlInside[$i], $aSize, $dX, $dY)
                Next
                AutoitSetOption('GUICoordMode', $opt)
            EndIf
            GUISetState(@SW_UNLOCK, $hWndGui)
        EndIf
        DllCall("user32.dll", "bool", "RedrawWindow", "hwnd", $hWndGui, "struct*", 0, "handle", 0, "uint", 5)
    EndFunc  ;==>_GuiCtrlGroup_Set
    
    
    ; #FUNCTION# ====================================================================================================================
    ; Name ..........: _GuiCtrlGroup_SetState
    ; Description ...: Changes the state of a _GuiCtrlGroup_Create() created control.
    ; Syntax ........: _GuiCtrlGroup_SetState(ByRef $_structGroup, $_iState, $_aCtrlInside, $_iTxtColor, $_iBGColor)
    ; Parameters ....: $_structGroup        - Return value from _GuiCtrlGroup_Create()
    ;                  $_iState             - The new state ($GUI_SHOW, $GUI_HIDE, $GUI_ENABLE, $GUI_DISABLE)
    ;                                         If setting to DISABLE, you can set the title and background colors for this state.
    ;                                         The previous colors will returned. You can use them for ENABLE again.
    ;                                         If you use DISABLE without colors, the defaults will used (see constants on top).
    ;                  $_aCtrlInside        - When you pass an array of controls, they are set to the same state as the group itself.
    ;                  $_iTxtColor          - The title color if set to enable/disable
    ;                  $_iBGColor           - The background color if set to enable/disable
    ; Return values .: Success              - Structure with previous title and background color (if state was set to enable/disable)
    ;                                         $tCOLOR.TextPrev / $tCOLOR.BGPrev
    ;                  Failure              - returns -1, sets @error = 1
    ; Note ..........: Don't forget to catch the return, if sets the state to DISABLE. It's the easiest way to have the right colors to set back the ENABLE state.
    ; Author ........: BugFix
    ; ===============================================================================================================================
    Func _GuiCtrlGroup_SetState(ByRef $_structGroup, $_iState, $_aCtrlInside=Null, $_iTxtColor=Null, $_iBGColor=Null)
        If Not BitAND(BitOR($GUI_SHOW, $GUI_HIDE, $GUI_ENABLE, $GUI_DISABLE), $_iState) Then Return SetError(1,0,-1)
        Local Static $aState[4][2] = [[$GUI_SHOW, @SW_SHOW], [$GUI_HIDE, @SW_HIDE], [$GUI_ENABLE, @SW_ENABLE], [$GUI_DISABLE, @SW_DISABLE]]
        Local $hWndGui = _WinAPI_GetParent(GUICtrlGetHandle($_structGroup.Background))
        Local $tCOLOR = DllStructCreate('int BGPrev;int TextPrev;')
        If $_iState = $GUI_DISABLE Then
            If $_iTxtColor = Null Then $_iTxtColor = $_GROUP_DISABLE_TXTDEF
            If $_iBGColor = Null Then $_iBGColor = $_GROUP_DISABLE_BGDEF
        EndIf
        $tCOLOR.BGPrev = -1
        $tCOLOR.TextPrev = -1
        GuiCtrlSetState($_structGroup.Text, $_iState)
        GuiCtrlSetState($_structGroup.Left, $_iState)
        GuiCtrlSetState($_structGroup.TopL, $_iState)
        GuiCtrlSetState($_structGroup.TopR, $_iState)
        GuiCtrlSetState($_structGroup.Right, $_iState)
        GuiCtrlSetState($_structGroup.Bottom, $_iState)
        GuiCtrlSetState($_structGroup.Background, $_iState)
        If IsArray($_aCtrlInside) Then
            Local $iWinState
            For $i = 0 To UBound($aState) -1
                If $aState[$i][0] = $_iState Then
                    $iWinState = $aState[$i][1]
                    ExitLoop
                EndIf
            Next
            For $i = 0 To UBound($_aCtrlInside) -1
                If IsHWnd($_aCtrlInside[$i]) Then
                    WinSetState($_aCtrlInside[$i], '', $iWinState)
                Else
                    GuiCtrlSetState($_aCtrlInside[$i], $_iState)
                EndIf
            Next
        EndIf
        If $_iTxtColor <> Null Then
            If Not IsDeclared('WM_CTLCOLORSTATIC') Then Local Const $WM_CTLCOLORSTATIC = 0x0138
            Local $hWnd = GUICtrlGetHandle($_structGroup.Text)
            Local $hDC = _WinAPI_GetDC($hWnd)
            Local $hMemDC = _WinAPI_CreateCompatibleDC($hDC)
            _WinAPI_ReleaseDC($hWnd, $hDC)
            Local $hBrush = _SendMessage($hWndGui, $WM_CTLCOLORSTATIC, $hMemDC, $hWnd)
            Local $BGR = DllCall('gdi32.dll', 'int', 'GetTextColor', 'ptr', $hMemDC)
            _WinAPI_DeleteDC($hMemDC)
            $tCOLOR.TextPrev = BitOR(BitShift(BitAND($BGR[0], 0x0000FF), -16), BitAND($BGR[0], 0x00FF00), BitShift(BitAND($BGR[0], 0xFF0000), 16))
            GUICtrlSetColor($_structGroup.Text, $_iTxtColor)
        EndIf
        If $_iBGColor <> Null Then
            Local $hWnd = GUICtrlGetHandle($_structGroup.Background)
            Local $hDC = _WinAPI_GetDC($hWnd)
            $tCOLOR.BGPrev = _WinAPI_GetPixel($hDC, 0, 0)
            _WinAPI_ReleaseDC($hWnd, $hDC)
            GUICtrlSetBkColor($_structGroup.Background, $_iBGColor)
        EndIf
        DllCall("user32.dll", "bool", "RedrawWindow", "hwnd", $hWndGui, "struct*", 0, "handle", 0, "uint", 5)
        Return $tCOLOR
    EndFunc  ;==>_GuiCtrlGroup_SetState
    
    
    ; == for internal use
    Func __SubCtrlMove($_hGui, ByRef $_structGroup, $_aVal, $_bRel=False, $_iAlign=$_GROUPTEXT_LEFT)
        Local $idText       = $_structGroup.Text
        Local $idLeft       = $_structGroup.Left
        Local $idTopL       = $_structGroup.TopL
        Local $idTopR       = $_structGroup.TopR
        Local $idRight      = $_structGroup.Right
        Local $idBottom     = $_structGroup.Bottom
        Local $idBackground = $_structGroup.Background
        Local $dX, $dY, $dW, $dH
        Local $aSize = ControlGetPos($_hGui, '', $idLeft)
        Local $aBott = ControlGetPos($_hGui, '', $idBottom)
        If $_bRel Then
            $dX = $_aVal[0]
            $dY = $_aVal[1]
            $dW = $_aVal[2]
            $dH = $_aVal[3]
            If $dX = '*' Then $dX = 0
            If $dY = '*' Then $dY = 0
            If $dW = '*' Then $dW = 0
            If $dH = '*' Then $dH = 0
        Else
            Local $x       = $_aVal[0]
            Local $y       = $_aVal[1]
            Local $width   = $_aVal[2]
            Local $height  = $_aVal[3]
            Local $x0      = $aSize[0]
            Local $y0      = $aSize[1] -7
            Local $width0  = $aBott[2]
            Local $height0 = $aSize[3] +7
            If $x      = '*' Then $x      = $x0
            If $y      = '*' Then $y      = $y0
            If $width  = '*' Then $width  = $width0
            If $height = '*' Then $height = $height0
            $dX = $x - $x0
            $dY = $y - $y0
            $dW = $width - $width0
            $dH = $height - $height0
        EndIf
        GUICtrlSetPos($idLeft, $aSize[0]+($dX), $aSize[1]+($dY), 1, $aSize[3]+($dH))
        GUICtrlSetPos($idBottom, $aBott[0]+($dX), $aBott[1]+($dY)+($dH), $aBott[2]+($dW))
    
        $aSize = ControlGetPos($_hGui, '', $idTopL)
        GUICtrlSetPos($idTopL, $aSize[0]+($dX), $aSize[1]+($dY))
    
        $aSize = ControlGetPos($_hGui, '', $idTopR)
        GUICtrlSetPos($idTopR, $aSize[0]+($dX), $aSize[1]+($dY), $aSize[2]+($dW))
    
        $aSize = ControlGetPos($_hGui, '', $idRight)
        GUICtrlSetPos($idRight, $aSize[0]+($dX)+($dW), $aSize[1]+($dY), 1, $aSize[3]+($dH))
    
        $aSize = ControlGetPos($_hGui, '', $idBackground)
        GUICtrlSetPos($idBackground, $aSize[0]+($dX), $aSize[1]+($dY), $aSize[2]+($dW), $aSize[3]+($dH))
    
        $aSize = ControlGetPos($_hGui, '', $idText)
        If ($dX <> 0) Or ($dY <> 0) Then GUICtrlSetPos($idText, $aSize[0]+($dX), $aSize[1]+($dY))
    
        If $dW <> 0 Then _GuiCtrlGroup_Set($_structGroup, '', $_structGroup.Align)
    
        Local $aDelta[] = [$dX,$dY]
        Return $aDelta
    EndFunc  ;==>__SubCtrlMove
    
    
    Func __ControlMove($_hWnd, $_bhWnd, $_vCtrl, $_aSize, $_dX, $_dY)
        Local $aParent
        If Not $_bhWnd Then
            GUICtrlSetPos($_vCtrl, $_aSize[0]+($_dX), $_aSize[1]+($_dY))
        Else
            $aParent = WinGetPos($_hWnd)
            WinMove($_vCtrl, '', $_aSize[0]-$aParent[0]-$_giSide+($_dX), $_aSize[1]-$aParent[1]-$_giTop+($_dY))
        EndIf
    EndFunc  ;==>__ControlMove
    
    
    ;===============================================================================
    ; Function Name....: __SystemGetWindowBorder
    ; Description......: Calculates side and top border of window
    ; Author(s)........: BugFix
    ;===============================================================================
    Func __SystemGetWindowBorder(ByRef $_iTopBorder, ByRef $_iSideBorder)
        Local Const $SM_CYCAPTION = 4, $SM_CYEDGE = 46, $SM_CYBORDER = 6, $SM_CXBORDER = 5, $SM_CXEDGE = 45
        Local $aMetrics[5][2] = [[$SM_CYCAPTION], [$SM_CYEDGE], [$SM_CYBORDER], [$SM_CXBORDER], [$SM_CXEDGE]]
        Local $dll = DllOpen("user32.dll"), $aRet
        For $i = 0 To 4
            $aRet = DllCall($dll, "int", "GetSystemMetrics", "int", $aMetrics[$i][0])
            If IsArray($aRet) Then $aMetrics[$i][1] = $aRet[0]
        Next
        DllClose($dll)
        $_iTopBorder  = $aMetrics[0][1] + $aMetrics[1][1] + $aMetrics[2][1]
        $_iSideBorder = $aMetrics[3][1] + $aMetrics[4][1]
    EndFunc  ;==>__SystemGetWindowBorder
    Alles anzeigen
    Bsp.
    AutoIt
    #include <GroupEx.au3>
    #include <GuiComboBox.au3>
    
    
    Global $iGUIColor = 0xFFF9E5
    Global $iBGColor = 0xE0F9FF, $iBorderColor = 0x00008B, $iTextColor = 0xC60707
    
    Enum $lbName, $inName, $lbStatus, $inStatus, $lbOrt, $inOrt, $cbNormal, $lbNormal, $combo, $radio1, $radio2, $iCount
    Global $aID[$iCount]
    Global $radio3, $radio4
    
    Global $hGui = GUICreate('Example GroupEx', 900, 700)
    GUISetBkColor($iGUIColor)
    
    ; Group erstellen mit Title-Style Italic, Standardausrichtung links
    Global $tGroup1 = _GuiCtrlGroup_Create($hGui, 'Device Information', 10, 55, 880, 155, $iBorderColor, $iTextColor, $iBGColor, $_GROUPTEXT_ITALIC)
    
    $aID[$lbName] = GUICtrlCreateLabel('Title', 25, 83, 70)
    _BKTrans(-1)
    $aID[$inName] = GUICtrlCreateInput('', 100, 80, 200, 21)
    
    $aID[$lbStatus] = GUICtrlCreateLabel('State', 310, 83, 40)
    _BKTrans(-1)
    $aID[$inStatus] = GUICtrlCreateInput('', 355, 80, 115, 21)
    
    $aID[$lbOrt] = GUICtrlCreateLabel('Location', 485, 83, 50)
    _BKTrans(-1)
    $aID[$inOrt] = GUICtrlCreateInput('', 535, 80, 100, 21)
    
    $aID[$cbNormal] = GUICtrlCreateCheckbox(' ', 655, 83, 13, 13)
    $aID[$lbNormal] = GUICtrlCreateLabel('  Current Sample', 670, 83)
    _BKTrans(-1)
    
    $aID[$combo] = _GUICtrlComboBox_Create($hGui, '', 100, 110, 200, 30)
    
    $aID[$radio1] = GUICtrlCreateRadio(' ', 320, 113, 13, 13)
    GUICtrlSetState(-1, $GUI_CHECKED)
    
    $aID[$radio2] = GUICtrlCreateRadio(' ', 340, 113, 13, 13)
    _GuiCtrlGroup_Close()
    
    $radio3 = GUICtrlCreateRadio(' ', 100, 350, 13, 13)
    GUICtrlSetState(-1, $GUI_CHECKED)
    $radio4 = GUICtrlCreateRadio(' ', 120, 350, 13, 13)
    
    GUISetState()
    
    
    _Msg('Move group downward by 100px with all internal controls ($aID)')
    _GuiCtrlGroup_Set($tGroup1, '*,100', $_GROUP_MOVE_REL, $aID)
    
    _Msg('Group title - set default style')
    _GuiCtrlGroup_Set($tGroup1, '', $_GROUPTEXT_DEFAULT)
    
    _Msg('Group title - set background color - feasible, but not so nice')
    _GuiCtrlGroup_Set($tGroup1, 0xAAAAFF, $_GROUPTEXT_BACK)
    
    _Msg('Group title - set background again transparency')
    _GuiCtrlGroup_Set($tGroup1, '', $_GROUPTEXT_TRANS)
    
    _Msg('Group title - set text color')
    _GuiCtrlGroup_Set($tGroup1, 0x000080, $_GROUPTEXT_FORE)
    
    _Msg('Group border - top and right - change color')
    _GuiCtrlGroup_Set($tGroup1, 0xFF1234, BitOR($_GROUPBORDER_TOP,$_GROUPBORDER_RIGHT))
    
    _Msg('Group title - centered')
    _GuiCtrlGroup_Set($tGroup1, '', $_GROUPTEXT_CENTER)
    
    _Msg('Group title - right')
    _GuiCtrlGroup_Set($tGroup1, '', $_GROUPTEXT_RIGHT)
    
    _Msg('Group area - change color')
    _GuiCtrlGroup_Set($tGroup1, 0xAAFFAA, $_GROUPBACKGROUND)
    
    _Msg('Group DISABLE (with all controls inside), border color and title BGColor stay unchanged')
    ; _GuiCtrlGroup_SetState(ByRef $_structGroup, $_iState, $_aCtrlInside= Null, $_iTxtColor=Null, $_iBGColor=Null)
    ; Here, the current color of title text and group area is queried before the disable color is set.
    ; The values read out are returned as struct and can then be used again in ENABLE.
    Global $tColor = _GuiCtrlGroup_SetState($tGroup1, $GUI_DISABLE, $aID)
    
    _Msg('Group ENABLE (with all controls inside)')
    _GuiCtrlGroup_SetState($tGroup1, $GUI_ENABLE, $aID, $tColor.TextPrev, $tColor.BGPrev)
    
    _Msg('Group HIDE (with all controls inside)')
    _GuiCtrlGroup_SetState($tGroup1, $GUI_HIDE, $aID)
    
    _Msg('Group SHOW (with all controls inside)')
    _GuiCtrlGroup_SetState($tGroup1, $GUI_SHOW, $aID)
    
    
    
    Do
    Until GUIGetMsg() = -3
    
    
    
    Func _BKTrans($_iID)
        GUICtrlSetBkColor($_iID, $GUI_BKCOLOR_TRANSPARENT)
    EndFunc
    
    Func _Msg($_sMsg)
        MsgBox(262208, 'Action', $_sMsg, 5)
    EndFunc
    Alles anzeigen
  • GroupEx.au3 -- User Group Control, vielseitig modifizierbar

    • BugFix
    • 2. Juni 2018 um 08:44
    Zitat von Bitnugger

    Kannst du die Controls, die innerhalb der Group sein sollen, nicht besser gleich in _GuiCtrlGroup_Create integrieren... denn dann hätte der User nichts mehr damit zu schaffen?

    Meinst du, dass das Array mit den Control-ID beim Erstellen der Group übergeben werden soll?

    Das ist m.W. nicht möglich (lass mich aber gern eines Besseren belehren). Um die Group-Funktionalität zu erhalten muss als Erstes GUIStartGroup() ausgeführt werden (letzter Befehl bei _GuiCtrlGroup_Create) und die anschließend erstellten Control sind dann dieser Group zugehörig.

    Trotzdem Danke für den Hinweis - dadurch ist mir erst bewusst geworden, dass ich noch eine Möglichkeit zum Schließen der Group einfügen muss.

    Falls du aber eine Möglichkeit kennst, nachträglich Control in eine Group einzufügen, ich bin ganz Ohr.

    Zitat von Bitnugger

    Kannst du anstelle ControlMove nicht GUICtrlSetPos verwenden, wenn eine CtrlID übergeben wurde?
    Warum? Weil die geänderte Größe/Position durch ControlMove nur temporär ist und verloren geht, wenn das Fenster minimiert und danach wiederhergestellt wird, mit GUICtrlSetPos aber nicht.

    Danke, wichtiger Hinweis - ist mir bisher nicht klar gewesen. Wird geändert.

    Zitat von Bitnugger

    Mit ComboBox/ComboBoxEx funktioniert es wohl nicht?!

    Sorry, hatte ich nicht eindeutig beschrieben, für mich war klar, dass Control-ID ($aID) keine Handle sein können. Somit ist es im Moment nur mit nativen Control möglich. Werde ich noch auf die To-Do-List setzen.

    Zitat von Bitnugger

    Wäre schön, wenn du für _GuiCtrlGroup_Set noch ein Beispiel für $_aCtrlInside hinzufügen würdest.

    Hmm, es gibt nur zwei Befehle, bei denen ein $aID übergeben wird.

    Einmal bei Verschieben: _GuiCtrlGroup_Set($tGroup1, '*,100', $_GROUP_MOVE_REL, $aID)

    und dann noch bei Setzen eines Status: _GuiCtrlGroup_SetState($tGroup1, $GUI_HIDE, $aID)


  • merkwürdiges Verhalten bei DirMove

    • BugFix
    • 1. Juni 2018 um 19:59
    Zitat von Peter S. Taler

    Kann man den Machern nicht mal nahelegen sowas zu ändern....

    Kannst du vergessen. Ich habe den Eindruck, dass Bug-Tickets von vornherein als Akt der Beleidigung aufgefasst werden. Somit versteht sich von selbst, dass nicht ernsthaft ins Auge gefasst wird, etwas zu ändern.

    Ist ja auch frech, dass User sich erdreisten Eure Hoheiten mit so etwas Profanem, wie Bugs zu belästigen. :whistling:

  • GroupEx.au3 -- User Group Control, vielseitig modifizierbar

    • BugFix
    • 1. Juni 2018 um 11:50

    Aktuelle Version v0.8

    Details s. Startpost

  • Frage zu WinSetOnTop

    • BugFix
    • 25. Mai 2018 um 11:25

    Ist zwar auch nur ein Gegurke, was mit direktem Management der SQL-DB zu umgehen wäre - aber sei's drum:

    - In einer Schleife kontinuierlich Z-Order abfragen (oder besser als Adlib Funktion getimed aufrufen)

    - Ist oberstes Fenster dein Fenster? - Tue nix, alles OK

    - Wenn nicht: Existiert dein Fenstername in der Z-Order-Liste? Ja- setze OnTop, Nein- tue nix

  • Steuerung zurück zu GUI

    • BugFix
    • 18. Mai 2018 um 10:10
    Zitat von Zec

    GUICtrlRead($Radio1) = $GUI_CHECKED

    Auch wenn der Fall eher selten eintreten wird, aber das Ergebnis von GuiCtrlRead($Radio) ist nicht zwingend nur ein Wert, sondern kann eine Kombination von Werten sein.

    Deshalb auf Nummer sicher gehen und sich angewöhnen: If BitAND(GUICtrlRead($Radio), $GUI_CHECKED) Then

  • " in der Command Lline benutzbar ?

    • BugFix
    • 16. Mai 2018 um 10:41
    Zitat von Springstil

    Das mit den StringFormat finde ich sehr Kompliziert ehrlich gesagt :o mein Problem was ich jetzt habe ist die Variable mit einzubinden.

    Wenn du Strings auf ganz bestimmte Längen bringen möchtest, Vornullen beachten musst - dann wird es (aber auch nur minimal) kompliziert.

    Für das Zusammenstellen von z.B. CMD-Line Befehlsketten brauchst du für jede Variable einfach nur %s im FormatString verwenden.

    Aus einem nicht zwingend übersichtlichem $CMD1 = "C:\Winscp\winscp.com /Command ""open sftp://XXX:XXX@XXX/"" ""put C:\" & $DateiName & " /test/"""

    wird dann:

    $DateiName = 'C:\test.txt'

    $CMD1 = StringFormat('C:\Winscp\winscp.com /Command "open sftp://XXX:XXX@XXX/" "put %s /test/"', $DateiName)

    Der klare Vorteil dieser Variante: Man schreibt genau so, wie in der Kommandozeile auch.

    Bei mehreren Variablen, werden diese einfach in der Reihenfolge ihres Auftretens im FormatString aufgeführt.

  • Position der Einfügemarke

    • BugFix
    • 27. April 2018 um 10:23

    _WinApi_GetCaretPos scheint falsch implementiert zu sein, liefert immer einen Fehler.

    Zur Positionsbestimmung des Cursors aber auch völlig unnötig:

    AutoIt
    ShellExecute('notepad')
    Local $hWndNotepad = WinWait('[CLASS:Notepad]', '', 5)
    Local $aCaret = WinGetCaretPos()
    Local $xCaret = $aCaret[0]
    Local $yCaret = $aCaret[1]
    
    ; zum Vergleich Maus auf Cursorpos bewegen
    MouseMove($xCaret, $yCaret, 30)

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™