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

  • Variierende Anzahl von Dimensionen in einem Array

    • BugFix
    • 31. Oktober 2010 um 17:38

    @Jeka:
    letzter Post: [ Sonntag, 23. Mai 2010, 16:07 ] <== Leichenschändung :D

  • Von Input zu Input

    • BugFix
    • 31. Oktober 2010 um 17:32

    Hatte ich mal ein Bsp. für gemacht, kannst es ja dann anpassen (zum nächsten Feld mit ENTER):

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WinAPI.au3>
    #include <WindowsConstants.au3>
    #include <StructureConstants.au3>
    #include <Array.au3>
    Opt("GUIOnEventMode", 1)
    OnAutoItExitRegister('OnAutoItExit')

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

    Global $hStub_KeyProc = DllCallbackRegister("_KeyProc", "long", "int;wparam;lparam")
    Global $hmod = _WinAPI_GetModuleHandle(0)
    Global $hHook = _WinAPI_SetWindowsHookEx($WH_KEYBOARD_LL, DllCallbackGetPtr($hStub_KeyProc), $hmod)
    Global $active = False, $gui, $ID_lastFocus = 0
    Enum $i1, $i2, $c1, $i3, $c2, $i4, $n ; <== hier die Reihenfolge, wie der Fokus 'wandern' soll ($n ist Zähler für Anz. Ctrl)
    Global $a[$n]

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

    $gui = GUICreate('')
    GUISetOnEvent(-3, '_ende')
    $a[$i1] = GUICtrlCreateInput('', 10,10,40)
    $a[$i2] = GUICtrlCreateInput('', 60,10,40)
    $a[$c1] = GUICtrlCreateCombo('', 110,10,40)
    $a[$i3] = GUICtrlCreateInput('', 160,10,40)
    $a[$c2] = GUICtrlCreateCombo('', 210,10,40)
    $a[$i4] = GUICtrlCreateInput('', 260,10,40)
    GUISetState()

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

    While 1
    If BitAND(WinGetState($gui), 8) Then
    $active = True
    Else
    $active = False
    EndIf
    Sleep(100)
    WEnd

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

    Func _ende()
    Exit
    EndFunc

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

    ;===========================================================
    ; callback function
    ;===========================================================
    Func _KeyProc($nCode, $wParam, $lParam)
    Local $tKEYHOOKS, $vkCode, $ID, $index
    $tKEYHOOKS = DllStructCreate($tagKBDLLHOOKSTRUCT, $lParam)
    If $nCode < 0 Or Not $active Then Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
    $vkCode = DllStructGetData($tKEYHOOKS, "vkCode")
    If $wParam = $WM_KEYDOWN And $vkCode = 13 Then ; ENTER gedrückt
    $ID = _WinAPI_GetDlgCtrlID(ControlGetHandle($gui, '', ControlGetFocus($gui)))
    ; Für ComboBoxen kann NICHT der Fokus abgefragt werden, da dieser auf dem Input-Ctrl der ComboBox liegt.
    ; Hier muß in der Instanz-Reihenfolge mit dem Wert des letzten Ctrl verglichen werden.
    ; Die Reihenfolge der Erstellung in der GUI ist egal, da der Fokus über die enumerierte Reihenfolge der Ctrl-Variablen
    ; weitergesetzt wird.
    ; Falls eine ComboBox als letztes Ctrl in der Folge erscheint, muß dies in der Abfragelogik berücksichtigt werden.
    If _WinAPI_GetClassName($ID) <> 'Edit' Then
    ; Variante 1: über Class+Instance
    $ID = _WinAPI_GetDlgCtrlID(ControlGetHandle($gui, "", "[CLASS:ComboBox; INSTANCE:1]"))
    If $ID_lastFocus > $ID Then $ID = _WinAPI_GetDlgCtrlID(ControlGetHandle($gui, "", "[CLASS:ComboBox; INSTANCE:2]"))
    ; Variante 2: über Enumerations-Reihenfolge der ComboCtrls
    ;~ $ID = $a[$c1]
    ;~ If $ID_lastFocus > $ID Then $ID = $a[$c2]
    EndIf
    $index = _ArraySearch($a, $ID)
    If @error Then Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
    If $index < UBound($a)-1 Then
    GUICtrlSetState($a[$index +1], $GUI_FOCUS)
    $ID_lastFocus = $a[$index +1]
    Else
    GUICtrlSetState($a[0], $GUI_FOCUS)
    $ID_lastFocus = $a[0]
    EndIf
    EndIf
    Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
    EndFunc

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

    Func OnAutoItExit()
    _WinAPI_UnhookWindowsHookEx($hHook)
    DllCallbackFree($hStub_KeyProc)
    EndFunc

    [/autoit]


    Edit: Hier die Variante "direkt weiter":

    Spoiler anzeigen
    [autoit]

    #include <EditConstants.au3>
    #include <WindowsConstants.au3>
    Opt("GUIOnEventMode", 1)

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

    Global $gui
    Enum $i1, $i2, $i3, $i4, $n ; <== hier die Reihenfolge, wie der Fokus 'wandern' soll ($n ist Zähler für Anz. Ctrl)
    Global $a[$n]

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

    $gui = GUICreate('')
    GUISetOnEvent(-3, '_ende')
    $a[$i1] = GUICtrlCreateInput('', 10,10,40)
    $a[$i2] = GUICtrlCreateInput('', 60,10,40)
    $a[$i3] = GUICtrlCreateInput('', 160,10,40)
    $a[$i4] = GUICtrlCreateInput('', 260,10,40)
    GUISetState()

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

    ControlFocus($gui, '', $a[$i1])
    GUIRegisterMsg($WM_COMMAND, 'WM_COMMAND')

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

    While True
    Sleep(50)
    WEnd

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

    Func _ende()
    Exit
    EndFunc

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

    Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
    Local $hWndFrom, $iIDFrom, $iCode, $hWndEdit, $sRead
    $hWndFrom = $ilParam
    $iIDFrom = BitAND($iwParam, 0xFFFF) ; Low Word
    $iCode = BitShift($iwParam, 16) ; Hi Word
    For $i = 0 To UBound($a) -2
    Switch $hWndFrom
    Case GUICtrlGetHandle($a[$i])
    If $iCode = $EN_CHANGE Then
    ControlFocus($gui, '', $a[$i+1])
    ExitLoop
    EndIf
    EndSwitch
    Next
    Return 0
    EndFunc ;==>WM_COMMAND

    [/autoit]
  • Einstellungen speichern!

    • BugFix
    • 31. Oktober 2010 um 15:52

    Du mußt jede Änderung speichern. Hier mal ein Bsp. wie du es nutzen kannst:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    OnAutoItExitRegister('_WriteToIni') ; Beim Beenden des Programms wird autmatisch der CB-Status in die INI geschrieben

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

    Global $INI = @ScriptDir & '\test_CB.ini'
    If Not FileExists($INI) Then ; bei erstem Start Erstellen der INI, vorbelegt UNCHECKED
    IniWriteSection($INI, 'checkboxes', '1=0' & @LF & '2=0' & @LF & '3=0' & @LF & '4=0')
    EndIf

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

    Local $gui, $aCB[4], $y = 10
    Local $aState = IniReadSection($INI, 'checkboxes') ; Status der Checkboxen einlesen

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

    $gui = GUICreate('Test')
    For $i = 0 To 3
    $aCB[$i] = GUICtrlCreateCheckbox('CheckBox ' & $i+1, 10, $y, 80)
    If $aState[$i+1][1] = 1 Then
    GUICtrlSetState($aCB[$i], $GUI_CHECKED)
    Else
    GUICtrlSetState($aCB[$i], $GUI_UNCHECKED)
    EndIf
    $y += 25
    Next

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

    GUISetState()

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

    While 1
    $msg = GUIGetMsg()
    If $msg = -3 Then Exit
    For $i = 0 To UBound($aCB) -1 ; wenn CB geklickt wird, wird der Status im Array Status geändert
    If $msg = $aCB[$i] Then
    If BitAND(GUICtrlRead($aCB[$i]), $GUI_CHECKED) Then
    $aState[$i+1][1] = 1
    Else
    $aState[$i+1][1] = 0
    EndIf
    ExitLoop
    EndIf
    Next
    WEnd

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

    Func _WriteToIni() ; beim Beenden von AutoIt Zurückschreiben Status
    IniWriteSection($INI, 'checkboxes', $aState)
    EndFunc

    [/autoit]
  • Forum lahmt [BugFix: Nicht mehr]

    • BugFix
    • 31. Oktober 2010 um 14:04

    Frohe Nachricht: Gun-Food hat den Fehler ausgemerzt - das Forum läuft wieder. Herzlichen Dank dafür.

  • _GUICtrlComboBoxEx_AddString()

    • BugFix
    • 31. Oktober 2010 um 12:08
    Zitat von mipez

    ich meine den Parameter


    Na dann sag das doch gleich :D
    iParam kann nur Integer sein. Außerdem sollte man folgenden (in der AutoIt-Hilfe nicht dokumentierten Zustand) berücksichtigen:
    Integer 1 - 1000 in iParam werden vom System verwendet zur Zuordnung von IDs!
    Also geh auf Nummer sicher und erhöhe beim Eintragen in iParam deinen Wert um z.B. 2000 und beim Auslesen ziehst du diese dann wieder ab.
    Du kannst doch statt der Arraywerte, den Index des Arraywertes eintragen. Damit hast du doch auch direkt Zugriff auf deinen Eintrag.

  • _GUICtrlComboBoxEx_AddString()

    • BugFix
    • 31. Oktober 2010 um 11:54

    Es heiß nicht umsonst: _AddString ;)
    Also verpacke deine Zahlen als String: "0.123"

  • Best. Wörter aus .ini löschen

    • BugFix
    • 30. Oktober 2010 um 15:17

    Verwende folgendes Pattern:

    [autoit]

    $string = StringRegExpReplace($string, "(<.>)([^<]+)(</.>)", "$2")

    [/autoit]
  • Neuer Wettbewerb - Was haltet ihr davon ?

    • BugFix
    • 29. Oktober 2010 um 17:47

    Möchte auch mal meinen Senf dazugeben:
    Wenn schon Mathe draufsteht, sollte auch wirklich Mathe drin sein (also kein GUI oder GDI+ -Gedöns).
    Als Matheaufgaben, die interessant sind und auch von allen angegangen werden können, würde ich Aufgaben sehen, in denen es darum geht neue/andere Lösungswege zu durchaus auch bekannten Problemen zu entwickeln. Dann liegt das Hauptaugenmerk auf der Logik als A und O der Mathematik. :thumbup:

    Also dann viel Spaß dabei.

  • Textteile in einer Zelle unterschiedlich formatieren

    • BugFix
    • 29. Oktober 2010 um 17:34
    Zitat von autoit_dau

    mal ein "X" oder "POQ" stehen kann und ich die Zeichanzahl nicht weiß.


    In meinem Beispiel ist es völlig egal, wie lang die Inhalte der beiden Zellen sind. Ich speichere die Länge und formatiere danach die entsprechende Anzahl an Zeichen.
    Und für die Farbe,Schriftart etc. kannst du natürlich auch Variablen verwenden, denen du einen entsprechenden Wert zuweist.

  • Button BkColor auslesen

    • BugFix
    • 29. Oktober 2010 um 15:42

    Hast du dran gedacht, dass PixelGetColor absolute Koordinaten verwendet?

  • Button BkColor auslesen

    • BugFix
    • 29. Oktober 2010 um 15:15

    Spontan mir einfallende Lösung: PixelGetColor()

  • Com Objekt - Errormanagment möglich?

    • BugFix
    • 28. Oktober 2010 um 21:30

    Schau in der Hilfe unter "ObjEvent" - da findest du einen Objekt-Error-Handler.

  • Zufallsgenerator Hilfe benötigt

    • BugFix
    • 28. Oktober 2010 um 21:20

    Ich hatte denselben Lösungsweg wie Oscar, auch mal in eine Funktion verpackt. Sollte dir dann einfacher fallen es zu nutzen.
    Mit Parameter $array = 1 wird ein Array zurückgegeben.

    Spoiler anzeigen
    [autoit]

    ;==============================================================================
    ; Gibt eine Anzahl Zufallszahlen ohne Doppel als String oder Array zurück
    ; Bereich von - bis festlegbar (positiv Integer)
    ; mit -1 für Anzahl werden alle Zahlen des Bereichs in zufälliger Reihenfolge
    ; ausgegeben
    ;==============================================================================
    Func _RandomExt($iBis, $iVon=1, $iAnzahl=-1, $array=0)
    Local $count = $iBis -$iVon +1
    If $iAnzahl = -1 Then $iAnzahl = $count
    Local $aValue[$count], $start = $iVon, $sOut = '', $random
    For $i = 0 To $count -1
    $aValue[$i] = $start
    $start += 1
    Next
    For $i = 0 To $iAnzahl -1
    $random = Random(0, $count -1 -$i, 1)
    $sOut &= $aValue[$random] & ','
    $aValue[$random] = $aValue[$count -1 -$i]
    Next
    $sOut = StringTrimRight($sOut, 1)
    If $array Then Return StringSplit($sOut, ',', 2)
    Return $sOut
    EndFunc ;==>_RandomExt

    [/autoit]
  • Maus deaktivieren

    • BugFix
    • 28. Oktober 2010 um 21:08

    Na siehste, wie einfach es ist, wenn du sagst, was du vor hast.
    Maus brauchst du nicht. Du willst dem User ja nur einen Mauszeiger zeigen der bestimmte Dinge tut:
    - MauszeigerIcon auf Mini-GUI platzieren, die du transparent machst
    - statt echter Maus die Maus-GUI bewegen
    - die tatsächlichen Mausklicks kannst du ja mit ControlClick realisieren, da Paint Standard-Windows Ctrl verwendet

  • Maus deaktivieren

    • BugFix
    • 28. Oktober 2010 um 19:40

    Du machst ja ein riesen Geheimnis draus. ^^
    Also du willst die Maus mit Präzision auf dem Monitor rumschubsen und der User soll sie sehen aber nicht selbst eingreifen können?
    Da fällt mir nix zu ein. :D

  • Maus deaktivieren

    • BugFix
    • 28. Oktober 2010 um 19:32
    Zitat von SenA

    Wie gesagt, die Maus an einer Position halten ist kein Problem, mein Programm muss sie aber verändern können. Lediglich der User soll die MausPos nicht verändern dürfen


    Na dann fängst du die Maus mit _MouseTrap an der gewünschten Position und bei Bedarf gibst du sie frei und setzt sie an eine andere Position (MouseMove), wobei ich den Sinn dahinter nicht erkennen kann. Wozu brauchst du die Maus, wenn der User sie nicht benutzen soll? Dann kannst du sie doch einfach ausblenden.

  • pruefen ob checkbox aktiviert ist

    • BugFix
    • 28. Oktober 2010 um 19:26
    [autoit]

    $status = ControlCommand($sTitle, "", "[CLASS:Button; INSTANCE:1]", "IsChecked", "") ; 1 für Checked

    [/autoit]
  • Maus deaktivieren

    • BugFix
    • 28. Oktober 2010 um 19:16

    Dann probier mal den Aufruf "Rundll32.exe mouse,disable"

  • Maus deaktivieren

    • BugFix
    • 28. Oktober 2010 um 19:08

    Fang doch die Maus mit _MouseTrap in einem ganz kleinen Bereich und verstecke den Cursor.

  • Hilfe...

    • BugFix
    • 28. Oktober 2010 um 16:55

    Registriere WM-Message "WM_KEYDOWN" und zähle damit.

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™