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

  • "DrawButton" - Rect als Button

    • BugFix
    • 1. Juli 2010 um 11:33

    Neue Version siehe Post #1.

  • Flag: Null ist nicht Null - und wie frage ich Null ab?

    • BugFix
    • 1. Juli 2010 um 10:38

    Alles klar, das war der springende Punkt:
    Die horizontalen / vertikalen Flags in getrennten Gruppen abfragen.

    Danke.

  • Flag: Null ist nicht Null - und wie frage ich Null ab?

    • BugFix
    • 1. Juli 2010 um 09:31

    Bei der Überschrift kann keiner widerstehen - alle gucken rein. :D

    Problem:
    Ich schreibe Text mit _WinAPI_DrawText() und kann per Flag die Textausrichtung setzen. Wie üblich können die Werte mit BitOR() kombiniert werden.
    Hier die möglichen Werte:

    Code
    $DT_BOTTOM = 0x8
    $DT_CENTER = 0x1
    $DT_LEFT = 0x0   <== wie abfragen?
    $DT_RIGHT = 0x2
    $DT_TOP = 0x0    <== wie abfragen?
    $DT_VCENTER = 0x4

    Sowohl LEFT, als auch TOP haben den Wert "0". Erstaunlicherweise ergibt die Kombination aus LEFT und TOP zwar weiterhin nur 1-mal "0" aber der Text wird richtig positioniert.
    In einer Funktion versuche ich die Ausrichtung auszulesen. Nur: Wie soll man mit BitAND() "0" abfragen - und: Welches "0" wäre das dann - LEFT oder TOP?

    Hier mal das Skript, vllt. hat jemand eine zündende Idee.

    Spoiler anzeigen
    [autoit]

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

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

    Global $Gui, $Button, $tRECT, $hBrush = _WinAPI_CreateSolidBrush(0x000000)
    Global $hFont, $hOldFont, $hDC, $sText = "VCenter+HCenter", $iAlignment = BitOR($DT_CENTER,$DT_VCENTER)

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

    $tRECT = DllStructCreate($tagRect)
    DllStructSetData($tRECT, "Left", 100)
    DllStructSetData($tRECT, "Top", 80)
    DllStructSetData($tRECT, "Right", 250)
    DllStructSetData($tRECT, "Bottom", 130)

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

    $Gui = GUICreate('Test')
    $Button = GUICtrlCreateButton('Weiter', 125, 160, 80, 20)

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

    $hDC = _WinAPI_GetDC($Gui)
    $hFont = _WinAPI_CreateFont(20, 0, 0, 0, 400, False, False, False, $DEFAULT_CHARSET, _
    $OUT_DEFAULT_PRECIS, $CLIP_DEFAULT_PRECIS, $DEFAULT_QUALITY, 0, 'Arial')
    $hOldFont = _WinAPI_SelectObject($hDC, $hFont)

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

    _WinAPI_SetTextColor($hDC, 0x0000FF)
    _WinAPI_SetBkColor($hDC, 0x000000)
    _WinAPI_SetBkMode($hDC, $TRANSPARENT)

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

    GUISetState()

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

    _WinAPI_DrawText($hDC, $sText, $tRECT, BitOR($DT_NOCLIP,$DT_SINGLELINE,$iAlignment))
    _WinAPI_FrameRect($hDC, DllStructGetPtr($tRECT), $hBrush)

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

    $counter = 0
    While 1
    Switch GUIGetMsg()
    Case -3
    _Exit()
    Case $Button
    $counter += 1
    If $counter = 9 Then $counter = 0
    Switch $counter
    Case 0
    $sText = 'VCenter+HCenter'
    _AlignmentSet(-1)
    ConsoleWrite('Ausrichtung: ' & $iAlignment & ': ' & _AlignmentGetAsStr($iAlignment) & @CRLF)
    Case 1
    $sText = 'Top+Left'
    _AlignmentSet(BitOR($DT_TOP,$DT_LEFT))
    ConsoleWrite('Ausrichtung: ' & $iAlignment & ': ' & _AlignmentGetAsStr($iAlignment) & @CRLF)
    Case 2
    $sText = 'Top+HCenter'
    _AlignmentSet(BitOR($DT_TOP,$DT_CENTER))
    ConsoleWrite('Ausrichtung: ' & $iAlignment & ': ' & _AlignmentGetAsStr($iAlignment) & @CRLF)
    Case 3
    $sText = 'Top+Right'
    _AlignmentSet(BitOR($DT_TOP,$DT_RIGHT))
    ConsoleWrite('Ausrichtung: ' & $iAlignment & ': ' & _AlignmentGetAsStr($iAlignment) & @CRLF)
    Case 4
    $sText = 'Left+VCenter'
    _AlignmentSet(BitOR($DT_LEFT,$DT_VCENTER))
    ConsoleWrite('Ausrichtung: ' & $iAlignment & ': ' & _AlignmentGetAsStr($iAlignment) & @CRLF)
    Case 5
    $sText = 'Right+VCenter'
    _AlignmentSet(BitOR($DT_RIGHT,$DT_VCENTER))
    ConsoleWrite('Ausrichtung: ' & $iAlignment & ': ' & _AlignmentGetAsStr($iAlignment) & @CRLF)
    Case 6
    $sText = 'Bottom+Left'
    _AlignmentSet(BitOR($DT_BOTTOM,$DT_LEFT))
    ConsoleWrite('Ausrichtung: ' & $iAlignment & ': ' & _AlignmentGetAsStr($iAlignment) & @CRLF)
    Case 7
    $sText = 'Bottom+HCenter'
    _AlignmentSet(BitOR($DT_BOTTOM,$DT_CENTER))
    ConsoleWrite('Ausrichtung: ' & $iAlignment & ': ' & _AlignmentGetAsStr($iAlignment) & @CRLF)
    Case 8
    $sText = 'Bottom+Right'
    _AlignmentSet(BitOR($DT_BOTTOM,$DT_RIGHT))
    ConsoleWrite('Ausrichtung: ' & $iAlignment & ': ' & _AlignmentGetAsStr($iAlignment) & @CRLF)
    EndSwitch
    EndSwitch
    WEnd

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

    Func _Exit()
    _WinAPI_SelectObject($hDC, $hOldFont)
    _WinAPI_DeleteObject($hFont)
    _WinAPI_ReleaseDC(0, $hDC)
    _WinAPI_InvalidateRect(0, 0)
    $tRECT = 0
    Exit
    EndFunc ;==>_Exit

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

    ;==================================================================================================
    ; mgl. Werte: $DT_BOTTOM, $DT_CENTER, $DT_LEFT, $DT_RIGHT, $DT_TOP, $DT_VCENTER
    ; -1/Default = BitOR($DT_CENTER,$DT_VCENTER)
    ;==================================================================================================
    Func _AlignmentSet($Alignment=-1)
    If IsKeyword($Alignment) Or $Alignment < 0 Then $Alignment = BitOR($DT_CENTER,$DT_VCENTER)
    $iAlignment = $Alignment
    _WinAPI_RedrawWindow($Gui, $tRECT)
    _WinAPI_DrawText($hDC, $sText, $tRECT, BitOR($DT_NOCLIP,$DT_SINGLELINE,$iAlignment))
    _WinAPI_FrameRect($hDC, DllStructGetPtr($tRECT), $hBrush)
    EndFunc

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

    Func _AlignmentGetAsStr($iAlignment)
    Local $sAlignment = ''
    If BitAND($iAlignment, $DT_BOTTOM) Then $sAlignment &= '$DT_BOTTOM '
    If BitAND($iAlignment, $DT_CENTER) Then $sAlignment &= '$DT_CENTER '
    If BitAND($iAlignment, $DT_LEFT) Then $sAlignment &= '$DT_LEFT '
    If BitAND($iAlignment, $DT_RIGHT) Then $sAlignment &= '$DT_RIGHT '
    If BitAND($iAlignment, $DT_TOP) Then $sAlignment &= '$DT_TOP '
    If BitAND($iAlignment, $DT_VCENTER) Then $sAlignment &= '$DT_VCENTER '
    Return StringTrimRight($sAlignment, 1)
    EndFunc

    [/autoit]
  • Problem mit _GUICtrlListView_DeleteAllItems

    • BugFix
    • 1. Juli 2010 um 09:23
    Zitat von m-obi

    Aber Wieso?


    Dass einige Funktionen auch mit der ID funktionieren solltest du einfach ignorieren und dir angewöhnen für die UDF immer das Handle zu nehmen. Bei vielen Funktionen ist das Handle zwingend erforderlich und somit sinnvoll dieses immer zu verwenden, da es mit allen Funktionen funktioniert.

  • .exe geht nicht why??????

    • BugFix
    • 30. Juni 2010 um 19:23

    Vermutlich hast du nicht die SciTE-Vollversion. Lade und installiere die Version: http://www.autoitscript.com/cgi-bin/getfil…iTE4AutoIt3.exe

    Dann findest du auch die angesprochenen Einstellfenster.

  • "DrawButton" - Rect als Button

    • BugFix
    • 30. Juni 2010 um 19:00
    Zitat von yxyx

    also das ich jetz sagma mal n bild mit nem stopzeichen drauf hab
    und dan das bild in den button zeichne
    geht das?

    Eine Bitte: Groß-/Kleinschreibung beachten. Es ist echt anstrengend solchen Text zu lesen. :S

    Wenn du ein Bild auf dem Button möchtest kannst du doch einen Button mit $BS_ICON oder $BS_BITMAP -Style erstellen.
    Diese Funktion hier dient dazu z.B. auf einem Bild einen Button zu erstellen, der voll-transparent ist.

  • "DrawButton" - Rect als Button

    • BugFix
    • 30. Juni 2010 um 18:17
    Zitat von yxyx

    geht das auch mit bild?


    Ähm.. Das Beispiel ist doch mit Verwendung eines Bildes. Oder was meinst du?

  • "DrawButton" - Rect als Button

    • BugFix
    • 30. Juni 2010 um 18:02

    Sicher schon öfter in dieser oder anderer Form genutzt habe ich es mal in eine UDF gepackt.
    Einen "Pseudo-Button" den man auf jede Oberfläche transparent aufzeichnet (nur Rahmen und Schrift). Ganz praktisch um auf einem Picture-Hintergrund eine dezente Schaltfläche unterzubringen.
    Falls die Bemerkung kommt: "...das könnte man doch auch mit GDI+ machen..."
    Klar könnte man das, aber mit WinAPI läßt es sich leichter realisieren . ;)

    Funktionen
    [autoit]

    #include-once
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <WinAPI.au3>
    #include <FontConstants.au3>

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

    #region - "Button"-Funktionen
    ;==================================================================================================
    ; Funktion: _DrawButton_Create($hGui, $text, $left ,$top ,$width ,$height)
    ; Beschreibung: Zeichnet einen "Pseudo-Button"
    ; Rückgabewert: Array-Variable mit Control-Daten
    ; Erfordernisse: #include <FontConstants.au3>, <Winapi.au3>
    ;==================================================================================================
    Func _DrawButton_Create($hGui, $text, $left ,$top ,$width ,$height=20)
    Enum $tRECT, $hDC, $hBrush, $hFont, $btnText, $hWnd, $size, $weight, $attrib, $font, $colT, $colB, $alignment
    Local $aBtn[13], $L = $left, $T = $top, $R = $L + $width, $B = $T + $height
    $aBtn[$btnText] = $text
    $aBtn[$hWnd] = $hGUI
    $aBtn[$tRECT] = DllStructCreate('int;int;int;int;')
    $aBtn[$size] = 14
    $aBtn[$weight] = 400
    $aBtn[$attrib] = 0
    $aBtn[$font] = "Arial"
    $aBtn[$colT] = 0x000000
    $aBtn[$colB] = 0x000000
    $aBtn[$alignment] = BitOR($DT_CENTER,$DT_VCENTER)
    DllCall("user32", 'long', 'SetRect', 'ptr', DllStructGetPtr($aBtn[$tRECT]), 'long', $L, 'long', $T, 'long', $R, 'long', $B)
    $aBtn[$hDC] = _WinAPI_GetDC($hGui)
    $aBtn[$hBrush] = _WinAPI_CreateSolidBrush(0x000000)
    $aBtn[$hFont] = _WinAPI_CreateFont(14, 0, 0, 0, 400, False, False, False, $DEFAULT_CHARSET, _
    $OUT_DEFAULT_PRECIS, $CLIP_DEFAULT_PRECIS, $DEFAULT_QUALITY, 0, "Arial")
    _WinAPI_SetTextColor($aBtn[$hDC], 0x000000)
    _WinAPI_SetBkColor($aBtn[$hDC], 0xFFFFFF)
    _WinAPI_SelectObject($aBtn[$hDC], $hFont)
    _WinAPI_SetBkMode($aBtn[$hDC], $TRANSPARENT)
    _DrawButton_AlignmentSet($aBtn)
    Return $aBtn
    EndFunc ;==>_DrawButton_Create

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

    ;==================================================================================================
    ; Funktion: _DrawButton_SetStyle($aButton, $size, $weight, $attribute, $fontname, $colText, $colBorder)
    ; Beschreibung: Setzt Textattribute und Farben des Button
    ; Bemerkung: Für alle Parameter gilt:
    ; Zum Setzen der Standardwerte "Default" übergeben
    ; Um einen/mehrere Parameter NICHT zu verändern "-1" übergeben
    ;==================================================================================================
    Func _DrawButton_SetStyle(ByRef $aButton, $size=14, $weight=400, $attribute=0, $fontname="Arial", $colText=0x000000, $colBorder=0x000000)
    Local $aAttrib[3] = [False,False,False] ; italic:2 underlined:4 strike:8
    ; === mit "Default" alles auf Standard zurücksetzen
    If IsKeyword($size) Then
    $attribute = 14
    EndIf
    If IsKeyword($weight) Then
    $attribute = 400
    EndIf
    If IsKeyword($attribute) Then
    $attribute = 0
    EndIf
    If IsKeyword($fontname) Then
    $fontname = "Arial"
    EndIf
    If IsKeyword($colText) Then
    $colText = 0x000000
    EndIf
    If IsKeyword($colBorder) Then
    $colBorder = 0x000000
    EndIf
    ; === bei "-1" keine Änderung
    If $size > -1 Then $aButton[6] = $size
    If $weight > -1 Then $aButton[7] = $weight
    If $attribute > -1 Then
    For $i = 1 To 3
    If BitAND($attribute, 2^$i) Then
    $aAttrib[$i-1] = True
    Else
    $aAttrib[$i-1] = False
    EndIf
    Next
    $aButton[8] = $attribute
    EndIf
    If $fontname > -1 Then $aButton[9] = $fontname
    If $colText > -1 Then $aButton[10] = $colText
    If $colBorder > -1 Then
    _WinAPI_DeleteObject($aButton[2])
    $aButton[2] = _WinAPI_CreateSolidBrush(__RGB2BGR($colBorder))
    $aButton[11] = $colBorder
    EndIf
    $aButton[3] = _WinAPI_CreateFont($aButton[6], 0, 0, 0, $aButton[7], $aAttrib[0], $aAttrib[1], $aAttrib[2], $DEFAULT_CHARSET, _
    $OUT_DEFAULT_PRECIS, $CLIP_DEFAULT_PRECIS, $DEFAULT_QUALITY, 0, $aButton[9])
    _WinAPI_SetTextColor($aButton[1], __RGB2BGR($aButton[10]))
    _WinAPI_SelectObject($aButton[1], $aButton[3])
    _WinAPI_SetBkMode($aButton[1], $TRANSPARENT)
    _WinAPI_RedrawWindow($aButton[5], $aButton[0])
    _DrawButton_Draw($aButton)
    EndFunc ;==>_DrawButton_SetStyle

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

    ;==================================================================================================
    ; Funktion: _DrawButton_SetText($aButton, $sText)
    ; Beschreibung: Setzt den Text des Button neu
    ;==================================================================================================
    Func _DrawButton_SetText(ByRef $aButton, $sText)
    $aButton[4] = $sText
    _WinAPI_RedrawWindow($aButton[5], $aButton[0])
    _DrawButton_Draw($aButton)
    EndFunc ;==>_DrawButton_SetText

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

    ;==================================================================================================
    ; Funktion: _DrawButton_AlignmentSet(ByRef $aButton, $Alignment)
    ; Beschreibung: Setzt die Textausrichtung, Kombinationen mit BitOR()
    ; mgl. Werte: $DT_BOTTOM, $DT_CENTER, $DT_LEFT, $DT_RIGHT, $DT_TOP, $DT_VCENTER
    ; -1/Default = BitOR($DT_CENTER,$DT_VCENTER)
    ;==================================================================================================
    Func _DrawButton_AlignmentSet(ByRef $aButton, $Alignment=-1)
    If IsKeyword($Alignment) Or $Alignment < 0 Then $Alignment = BitOR($DT_CENTER,$DT_VCENTER)
    $aButton[12] = $Alignment
    _WinAPI_RedrawWindow($aButton[5], $aButton[0])
    _DrawButton_Draw($aButton)
    EndFunc ;==>_DrawButton_AlignmentSet

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

    ;==================================================================================================
    ; Funktion: _DrawButton_AlignmentGet($aButton, $bRetAsStr)
    ; Beschreibung: Gibt die Textausrichtung zurück, False(Standard) = numerisch, True = als String
    ; Idee: [user='200143']progandy[/user]
    ;==================================================================================================
    Func _DrawButton_AlignmentGet($aButton, $bRetAsStr=False)
    Local $sAlignment = ''
    Select
    Case BitAND($aButton[12], $DT_BOTTOM) = $DT_BOTTOM
    $sAlignment &= '$DT_BOTTOM '
    Case BitAND($aButton[12], $DT_VCENTER) = $DT_VCENTER
    $sAlignment &= '$DT_VCENTER '
    Case Else
    $sAlignment &= '$DT_TOP '
    EndSelect
    Select
    Case BitAND($aButton[12], $DT_CENTER) = $DT_CENTER
    $sAlignment &= '$DT_CENTER '
    Case BitAND($aButton[12], $DT_RIGHT) = $DT_RIGHT
    $sAlignment &= '$DT_RIGHT '
    Case Else
    $sAlignment &= '$DT_LEFT '
    EndSelect
    If $bRetAsStr Then Return StringTrimRight($sAlignment, 1)
    Return $aButton[12]
    EndFunc ;==>_DrawButton_AlignmentGet

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

    ;==================================================================================================
    ; Funktion: _DrawButton_Draw($aButton)
    ; Beschreibung: Zeichnet den Button
    ; Bemerkung: Um den Button sichtbar zu machen muß die Funktion aufgerufen werden:
    ; - erstmalig nach GUISetState()
    ; - nach jeder Fensterbewegung (GUIRegisterMsg($WM_MOVE) erforderlich)
    ; - nach den Events: $GUI_EVENT_RESTORE, $GUI_EVENT_MAXIMIZE
    ;==================================================================================================
    Func _DrawButton_Draw($aButton)
    _WinAPI_FrameRect($aButton[1], DllStructGetPtr($aButton[0]), $aButton[2])
    _WinAPI_DrawText($aButton[1], $aButton[4], $aButton[0], BitOR($DT_NOCLIP,$DT_SINGLELINE,$aButton[12]))
    EndFunc ;==>_DrawButton_Draw

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

    ;==================================================================================================
    ; Funktion: _DrawButton_Release($aButton)
    ; Beschreibung: Ressourcen freigeben am Programmende
    ;==================================================================================================
    Func _DrawButton_Release($aButton)
    _WinAPI_DeleteObject($aButton[2])
    _WinAPI_ReleaseDC($aButton[5], $aButton[1])
    _WinAPI_DeleteObject($aButton[3])
    _WinAPI_ReleaseDC(0, $aButton[1])
    _WinAPI_InvalidateRect(0, 0)
    EndFunc ;==>_DrawButton_Release

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

    ;==================================================================================================
    ; Funktion: _DrawButton_Clicked($aButton)
    ; Beschreibung: Überprüft ob Mausklick auf den Button erfolgte
    ; Rückgabewert: True - Klick auf Buttonfläche
    ; False - Klick außerhalb
    ; Bemerkung: Die Funktion muß einem Maus-Ereignis zugeordnet werden (z.B. $GUI_EVENT_PRIMARYDOWN)
    ;==================================================================================================
    Func _DrawButton_Clicked($aButton)
    Local $iBar = _WinAPI_GetSystemMetrics(4)
    Local $iBorderH = _WinAPI_GetSystemMetrics(6)
    Local $iBorderB = _WinAPI_GetSystemMetrics(32)
    Local $old = Opt('MouseCoordMode', 0)
    Local $mPos = MouseGetPos()
    Opt('MouseCoordMode', $old)
    $mPos[0] -= $iBorderB/2
    $mPos[1] -= $iBar + 2*$iBorderH
    Local $ret = DllCall("user32.dll", "bool", "PtInRect", "ptr", DllStructGetPtr($aButton[0]), "long", $mPos[0], "long", $mPos[1])
    If $ret[0] > 0 Then Return True
    Return False
    EndFunc ;==>_DrawButton_Clicked
    #endregion

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

    Func __RGB2BGR($iColor)
    Local $sH = Hex($iColor,6)
    Return '0x' & StringRight($sH, 2) & StringMid($sH,3,2) & StringLeft($sH, 2)
    EndFunc ;==>__RGB2BGR

    [/autoit]
    Beispiel
    [autoit]

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

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

    Local $iBorderH = _WinAPI_GetSystemMetrics(6)
    Local $imgW = 248, $imgH = 281
    Local $mPos, $old
    Local $guiMain, $btn

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

    $guiMain = GUICreate('Test', $imgW, $imgH, -1, -1)
    If @OSVersion = "WIN_XP" Then
    GUICtrlCreatePic(@SystemDir & '\oobe\images\wpakey.jpg', $iBorderH, $iBorderH, $imgW, $imgH)
    GUICtrlSetState(-1, $GUI_DISABLE)
    Else
    GUISetBkColor(0x0000FF)
    EndIf
    $btn = _DrawButton_Create($guiMain, "Pseudo-Button",60 ,130 ,120)
    _DrawButton_SetStyle($btn, 16, 400, 1, "Comic Sans MS", 0xFFFF00, 0xFF00F7)
    GUISetState(@SW_SHOW, $guiMain)

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

    GUIRegisterMsg($WM_MOVE, '_WM_MOVE')

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

    _DrawButton_Draw($btn)

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

    $zaehler = 0
    While True
    Switch GUIGetMsg ()
    Case $GUI_EVENT_PRIMARYDOWN
    If _DrawButton_Clicked($btn) Then
    $zaehler += 1
    Switch $zaehler
    Case 1
    _DrawButton_SetText($btn, 'Text ist neu')
    Case 2
    _DrawButton_SetText($btn, 'fett')
    _DrawButton_SetStyle($btn, 16, 600, -1, -1, -1, -1)
    Case 3
    _DrawButton_SetText($btn, 'kursiv')
    _DrawButton_SetStyle($btn, 16, 400, 2, -1, -1, -1)
    Case 4
    _DrawButton_SetText($btn, 'kursiv+fett')
    _DrawButton_SetStyle($btn, 16, 600, 2, -1, -1, -1)
    Case 5
    _DrawButton_SetText($btn, 'unterstrichen')
    _DrawButton_SetStyle($btn, 16, 400, 4, -1, -1, -1)
    Case 6
    _DrawButton_SetText($btn, 'durchgestrichen')
    _DrawButton_SetStyle($btn, 16, 400, 8, -1, -1, -1)
    Case 7
    _DrawButton_SetText($btn, 'unter+durch')
    _DrawButton_SetStyle($btn, 16, 400, 12, -1, -1, -1)
    Case 8
    _DrawButton_SetText($btn, 'kursiv+unter+durch')
    _DrawButton_SetStyle($btn, 16, 400, 14, -1, -1, -1)
    Case 9
    _DrawButton_SetText($btn, 'Farben, Font')
    _DrawButton_SetStyle($btn, 16, 400, -1, "Times New Roman", 0xF99922, 0xFFFFFF)
    Case 10
    _DrawButton_SetText($btn, 'Standard')
    _DrawButton_SetStyle($btn, Default, Default, Default, Default, Default, Default)
    ConsoleWrite('Ausrichtung: ' & _DrawButton_AlignmentGet($btn) & ': ' & _DrawButton_AlignmentGet($btn, True) & @CRLF)
    Case 11
    _DrawButton_SetText($btn, 'Top+HCenter')
    _DrawButton_AlignmentSet($btn, BitOR($DT_TOP,$DT_CENTER))
    ConsoleWrite('Ausrichtung: ' & _DrawButton_AlignmentGet($btn) & ': ' & _DrawButton_AlignmentGet($btn, True) & @CRLF)
    Case 12
    _DrawButton_SetText($btn, 'Left+VCenter')
    _DrawButton_AlignmentSet($btn, BitOR($DT_LEFT,$DT_VCENTER))
    ConsoleWrite('Ausrichtung: ' & _DrawButton_AlignmentGet($btn) & ': ' & _DrawButton_AlignmentGet($btn, True) & @CRLF)
    Case 13
    _DrawButton_SetText($btn, 'Right+VCenter')
    _DrawButton_AlignmentSet($btn, BitOR($DT_RIGHT,$DT_VCENTER))
    ConsoleWrite('Ausrichtung: ' & _DrawButton_AlignmentGet($btn) & ': ' & _DrawButton_AlignmentGet($btn, True) & @CRLF)
    Case 14
    _DrawButton_SetText($btn, 'Bottom+HCenter')
    _DrawButton_AlignmentSet($btn, BitOR($DT_BOTTOM,$DT_CENTER))
    ConsoleWrite('Ausrichtung: ' & _DrawButton_AlignmentGet($btn) & ': ' & _DrawButton_AlignmentGet($btn, True) & @CRLF)
    Case 15
    _DrawButton_SetText($btn, 'Top+Left')
    _DrawButton_AlignmentSet($btn, BitOR($DT_TOP,$DT_LEFT))
    ConsoleWrite('Ausrichtung: ' & _DrawButton_AlignmentGet($btn) & ': ' & _DrawButton_AlignmentGet($btn, True) & @CRLF)
    Case 16
    _DrawButton_SetText($btn, 'Bottom+Right')
    _DrawButton_AlignmentSet($btn, BitOR($DT_BOTTOM,$DT_RIGHT))
    ConsoleWrite('Ausrichtung: ' & _DrawButton_AlignmentGet($btn) & ': ' & _DrawButton_AlignmentGet($btn, True) & @CRLF)
    Case Else
    MsgBox(0, 'Button', 'Klick')
    EndSwitch
    EndIf
    Case $GUI_EVENT_RESTORE, $GUI_EVENT_MAXIMIZE
    _DrawButton_Draw($btn)
    Case -3
    Exit
    EndSwitch
    WEnd

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

    Func _WM_MOVE()
    _DrawButton_Draw($btn)
    EndFunc

    [/autoit]

    Edit:
    - Erweitert um 2 Funktionen. Textausrichtung im Button kann gesetzt und abgefragt werden.
    - Flag $DT_NOCLIP hinzugefügt (beschleunigt den Vorgang)

    Edit:
    Hier mal ein Bild, wie es aussieht.
    Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.

    Bilder

    • DrawButton.png
      • 37,16 kB
      • 254 × 306

    Dateien

    DrawButton.au3 8,99 kB – 271 Downloads Bsp_DrawButton.au3 3,99 kB – 260 Downloads
  • Eventhandler, Click, Doppelclick, Dreifachclick, links-rechts-flip, rechts-links-flip

    • BugFix
    • 30. Juni 2010 um 12:49

    Folgendes sollte man so nicht in einer externen Funktion machen:

    [autoit]

    Opt("GUIOnEventMode", 1) ; Zum OnEvent-Mode wechseln
    Opt("MouseCoordMode", 2) ; relative Mauskoordinaten zur Anwendungsfläche

    [/autoit]

    Damit kannst du dem Benutzer deiner Funktion das Skript zerschießen.
    Gehe immer davon aus, dass der Nutzer eine andere Option verwendet und diese zwingend notwendig für sein Programm ist.
    Das realisierst du so:

    [autoit]

    Local $optOld1, $optOld2

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

    ; === vor Skriptzeile, dass diese Option erfordert:
    $optOld1 = Opt("GUIOnEventMode", 1) ; Zum OnEvent-Mode wechseln
    ; Code mit dieser Option
    ; ...
    ; === Zurücksetzen zur vorherigen Option:
    Opt("GUIOnEventMode", $optOld1)

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

    ; === identisch für zweite Option

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

    ; === vor Skriptzeile, dass diese Option erfordert:
    $optOld2 = Opt("MouseCoordMode", 2) ; relative Mauskoordinaten zur Anwendungsfläche
    ; Code mit dieser Option
    ; ...
    ; === Zurücksetzen zur vorherigen Option:
    Opt("MouseCoordMode", $optOld2)

    [/autoit]
  • Listview Subitem BKColor anpassen - je Subitem eine Farbe

    • BugFix
    • 30. Juni 2010 um 12:39
    Zitat von card0384

    wie bekomm ich nicht die Spalte, sondern nur ein bestimmtes Feld (Zeile 3 Spalte 5) farbig?


    Schau dir doch mal mein Beispiel ab Zeile 53 an. Dort erfolgt die Zuordnung.
    Was du beachten mußt:
    Nach dem Setzen einer Farbe für ein Item wird dieser Farbwert für alle weiteren Item verwendet. Du mußt deshalb den Else-Zweig verwenden um den nicht betroffenen Elementen weiß als Hintergrund zu verpassen.

    Und wie du siehst, ist es nicht auf ein gaaanz simples Skript zu reduzieren. Eh du ewig probierst - verwende doch die UDF. ;)

  • dll ansprechen mit stuktur

    • BugFix
    • 30. Juni 2010 um 09:19
    Zitat von vivus

    SetPanelCharacterSet in cvirte.dll nicht gefunden <- ? ??


    Wie soll eine Funktion verwendet werden, die es in der DLL gar nicht gibt?
    Hier die Funcs aus der DLL:
    init_NICard
    read_NICard
    shutdown_NICard
    write_NICard_bit

    Übrigens scheint die DLL buggy zu sein. Dependency Walker gibt einige Fehlermeldungen beim Öffnen.

  • GUICtrlCreateAvi

    • BugFix
    • 28. Juni 2010 um 20:43

    Guckst du:

    [autoit]

    $gui = GUICreate('Uhr')
    $avi = GUICtrlCreateAvi(@WindowsDir & '\clock.avi', 1, 40, 40)
    GUISetState()

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

    Sleep(1000)
    GUICtrlSetState($avi, 1)

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

    Do
    Until GUIGetMsg() = -3

    [/autoit]

    Sprenger120: Wieso sind AVI's das letzte? Etwas sehr pauschale Verunglimpfung. Man muß nur gewisse Regeln beachten.

  • Listview Subitem BKColor anpassen - je Subitem eine Farbe

    • BugFix
    • 28. Juni 2010 um 20:00
    Zitat von card0384

    Dann müsste ich die Veränderung doch der entsprechenden Struktur mitteilen - nur wie?


    Ja deshalb hatte ich in meiner Funktion ein Array erstellt, dass die Items führt, die zu färben sind und die zu verwendende Farbe.
    In der NOTIFY-Funktion hast du ja das Switch-Konstrukt, das du auf mehrer Listview erweitern kanns:

    [autoit]

    Switch $hWndFrom
    Case $hListView1

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

    Case $hListView2

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

    Case $hListView3

    [/autoit]

    Somit mußt du aber in deinem Array neben Item, SubItem und Farbe auch das Listview-Handle führen. ( $aLV[n][4] )
    Der Vorgang (innerhalb WM_NOTIFY-Funktion) ist immer identisch:
    - Handle = gesuchtes LV-Handle
    - Ereignis VOR Zeichnen Item/SubItem
    - Index Item/SubItem aus LV-Struktur auslesen
    - Prüfen ob Index/SubIndex in Array enthalten - JA: Werte in Struktur setzen

    Zitat

    2. Geht das Ganze aufgrund 1. auch ohne WM_Notify, also direkt im Script-Ablauf?


    Definitiv: Nein
    SubItems lassen sich nur per OWNERDRAW zeichnen. Nur kpl. Items kannst du wie bekannt einfärben.

  • Erkennen ob Edit,Label,...

    • BugFix
    • 28. Juni 2010 um 19:12
    Zitat von Antispeed

    Bitte heflt, damit man Edit&Input unterscheiden kann


    Das ist beides CLASS:EDIT, somit kannst du sie auf diese Weise nicht unterscheiden.

  • Listview Subitem BKColor anpassen - je Subitem eine Farbe

    • BugFix
    • 28. Juni 2010 um 17:55
    Zitat von card0384

    Gibts da nen DLLCall oder an welcher Stelle des BugFix-Codes genau wird das Subitem gefärbt? Ich seh da immer nur nen Schwung DllStructGetData, aber keinen DLLCall, bei welchem das ganze wieder an das ListView übergeben wird.


    :rolleyes: Nein, einen Dll-Call gibt es nicht. Es werden Strukturen verwendet und die Daten dadrin verändert.
    Wenn du eine fixe Anzahl an Elementen hast und nur Hintergrundfarben setzen möchtest geht das mit deutlich weniger Aufwand.
    Ich mach dir mal ein kleines Bsp. und stelle es rein.

    Edit: Und hier das Bsp.:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <GuiListView.au3>
    #include <ListViewConstants.au3>
    #include <StructureConstants.au3>
    #include <WindowsConstants.au3>

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

    $GUI = GUICreate("Listview Farbig", 800, 300)
    $cListView = GUICtrlCreateListView("", 2, 2, 796, 294, -1, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT))
    $hListView = GUICtrlGetHandle($cListView)
    For $i = 1 To 31
    _GUICtrlListView_InsertColumn($hListView, $i-1, $i, 25)
    Next
    For $i = 0 To 21 ; alle Item/SubItem erstellen
    _GUICtrlListView_AddItem($hListView, "", $i)
    For $j = 0 To 30
    _GUICtrlListView_AddSubItem ($hListView, $i, "", $j)
    Next
    Next

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

    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
    GUISetState()

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

    While True
    $msg = GUIGetMsg()
    Switch $msg
    Case -3
    ExitLoop
    EndSwitch
    WEnd
    Exit

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

    Func WM_NOTIFY($hWnd, $Msg, $wParam, $lParam)
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR
    $tNMHDR = DllStructCreate($tagNMHDR, $lParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    Switch $hWndFrom
    Case $hListView
    Switch $iCode
    Case $NM_CUSTOMDRAW
    Local $tCustDraw = DllStructCreate($tagNMLVCUSTOMDRAW, $lParam)
    Local $iDrawStage, $iItem, $iSubitem, $hDC, $tRect
    $iDrawStage = DllStructGetData($tCustDraw, 'dwDrawStage')
    Switch $iDrawStage
    Case $CDDS_ITEMPREPAINT
    Return $CDRF_NOTIFYSUBITEMDRAW
    Case BitOR($CDDS_ITEMPREPAINT, $CDDS_SUBITEM)
    ; Item/SubItem das aktuell gezeichnet werden soll ermitteln
    $iItem = DllStructGetData($tCustDraw, 'dwItemSpec')
    $iSubitem = DllStructGetData($tCustDraw, 'iSubItem')
    ; bei fixer Zuordnung z.B. so
    Switch $iItem ; Zeilenwahl
    Case 0, 5, 10, 15, 20 ; in 5-Zeilenabstand die Zeile rot
    DllStructSetData($tCustDraw, 'clrTextBk', RGB2BGR(0xFF0000))
    Case Else ; alle anderen weiß
    DllStructSetData($tCustDraw, 'clrTextBk', RGB2BGR(0xFFFFFF))
    EndSwitch
    Switch $iSubitem
    Case 5, 6, 12, 13, 19, 20, 26, 27 ; jede 6./7. Spalte blau
    DllStructSetData($tCustDraw, 'clrTextBk', RGB2BGR(0x0000FF))
    EndSwitch
    Return $CDRF_NEWFONT
    EndSwitch
    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_NOTIFY

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

    Func RGB2BGR($iColor)
    Local $sH = Hex($iColor,6)
    Return '0x' & StringRight($sH, 2) & StringMid($sH,3,2) & StringLeft($sH, 2)
    EndFunc

    [/autoit]
  • Tool will nicht funktionieren: Alle Internet Explorer Instanzen verstecken

    • BugFix
    • 28. Juni 2010 um 14:49

    Prüfe ob das Fenster sichtbar ist - wenn ja hebe diesen Status auf.

    [autoit]

    $hWnd = 'deine IE_Instance'
    $state = WinGetState($hWnd)
    If BitAND($state, 2) Then
    $state = BitXOR($state, 2)
    WinSetState($hWnd, '', $state)
    EndIf

    [/autoit]
  • Tool will nicht funktionieren: Alle Internet Explorer Instanzen verstecken

    • BugFix
    • 28. Juni 2010 um 14:32

    Deine Statusabfrage ist falsch. Der Status ist immer zusammengesetzt aus mehreren Werten. Du prüfst auf NICHT 5. 5 entspricht: Fenster existiert und ist enabled. Warum wählst du nicht z.B.:
    If BitAnd($status, 1) Then 'schließen'

  • Netzwerk Programmierung

    • BugFix
    • 28. Juni 2010 um 12:10
    Zitat von wireNova

    müsste das nicht ein vergleichsoperator sein "=="?


    In AutoIt ist "=" Zuweisungsoperator und Vergleichsoperator.
    Nur füe Stringvergleiche ist für sensitive Prüfung "==" erforderlich.

  • Ähnliches wie GUICtrlSetOnEvent bei Input?

    • BugFix
    • 28. Juni 2010 um 11:44

    Einfach Ereignis "PRIMARYDOWN" nutzen und prüfen ob Cursor über Input:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    Opt("GUIOnEventMode", 1)
    $hGUI = GUICreate("Beispiel", 190, 25)
    $hInput = GUICtrlCreateInput("Klicken damit eine MsgBox erscheint!", 3, 3, 185)
    GUISetOnEvent(-3, "_Exit")
    GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, '_MouseDown')
    GUISetState()
    ControlSend($hGui, '', $hInput, "{CTRLDOWN}{HOME}{CTRLUP}")

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

    While 1
    Sleep(100)
    WEnd

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

    Func _Exit()
    GUIDelete()
    Exit
    EndFunc

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

    Func _MouseDown()
    $cursor = GUIGetCursorInfo($hGui)
    If $cursor[4] = $hInput Then MsgBox(0, '', 'Und hier die MessageBox!')
    EndFunc

    [/autoit]
  • GUICtrlListView Icon ????

    • BugFix
    • 25. Juni 2010 um 20:39

    Das Problem hat folgende Ursache:
    Wenn in deinem Listview Daten sind sieht das etwa so aus
    LV-Index0 | WertA | SubA
    LV-Index1 | WertB | SubB
    LV-Index2 | WertC | SubC
    LV-Index3 | WertD | SubD

    Nehmen wir an, WertCC wird eingefügt (und einsortiert), dann sieht es so aus:
    LV-Index0 | WertA | SubA
    LV-Index1 | WertB | SubB
    LV-Index2 | WertC | SubC
    LV-Index3 | WertCC | SubCC
    LV-Index4 | WertD | SubD

    Da die Icons/Images aber dem LV-Index zugeordnet sind, stimmt nun die Zuordnung nicht mehr.
    Ich speichere den Index aus der Imageliste einfach mit _GUICtrlListView_SetItemParam() im Item selbst. Somit kann ich bei jeder Änderung aus dem Item selbst den Image-Index auslesen und das Image erneut setzen.

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™